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