Commit c5ce3b8d authored by Chris Wilson's avatar Chris Wilson

drm/i915/execlists: Don't trigger preemption if complete

Due to the latency of the tasklet running from ksoftirqd, by the time we
process the execlist dequeue may be a long time behind the GPU. If the
request was completed when we ran reschedule, we will not have tweaked
its priority, but if it is still listed as being in-flight for dequeue
we will use it as a reference for the rest of the queue, including
requests from its own context which will now be at higher priority. This
can cause us to issue a preempt-to-idle request, even though the request
we want to preempt is already complete.
Reported-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180501122131.19435-1-chris@chris-wilson.co.ukReviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
parent 36cf89f5
...@@ -185,7 +185,8 @@ static inline bool need_preempt(const struct intel_engine_cs *engine, ...@@ -185,7 +185,8 @@ static inline bool need_preempt(const struct intel_engine_cs *engine,
int prio) int prio)
{ {
return (intel_engine_has_preemption(engine) && return (intel_engine_has_preemption(engine) &&
__execlists_need_preempt(prio, rq_prio(last))); __execlists_need_preempt(prio, rq_prio(last)) &&
!i915_request_completed(last));
} }
/** /**
......
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