[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