On Fri, Mar 17, 2017 at 11:27:22AM +0000, Chris Wilson wrote: > Do an early read of the execlists' queue before we take the spinlock and > start checking. This is safe as the first writer to the execlists queue > will cause the tasklet to be run again after a memory barrier. > > v2: Keep guc in sync with execlists queue changes > > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Cc: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxxxxxxxx> > Cc: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx> > Cc: Michał Winiarski <michal.winiarski@xxxxxxxxx> > Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxxxxxxxx> > Reviewed-by: Michał Winiarski <michal.winiarski@xxxxxxxxx> > --- > drivers/gpu/drm/i915/i915_guc_submission.c | 4 ++++ > drivers/gpu/drm/i915/intel_lrc.c | 4 ++++ > 2 files changed, 8 insertions(+) > > diff --git a/drivers/gpu/drm/i915/i915_guc_submission.c b/drivers/gpu/drm/i915/i915_guc_submission.c > index a3636b31ebc3..78718a8e70c3 100644 > --- a/drivers/gpu/drm/i915/i915_guc_submission.c > +++ b/drivers/gpu/drm/i915/i915_guc_submission.c > @@ -577,6 +577,10 @@ static bool i915_guc_dequeue(struct intel_engine_cs *engine) > struct rb_node *rb; > bool submit = false; > > + /* After execlist_first is updated, a new tasklet must be scheduled */ Hmm, I think this comment is litlle misleading when placed right to the "if" that do early return. Either extend it with the info from the commit message, or move down. -Michal > + if (!READ_ONCE(engine->execlist_first)) > + return false; > + > spin_lock_irqsave(&engine->timeline->lock, flags); > rb = engine->execlist_first; > while (rb) { > diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c > index becde55b02a3..7adc588d1a19 100644 > --- a/drivers/gpu/drm/i915/intel_lrc.c > +++ b/drivers/gpu/drm/i915/intel_lrc.c > @@ -403,6 +403,10 @@ static void execlists_dequeue(struct intel_engine_cs *engine) > struct rb_node *rb; > bool submit = false; > > + /* After execlist_first is updated, a new tasklet must be scheduled */ > + if (!READ_ONCE(engine->execlist_first)) > + return; > + > last = port->request; > if (last) > /* WaIdleLiteRestore:bdw,skl > -- > 2.11.0 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx