Quoting Mika Kuoppala (2018-05-07 09:34:24) > Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> writes: > > > We rely on ksoftirqd to run in a timely fashion in order to drain the > > execlists queue. Quite frequently, it does not. In some cases we may see > > latencies of over 200ms triggering our idle timeouts and forcing us to > > declare the driver wedged! > > > > Thus we can speed up idle detection by bypassing ksoftirqd in these > > cases and flush our tasklet to confirm if we are indeed still waiting > > for the ELSP to drain. > > > > v2: Put the execlists.first check back; it is required for handling > > reset! > > > > References: https://bugs.freedesktop.org/show_bug.cgi?id=106373 > > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > > Cc: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> > > Cc: Mika Kuoppala <mika.kuoppala@xxxxxxxxxxxxxxx> > > --- > > drivers/gpu/drm/i915/intel_engine_cs.c | 15 ++++++++++++--- > > 1 file changed, 12 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c > > index 70325e0824e3..a3111511ea1d 100644 > > --- a/drivers/gpu/drm/i915/intel_engine_cs.c > > +++ b/drivers/gpu/drm/i915/intel_engine_cs.c > > @@ -945,10 +945,19 @@ bool intel_engine_is_idle(struct intel_engine_cs *engine) > > return true; > > > > /* Waiting to drain ELSP? */ > > - if (READ_ONCE(engine->execlists.active)) > > - return false; > > + if (READ_ONCE(engine->execlists.active)) { > > + struct intel_engine_execlists *execlists = &engine->execlists; > > + > > + if (tasklet_trylock(&execlists->tasklet)) { > > Now that we have the lock, sample active again to catch > the late tasklet run and skip running if so? It becomes a nop in the submission tasklet, it's not dangerous. So it comes down to what looks less of a wart! -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx