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
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to