Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> writes: > Before we assert that the engine is idle, make sure we flush any > residual tasklet. After that point, if the engine is not idle, more work > may be queued despite us trying to park the engine and go to sleep. > > References: https://bugs.freedesktop.org/show_bug.cgi?id=103479 > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Cc: Mika Kuoppala <mika.kuoppala@xxxxxxxxxxxxxxx> Reviewed-by: Mika Kuoppala <mika.kuoppala@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/intel_engine_cs.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c > index 0f8c542f0af2..70eeafe8a6ec 100644 > --- a/drivers/gpu/drm/i915/intel_engine_cs.c > +++ b/drivers/gpu/drm/i915/intel_engine_cs.c > @@ -1542,6 +1542,10 @@ void intel_engines_park(struct drm_i915_private *i915) > enum intel_engine_id id; > > for_each_engine(engine, i915, id) { > + /* Flush the residual irq tasklets first. */ > + intel_engine_disarm_breadcrumbs(engine); > + tasklet_kill(&engine->execlists.irq_tasklet); > + > /* > * We are committed now to parking the engines, make sure there > * will be no more interrupts arriving later and the engines > @@ -1558,9 +1562,6 @@ void intel_engines_park(struct drm_i915_private *i915) > if (engine->park) > engine->park(engine); > > - intel_engine_disarm_breadcrumbs(engine); > - tasklet_kill(&engine->execlists.irq_tasklet); > - > i915_gem_batch_pool_fini(&engine->batch_pool); > engine->execlists.no_priolist = false; > } > -- > 2.15.0.rc2 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx