Skip to content

Commit

Permalink
drm/i915/gt: Report the currently active execlists request
Browse files Browse the repository at this point in the history
Since commit 22b7a42 ("drm/i915/execlists: Preempt-to-busy"), we
prune the engine->active.requests list prior to preemption, thus
removing the trace of the currently executing request. If that request
hangs rather than be preempted, we conclude that no active request was
on the GPU. Fortunately, this only impacts our debugging, and not our
means of hang detection or recovery.

v2: Use from to check the current iterator before continuing, and report
active as NULL if the current request is already completed.

References: 22b7a42 ("drm/i915/execlists: Preempt-to-busy")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200117113259.3023890-1-chris@chris-wilson.co.uk
  • Loading branch information
Chris Wilson committed Jan 17, 2020
1 parent 89c0249 commit 9452302
Showing 1 changed file with 17 additions and 0 deletions.
17 changes: 17 additions & 0 deletions drivers/gpu/drm/i915/gt/intel_engine_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -1657,6 +1657,23 @@ intel_engine_find_active_request(struct intel_engine_cs *engine)
* we only care about the snapshot of this moment.
*/
lockdep_assert_held(&engine->active.lock);

rcu_read_lock();
request = execlists_active(&engine->execlists);
if (request) {
struct intel_timeline *tl = request->context->timeline;

list_for_each_entry_from_reverse(request, &tl->requests, link) {
if (i915_request_completed(request))
break;

active = request;
}
}
rcu_read_unlock();
if (active)
return active;

list_for_each_entry(request, &engine->active.requests, sched.link) {
if (i915_request_completed(request))
continue;
Expand Down

0 comments on commit 9452302

Please sign in to comment.