Re: [PATCH] drm/etnaviv: correct ETNA_MAX_PIPE define

From: Lucas Stach
Date: Mon Nov 04 2019 - 04:44:11 EST


On Fr, 2019-11-01 at 11:10 +0100, Christian Gmeiner wrote:
> etnaviv supports the following pipe types:
>
> ETNA_PIPE_3D 0x00
> ETNA_PIPE_2D 0x01
> ETNA_PIPE_VG 0x02
>
> The current used value of 4 for ETNA_MAX_PIPES is wrong and
> caueses some troubles in the combination with perf counters.
>
> Lets have a look at the function etnaviv_pm_query_dom(..):
> If domain->pipe is 3 then we are one element beyond the end
> of the array.
>
> The easiest way to fix this issue is to provide a correct value
> for ETNA_MAX_PIPES.

No, this is not a correct fix. The ETNA_MAX_PIPES define does not
correspond to the pipe types, it's the number of maximum possible GPU
cores. Any code in the driver needs to deal with less GPU cores being
available than this maximum number. If it doesn't, please fix the code
instead of messing with this define.

Regards,
Lucas

> Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
> Fixes: a8c21a5451d8 ("drm/etnaviv: add initial etnaviv DRM driver")
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Christian Gmeiner <christian.gmeiner@xxxxxxxxx>
> ---
> include/uapi/drm/etnaviv_drm.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/uapi/drm/etnaviv_drm.h
> b/include/uapi/drm/etnaviv_drm.h
> index 09d0df8b71c5..5a62228298d1 100644
> --- a/include/uapi/drm/etnaviv_drm.h
> +++ b/include/uapi/drm/etnaviv_drm.h
> @@ -75,7 +75,7 @@ struct drm_etnaviv_timespec {
> #define ETNAVIV_PARAM_GPU_NUM_VARYINGS 0x1a
> #define ETNAVIV_PARAM_SOFTPIN_START_ADDR 0x1b
>
> -#define ETNA_MAX_PIPES 4
> +#define ETNA_MAX_PIPES 3
>
> struct drm_etnaviv_param {
> __u32 pipe; /* in */