[PATCH v4] drm/i915: Allocate intel_engine_cs structure only for the enabled engines

Chris Wilson chris at chris-wilson.co.uk
Wed Jul 27 17:24:01 UTC 2016


On Wed, Jul 27, 2016 at 10:45:45PM +0530, akash.goel at intel.com wrote:
>  void i915_check_and_clear_faults(struct drm_i915_private *dev_priv)
>  {
>  	struct intel_engine_cs *engine;
> +	u32 iter;
>  
>  	if (INTEL_INFO(dev_priv)->gen < 6)
>  		return;
>  
> -	for_each_engine(engine, dev_priv) {
> +	for_each_engine(engine, dev_priv, iter) {
>  		u32 fault_reg;
>  		fault_reg = I915_READ(RING_FAULT_REG(engine));
>  		if (fault_reg & RING_FAULT_VALID) {
> @@ -2285,7 +2288,10 @@ void i915_check_and_clear_faults(struct drm_i915_private *dev_priv)
>  				   fault_reg & ~RING_FAULT_VALID);
>  		}
>  	}
> -	POSTING_READ(RING_FAULT_REG(&dev_priv->engine[RCS]));
> +
> +	/* Engine specific init may not have been done till this point. */
> +	if (dev_priv->engine[RCS])
> +		POSTING_READ(RING_FAULT_REG(dev_priv->engine[RCS]));
>  }

That deserves to be fixed first. If i915_check_and_clear_faults() is
being run before engine setup, it is reading bogus addresses. This needs
to be moved to intel_engines_init().
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the Intel-gfx-trybot mailing list