Commit 87b723a1 authored by Chris Wilson's avatar Chris Wilson

drm/i915: Don't check for idleness before retiring after a GPU hang

When we force the cleanup after a GPU hang, we want to retire all
requests, or else we may leak them if truly wedged (and the GPU never
advances again). Converting to the active request helpers had the issue
of doing the check against busyness before reporting the request, so if
we claim the GPU had hung but this engine hadn't we could potential skip
the request cleanup - triggering the self-check BUG.

Fixes: dcff85c8 ("drm/i915: Enable i915_gem_wait_for_idle() ...")
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1470728222-10243-3-git-send-email-chris@chris-wilson.co.uk
parent 385384a8
...@@ -2423,15 +2423,11 @@ static void i915_gem_reset_engine_cleanup(struct intel_engine_cs *engine) ...@@ -2423,15 +2423,11 @@ static void i915_gem_reset_engine_cleanup(struct intel_engine_cs *engine)
struct drm_i915_gem_request *request; struct drm_i915_gem_request *request;
struct intel_ring *ring; struct intel_ring *ring;
request = i915_gem_active_peek(&engine->last_request,
&engine->i915->drm.struct_mutex);
/* Mark all pending requests as complete so that any concurrent /* Mark all pending requests as complete so that any concurrent
* (lockless) lookup doesn't try and wait upon the request as we * (lockless) lookup doesn't try and wait upon the request as we
* reset it. * reset it.
*/ */
if (request) intel_engine_init_seqno(engine, engine->last_submitted_seqno);
intel_engine_init_seqno(engine, request->fence.seqno);
/* /*
* Clear the execlists queue up before freeing the requests, as those * Clear the execlists queue up before freeing the requests, as those
...@@ -2453,6 +2449,8 @@ static void i915_gem_reset_engine_cleanup(struct intel_engine_cs *engine) ...@@ -2453,6 +2449,8 @@ static void i915_gem_reset_engine_cleanup(struct intel_engine_cs *engine)
* implicit references on things like e.g. ppgtt address spaces through * implicit references on things like e.g. ppgtt address spaces through
* the request. * the request.
*/ */
request = i915_gem_active_raw(&engine->last_request,
&engine->i915->drm.struct_mutex);
if (request) if (request)
i915_gem_request_retire_upto(request); i915_gem_request_retire_upto(request);
GEM_BUG_ON(intel_engine_is_active(engine)); GEM_BUG_ON(intel_engine_is_active(engine));
......
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