Quoting Tvrtko Ursulin (2017-06-21 14:33:59) > > On 21/06/2017 13:48, Chris Wilson wrote: > > Highly unlikely, but if the stop_machine() did suspend the tasklet, we > > want to make sure that when it wakes it finds there is nothing to do. > > Otherwise, it will loudly complain that the ELSP port tracking no longer > > matches the hardware, and we will be mightly confused. > > > > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > > Cc: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> > > --- > > drivers/gpu/drm/i915/i915_gem.c | 7 +++++++ > > 1 file changed, 7 insertions(+) > > > > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c > > index 1353491c1010..ae3ce1314bd1 100644 > > --- a/drivers/gpu/drm/i915/i915_gem.c > > +++ b/drivers/gpu/drm/i915/i915_gem.c > > @@ -3092,6 +3092,13 @@ static void engine_set_wedged(struct intel_engine_cs *engine) > > engine->execlist_first = NULL; > > > > spin_unlock_irqrestore(&engine->timeline->lock, flags); > > + > > + /* The port is checked prior to scheduling a tasklet, but > > + * just in case we have suspended the tasklet to do the > > + * wedging make sure that when it wakes, it decides there > > + * is no work to do by clearing the irq_posted bit. > > + */ > > + clear_bit(ENGINE_IRQ_EXECLIST, &engine->irq_posted); > > } > > } > > > > > > Or tasklet_kill? Hmm, technically not permitted: void tasklet_kill(struct tasklet_struct *t) { if (in_interrupt()) pr_notice("Attempt to kill tasklet from interrupt\n"); while (test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) { do { yield(); } while (test_bit(TASKLET_STATE_SCHED, &t->state)); } tasklet_unlock_wait(t); clear_bit(TASKLET_STATE_SCHED, &t->state); } Even if we don't trigger the in_interrupt() simply due to having interrupts disabled, then the potential yield() is illegal from inside stop_machine(). -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx