Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> writes: > In the unlikely case (thank you CI!), we may find ourselves wanting to > issue a preemption but having no runnable requests left. In this case, > we set the semaphore before computing the preemption and so must unset > it before forgetting (or else we leave the machine busywaiting until the > next request comes along and so likely hang). > > v2: Replace readback with only a wmb after asserting the semaphore > > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Cc: Mika Kuoppala <mika.kuoppala@xxxxxxxxxxxxxxx> Reviewed-by: Mika Kuoppala <mika.kuoppala@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/gt/intel_lrc.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c > index 8017efb36f7b..a392186ca40b 100644 > --- a/drivers/gpu/drm/i915/gt/intel_lrc.c > +++ b/drivers/gpu/drm/i915/gt/intel_lrc.c > @@ -240,7 +240,8 @@ ring_set_paused(const struct intel_engine_cs *engine, int state) > * until the dword is false. > */ > engine->status_page.addr[I915_GEM_HWS_PREEMPT] = state; > - wmb(); > + if (state) > + wmb(); > } > > static inline struct i915_priolist *to_priolist(struct rb_node *rb) > @@ -1249,6 +1250,8 @@ static void execlists_dequeue(struct intel_engine_cs *engine) > *port = execlists_schedule_in(last, port - execlists->pending); > memset(port + 1, 0, (last_port - port) * sizeof(*port)); > execlists_submit_ports(engine); > + } else { > + ring_set_paused(engine, 0); > } > } > > -- > 2.20.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx