[Intel-gfx] [PATCH v2 06/13] drm/i915: Simplify ELSP queue request tracking

Chris Wilson chris at chris-wilson.co.uk
Fri Aug 26 12:11:00 UTC 2016


On Fri, Aug 26, 2016 at 08:10:24AM +0100, Chris Wilson wrote:
>  static void i915_gem_reset_engine_cleanup(struct intel_engine_cs *engine)
>  {
>  	struct drm_i915_gem_request *request;
> +	unsigned long flags;
>  	struct intel_ring *ring;
>  
> +	/* Ensure irq handler finishes or is cancelled, and not run again. */
> +	local_irq_save(flags);
> +	tasklet_kill(&engine->irq_tasklet);
> +	tasklet_disable(&engine->irq_tasklet);
> +	local_irq_restore(flags);

I am paranoid that the tasklet runs as we are changing its data.
However, tasklet_disable() doesn't actually stop new tasklets being
scheduled, just defers their execution unilt tasklet_enable(). So it is
not providing the protection I sought. However, due to the GPU reset,
there can only be a pending irq/tasklet (and there will be no new ones
until the next ELSP write), so the solo tasklet_kill() as we previously
had should be sufficient.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the Intel-gfx mailing list