[Intel-gfx] [PATCH v2] drm/i915: Use BUILD_BUG_ON to detected missing engine definitions

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Wed Mar 1 19:29:15 UTC 2017


On 01/03/2017 17:39, Michal Wajdeczko wrote:
> Engine related definitions are located in different files
> and it is easy to break their cross dependency.
>
> Additionally use GEM_WARN_ON to catch invalid engine index.
>
> v2: compare against array size
>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko at intel.com>
> Cc: Jani Nikula <jani.nikula at intel.com>
> Cc: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
> Cc: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> ---
>  drivers/gpu/drm/i915/intel_engine_cs.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
> index a238304..c1f58b5 100644
> --- a/drivers/gpu/drm/i915/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/intel_engine_cs.c
> @@ -84,11 +84,16 @@ static const struct engine_info {
>
>  static int
>  intel_engine_setup(struct drm_i915_private *dev_priv,
> -		   enum intel_engine_id id)
> +		   unsigned int id)
>  {
>  	const struct engine_info *info = &intel_engines[id];
>  	struct intel_engine_cs *engine;
>
> +	BUILD_BUG_ON(ARRAY_SIZE(intel_engines) !=
> +		     ARRAY_SIZE(dev_priv->engine));
> +	if (GEM_WARN_ON(id >= ARRAY_SIZE(intel_engines)))
> +		return -EINVAL;
> +
>  	GEM_BUG_ON(dev_priv->engine[id]);
>  	engine = kzalloc(sizeof(*engine), GFP_KERNEL);
>  	if (!engine)
>

I would add asserts for id >= ARRAY_SIZE(intel_engines) and id >= 
ARRAY_SIZE(dev_priv->engine). That provides guarantees for no out of 
bounds access within this function and should be enough for this function.

The rest sounds just like trouble for now.

Also I am not sure about negative enum, do we elsewhere check for that 
class of errors? Is it worth it? Maybe then just cast to unsigned in the 
above mentioned asserts?

Regards,

Tvrtko


More information about the Intel-gfx mailing list