public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
* [Intel-gfx] [PATCH] drm/i915/execlists: Reclaim hanging virtual request
@ 2020-01-21 10:09 Chris Wilson
  2020-01-21 11:04 ` [Intel-gfx] ✓ Fi.CI.BAT: success for " Patchwork
                   ` (7 more replies)
  0 siblings, 8 replies; 18+ messages in thread
From: Chris Wilson @ 2020-01-21 10:09 UTC (permalink / raw)
  To: intel-gfx

If we encounter a hang on a virtual engine, as we process the hang the
request may already have been moved back to the virtual engine (we are
processing the hang on the physical engine). We need to reclaim the
request from the virtual engine so that the locking is consistent and
local to the real engine on which we will hold the request for error
state capturing.

Fixes: 748317386afb ("drm/i915/execlists: Offline error capture")
Testcase: igt/gem_exec_balancer/hang
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
---
 drivers/gpu/drm/i915/gt/intel_lrc.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c
index 3a30767ff0c4..a0acf1898c1e 100644
--- a/drivers/gpu/drm/i915/gt/intel_lrc.c
+++ b/drivers/gpu/drm/i915/gt/intel_lrc.c
@@ -2582,6 +2582,26 @@ static void execlists_capture(struct intel_engine_cs *engine)
 	cap->rq = active_request(cap->rq->context->timeline, cap->rq);
 	GEM_BUG_ON(!cap->rq);
 
+	if (cap->rq->engine != engine) { /* preempted virtual engine */
+		struct virtual_engine *ve = to_virtual_engine(cap->rq->engine);
+		unsigned long flags;
+
+		/*
+		 * An unsubmitted request along a virtual engine will
+		 * remain on the active (this) engine until we are able
+		 * to process the context switch away (and so mark the
+		 * context as no longer in flight). That cannot have happened
+		 * yet, otherwise we would not be hanging!
+		 */
+		spin_lock_irqsave(&ve->base.active.lock, flags);
+		GEM_BUG_ON(intel_context_inflight(cap->rq->context) != engine);
+		GEM_BUG_ON(ve->request != cap->rq);
+		ve->request = NULL;
+		spin_unlock_irqrestore(&ve->base.active.lock, flags);
+
+		cap->rq->engine = engine;
+	}
+
 	/*
 	 * Remove the request from the execlists queue, and take ownership
 	 * of the request. We pass it to our worker who will _slowly_ compress
-- 
2.25.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2020-01-23 17:54 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-01-21 10:09 [Intel-gfx] [PATCH] drm/i915/execlists: Reclaim hanging virtual request Chris Wilson
2020-01-21 11:04 ` [Intel-gfx] ✓ Fi.CI.BAT: success for " Patchwork
2020-01-21 11:20 ` [Intel-gfx] [PATCH] " Tvrtko Ursulin
2020-01-21 11:33   ` Chris Wilson
2020-01-21 11:44     ` Chris Wilson
2020-01-21 11:50 ` [Intel-gfx] [PATCH] drm/i915/execlists: Reclaim the " Chris Wilson
2020-01-21 13:04 ` [Intel-gfx] [PATCH v3] " Chris Wilson
2020-01-21 13:55   ` Tvrtko Ursulin
2020-01-21 14:07     ` Chris Wilson
2020-01-21 17:19       ` Tvrtko Ursulin
2020-01-21 17:32         ` Chris Wilson
2020-01-21 17:43           ` Tvrtko Ursulin
2020-01-21 17:57             ` Chris Wilson
2020-01-22 13:32               ` Tvrtko Ursulin
2020-01-21 13:48 ` [Intel-gfx] [PATCH v4] " Chris Wilson
2020-01-21 15:06 ` [Intel-gfx] ✓ Fi.CI.BAT: success for drm/i915/execlists: Reclaim hanging virtual request (rev4) Patchwork
2020-01-22 16:57 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2020-01-23 17:54 ` [Intel-gfx] ✓ Fi.CI.IGT: success " Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox