[Intel-gfx] [PATCH] drm/i915: Use sseu size for determining eu_regs[]

Lionel Landwerlin lionel.g.landwerlin at intel.com
Tue Mar 13 12:23:40 UTC 2018


Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>

On 13/03/18 11:31, Chris Wilson wrote:
> eu_regs[] is written 2*max_slices times (like s_reg[]) but oddly read
> 2*max_slices + max_subslices/2 times. Allocate the array large enough
> for the writes to avoid overwriting our stack and worry about the logic
> later.
>
> Fixes: 7aa0b14ede64 ("drm/i915: Remove variable length arrays from sseu debugfs printers")
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> Cc: Matthew Auld <matthew.auld at intel.com>
> ---
>   drivers/gpu/drm/i915/i915_debugfs.c | 8 ++++++--
>   1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index 0eac7dcdddbf..bc3f7d546d53 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -4345,8 +4345,9 @@ static void cherryview_sseu_device_status(struct drm_i915_private *dev_priv,
>   static void gen10_sseu_device_status(struct drm_i915_private *dev_priv,
>   				     struct sseu_dev_info *sseu)
>   {
> +#define SS_MAX 6
>   	const struct intel_device_info *info = INTEL_INFO(dev_priv);
> -	u32 s_reg[6], eu_reg[2 * 4], eu_mask[2];
> +	u32 s_reg[SS_MAX], eu_reg[2 * SS_MAX], eu_mask[2];
>   	int s, ss;
>   
>   	for (s = 0; s < info->sseu.max_slices; s++) {
> @@ -4394,13 +4395,15 @@ static void gen10_sseu_device_status(struct drm_i915_private *dev_priv,
>   						      eu_cnt);
>   		}
>   	}
> +#undef SS_MAX
>   }
>   
>   static void gen9_sseu_device_status(struct drm_i915_private *dev_priv,
>   				    struct sseu_dev_info *sseu)
>   {
> +#define SS_MAX 3
>   	const struct intel_device_info *info = INTEL_INFO(dev_priv);
> -	u32 s_reg[3], eu_reg[2 * 4], eu_mask[2];
> +	u32 s_reg[SS_MAX], eu_reg[2 * SS_MAX], eu_mask[2];
>   	int s, ss;
>   
>   	for (s = 0; s < info->sseu.max_slices; s++) {
> @@ -4448,6 +4451,7 @@ static void gen9_sseu_device_status(struct drm_i915_private *dev_priv,
>   						      eu_cnt);
>   		}
>   	}
> +#undef SS_MAX
>   }
>   
>   static void broadwell_sseu_device_status(struct drm_i915_private *dev_priv,




More information about the Intel-gfx mailing list