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:
parent
70a76a9b8e
commit
f1042cc853
|
@ -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:
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue