[Intel-gfx] [PATCH] drm/i915/gt: Be defensive in the face of false CS events
Ruhl, Michael J
michael.j.ruhl at intel.com
Fri Jul 10 17:23:16 UTC 2020
>-----Original Message-----
>From: Intel-gfx <intel-gfx-bounces at lists.freedesktop.org> On Behalf Of Chris
>Wilson
>Sent: Friday, July 10, 2020 8:16 AM
>To: intel-gfx at lists.freedesktop.org
>Cc: Chris Wilson <chris at chris-wilson.co.uk>
>Subject: [Intel-gfx] [PATCH] drm/i915/gt: Be defensive in the face of false CS
>events
>
>If the HW throws a curve ball and reports either en event before it is
^^
s/en/an/
?
m
>possible, or just a completely impossible event, we have to grin and
>bear it. The first few events, we will likely not notice as we would be
>expecting some event, but as soon as we stop expecting an event and yet
>they still keep coming, then we enter into undefined state territory.
>In which case, bail out, stop processing the events, and reset the
>engine and our set of queued requests to recover.
>
>The sporadic hangs and warnings will continue to plague CI, but at least
>system stability should not be compromised.
>
>Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/2045
>Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
>Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>---
> drivers/gpu/drm/i915/gt/intel_lrc.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c
>b/drivers/gpu/drm/i915/gt/intel_lrc.c
>index fbcfeaed6441..c86324d2d2bb 100644
>--- a/drivers/gpu/drm/i915/gt/intel_lrc.c
>+++ b/drivers/gpu/drm/i915/gt/intel_lrc.c
>@@ -2567,6 +2567,7 @@ static void process_csb(struct intel_engine_cs
>*engine)
> tail = READ_ONCE(*execlists->csb_write);
> if (unlikely(head == tail))
> return;
>+ execlists->csb_head = tail;
>
> /*
> * Hopefully paired with a wmb() in HW!
>@@ -2613,6 +2614,9 @@ static void process_csb(struct intel_engine_cs
>*engine)
> if (promote) {
> struct i915_request * const *old = execlists->active;
>
>+ if (GEM_WARN_ON(!*execlists->pending))
>+ break;
>+
> ring_set_paused(engine, 0);
>
> /* Point active to the new ELSP; prevent overwriting
>*/
>@@ -2635,7 +2639,8 @@ static void process_csb(struct intel_engine_cs
>*engine)
>
> WRITE_ONCE(execlists->pending[0], NULL);
> } else {
>- GEM_BUG_ON(!*execlists->active);
>+ if (GEM_WARN_ON(!*execlists->active))
>+ break;
>
> /* port0 completed, advanced to port1 */
> trace_ports(execlists, "completed", execlists->active);
>@@ -2686,7 +2691,6 @@ static void process_csb(struct intel_engine_cs
>*engine)
> }
> } while (head != tail);
>
>- execlists->csb_head = head;
> set_timeslice(engine);
>
> /*
>--
>2.20.1
>
>_______________________________________________
>Intel-gfx mailing list
>Intel-gfx at lists.freedesktop.org
>https://lists.freedesktop.org/mailman/listinfo/intel-gfx
More information about the Intel-gfx
mailing list