mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-01 03:44:27 -04:00
drm/i915/execlists: Ignore discrepancies in pending[] across resets
When we reset the engine, we first remove the guilty request from the
active list. If it so happens that there is a pending preemption event
to process before we handle the reset, when we inspect that event we
find ourselves a little confused as we have bent the rules slightly to
perform the reset.
Just ignore any discrepancies inside reset, we know we'll start again
from scratch afterwards.
<0>[ 536.940213] <idle>-0 6..s1 537441383us : execlists_reset: 0000:00:02.0 vcs0: reset for CS error
<0>[ 536.940213] i915_sel-7302 2d..1 537441386us : trace_ports: 0000:00:02.0 vcs0: submit { 10c59:2*, 10c5a:2 }
<0>[ 536.940213] <idle>-0 6d.s2 537471320us : __i915_request_unsubmit: 0000:00:02.0 vcs0: fence 10c59:2, current 1
<0>[ 536.940213] <idle>-0 6d.s2 537471321us : execlists_hold: 0000:00:02.0 vcs0: fence 10c59:2, current 1 on hold
<0>[ 536.940213] <idle>-0 6.Ns1 537471328us : intel_engine_reset: 0000:00:02.0 vcs0: flags=10
<0>[ 536.940213] <idle>-0 6.Ns1 537471421us : execlists_reset_prepare: 0000:00:02.0 vcs0: depth<-1
<0>[ 536.940213] <idle>-0 6.Ns1 537471422us : intel_engine_stop_cs: 0000:00:02.0 vcs0:
<0>[ 536.940213] <idle>-0 6.Ns1 537472424us : intel_engine_stop_cs: 0000:00:02.0 vcs0: timed out on STOP_RING -> IDLE
<0>[ 536.940213] <idle>-0 6.Ns1 537472429us : __intel_gt_reset: 0000:00:02.0 engine_mask=4
<0>[ 536.940213] <idle>-0 6.Ns1 537472442us : execlists_reset_rewind: 0000:00:02.0 vcs0:
<0>[ 536.940213] <idle>-0 6dNs2 537472443us : process_csb: 0000:00:02.0 vcs0: cs-irq head=4, tail=5
<0>[ 536.940213] <idle>-0 6dNs2 537472444us : process_csb: 0000:00:02.0 vcs0: csb[5]: status=0x00008002:0x20000060
<0>[ 536.940213] <idle>-0 6dNs2 537472464us : trace_ports: 0000:00:02.0 vcs0: preempted { 10c59:2*, 0:0 }
<0>[ 536.940213] <idle>-0 6dNs2 537472465us : trace_ports: 0000:00:02.0 vcs0: promote { 10c59:2*, 10c5a:2 }
<0>[ 536.940213] <idle>-0 6dNs2 537472706us : assert_pending_valid: assert_pending_valid:1417 GEM_BUG_ON(!i915_request_is_active(rq))
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200129165935.1266132-1-chris@chris-wilson.co.uk
This commit is contained in:
@@ -1389,6 +1389,12 @@ trace_ports(const struct intel_engine_execlists *execlists,
|
||||
ports[1] ? ports[1]->fence.seqno : 0);
|
||||
}
|
||||
|
||||
static inline bool
|
||||
reset_in_progress(const struct intel_engine_execlists *execlists)
|
||||
{
|
||||
return unlikely(!__tasklet_is_enabled(&execlists->tasklet));
|
||||
}
|
||||
|
||||
static __maybe_unused bool
|
||||
assert_pending_valid(const struct intel_engine_execlists *execlists,
|
||||
const char *msg)
|
||||
@@ -1398,6 +1404,10 @@ assert_pending_valid(const struct intel_engine_execlists *execlists,
|
||||
|
||||
trace_ports(execlists, msg, execlists->pending);
|
||||
|
||||
/* We may be messing around with the lists during reset, lalala */
|
||||
if (reset_in_progress(execlists))
|
||||
return true;
|
||||
|
||||
if (!execlists->pending[0]) {
|
||||
GEM_TRACE_ERR("Nothing pending for promotion!\n");
|
||||
return false;
|
||||
@@ -2142,12 +2152,6 @@ invalidate_csb_entries(const u32 *first, const u32 *last)
|
||||
clflush((void *)last);
|
||||
}
|
||||
|
||||
static inline bool
|
||||
reset_in_progress(const struct intel_engine_execlists *execlists)
|
||||
{
|
||||
return unlikely(!__tasklet_is_enabled(&execlists->tasklet));
|
||||
}
|
||||
|
||||
/*
|
||||
* Starting with Gen12, the status has a new format:
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user