Commit 8b390c15 authored by Chris Wilson's avatar Chris Wilson

drm/i915/execlists: Clear semaphore immediately upon ELSP promotion

There is no significance to our delay before clearing the semaphore the
engine is waiting on, so release it as soon as we acknowledge the CS
update following our preemption request. This should allow the GPU to
resume work earlier, if it was stuck on the semaphore at the end of a
request.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191015093204.25693-1-chris@chris-wilson.co.uk
parent 454a325a
...@@ -1910,6 +1910,9 @@ static void process_csb(struct intel_engine_cs *engine) ...@@ -1910,6 +1910,9 @@ static void process_csb(struct intel_engine_cs *engine)
else else
promote = gen8_csb_parse(execlists, buf + 2 * head); promote = gen8_csb_parse(execlists, buf + 2 * head);
if (promote) { if (promote) {
if (!inject_preempt_hang(execlists))
ring_set_paused(engine, 0);
/* cancel old inflight, prepare for switch */ /* cancel old inflight, prepare for switch */
trace_ports(execlists, "preempted", execlists->active); trace_ports(execlists, "preempted", execlists->active);
while (*execlists->active) while (*execlists->active)
...@@ -1926,9 +1929,6 @@ static void process_csb(struct intel_engine_cs *engine) ...@@ -1926,9 +1929,6 @@ static void process_csb(struct intel_engine_cs *engine)
if (enable_timeslice(execlists)) if (enable_timeslice(execlists))
mod_timer(&execlists->timer, jiffies + 1); mod_timer(&execlists->timer, jiffies + 1);
if (!inject_preempt_hang(execlists))
ring_set_paused(engine, 0);
WRITE_ONCE(execlists->pending[0], NULL); WRITE_ONCE(execlists->pending[0], NULL);
} else { } else {
GEM_BUG_ON(!*execlists->active); GEM_BUG_ON(!*execlists->active);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment