mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-27 06:42:31 +07:00
5ba32c7be8
If we rewind the RING_TAIL on a context, due to a preemption event, we must force the context restore for the RING_TAIL update to be properly handled. Rather than note which preemption events may cause us to rewind the tail, compare the new request's tail with the previously submitted RING_TAIL, as it turns out that timeslicing was causing unexpected rewinds. <idle>-0 0d.s2 1280851190us : __execlists_submission_tasklet: 0000:00:02.0 rcs0: expired last=130:4698, prio=3, hint=3 <idle>-0 0d.s2 1280851192us : __i915_request_unsubmit: 0000:00:02.0 rcs0: fence 66:119966, current 119964 <idle>-0 0d.s2 1280851195us : __i915_request_unsubmit: 0000:00:02.0 rcs0: fence 130:4698, current 4695 <idle>-0 0d.s2 1280851198us : __i915_request_unsubmit: 0000:00:02.0 rcs0: fence 130:4696, current 4695 ^---- Note we unwind 2 requests from the same context <idle>-0 0d.s2 1280851208us : __i915_request_submit: 0000:00:02.0 rcs0: fence 130:4696, current 4695 <idle>-0 0d.s2 1280851213us : __i915_request_submit: 0000:00:02.0 rcs0: fence 134:1508, current 1506 ^---- But to apply the new timeslice, we have to replay the first request before the new client can start -- the unexpected RING_TAIL rewind <idle>-0 0d.s2 1280851219us : trace_ports: 0000:00:02.0 rcs0: submit { 130:4696*, 134:1508 } synmark2-5425 2..s. 1280851239us : process_csb: 0000:00:02.0 rcs0: cs-irq head=5, tail=0 synmark2-5425 2..s. 1280851240us : process_csb: 0000:00:02.0 rcs0: csb[0]: status=0x00008002:0x00000000 ^---- Preemption event for the ELSP update; note the lite-restore synmark2-5425 2..s. 1280851243us : trace_ports: 0000:00:02.0 rcs0: preempted { 130:4698, 66:119966 } synmark2-5425 2..s. 1280851246us : trace_ports: 0000:00:02.0 rcs0: promote { 130:4696*, 134:1508 } synmark2-5425 2.... 1280851462us : __i915_request_commit: 0000:00:02.0 rcs0: fence 130:4700, current 4695 synmark2-5425 2.... 1280852111us : __i915_request_commit: 0000:00:02.0 rcs0: fence 130:4702, current 4695 synmark2-5425 2.Ns1 1280852296us : process_csb: 0000:00:02.0 rcs0: cs-irq head=0, tail=2 synmark2-5425 2.Ns1 1280852297us : process_csb: 0000:00:02.0 rcs0: csb[1]: status=0x00000814:0x00000000 synmark2-5425 2.Ns1 1280852299us : trace_ports: 0000:00:02.0 rcs0: completed { 130:4696!, 134:1508 } synmark2-5425 2.Ns1 1280852301us : process_csb: 0000:00:02.0 rcs0: csb[2]: status=0x00000818:0x00000040 synmark2-5425 2.Ns1 1280852302us : trace_ports: 0000:00:02.0 rcs0: completed { 134:1508, 0:0 } synmark2-5425 2.Ns1 1280852313us : process_csb: process_csb:2336 GEM_BUG_ON(!i915_request_completed(*execlists->active) && !reset_in_progress(execlists)) Fixes: |
||
---|---|---|
.. | ||
selftests | ||
uc | ||
debugfs_engines.c | ||
debugfs_engines.h | ||
debugfs_gt_pm.c | ||
debugfs_gt_pm.h | ||
debugfs_gt.c | ||
debugfs_gt.h | ||
gen6_ppgtt.c | ||
gen6_ppgtt.h | ||
gen6_renderstate.c | ||
gen7_renderstate.c | ||
gen8_ppgtt.c | ||
gen8_ppgtt.h | ||
gen8_renderstate.c | ||
gen9_renderstate.c | ||
intel_breadcrumbs.c | ||
intel_context_sseu.c | ||
intel_context_types.h | ||
intel_context.c | ||
intel_context.h | ||
intel_engine_cs.c | ||
intel_engine_heartbeat.c | ||
intel_engine_heartbeat.h | ||
intel_engine_pm.c | ||
intel_engine_pm.h | ||
intel_engine_pool_types.h | ||
intel_engine_pool.c | ||
intel_engine_pool.h | ||
intel_engine_types.h | ||
intel_engine_user.c | ||
intel_engine_user.h | ||
intel_engine.h | ||
intel_ggtt.c | ||
intel_gpu_commands.h | ||
intel_gt_irq.c | ||
intel_gt_irq.h | ||
intel_gt_pm_irq.c | ||
intel_gt_pm_irq.h | ||
intel_gt_pm.c | ||
intel_gt_pm.h | ||
intel_gt_requests.c | ||
intel_gt_requests.h | ||
intel_gt_types.h | ||
intel_gt.c | ||
intel_gt.h | ||
intel_gtt.c | ||
intel_gtt.h | ||
intel_llc_types.h | ||
intel_llc.c | ||
intel_llc.h | ||
intel_lrc_reg.h | ||
intel_lrc.c | ||
intel_lrc.h | ||
intel_mocs.c | ||
intel_mocs.h | ||
intel_ppgtt.c | ||
intel_rc6_types.h | ||
intel_rc6.c | ||
intel_rc6.h | ||
intel_renderstate.c | ||
intel_renderstate.h | ||
intel_reset_types.h | ||
intel_reset.c | ||
intel_reset.h | ||
intel_ring_submission.c | ||
intel_ring_types.h | ||
intel_ring.c | ||
intel_ring.h | ||
intel_rps_types.h | ||
intel_rps.c | ||
intel_rps.h | ||
intel_sseu.c | ||
intel_sseu.h | ||
intel_timeline_types.h | ||
intel_timeline.c | ||
intel_timeline.h | ||
intel_workarounds_types.h | ||
intel_workarounds.c | ||
intel_workarounds.h | ||
mock_engine.c | ||
mock_engine.h | ||
selftest_context.c | ||
selftest_engine_cs.c | ||
selftest_engine_heartbeat.c | ||
selftest_engine_pm.c | ||
selftest_engine.c | ||
selftest_engine.h | ||
selftest_gt_pm.c | ||
selftest_hangcheck.c | ||
selftest_llc.c | ||
selftest_llc.h | ||
selftest_lrc.c | ||
selftest_mocs.c | ||
selftest_rc6.c | ||
selftest_rc6.h | ||
selftest_reset.c | ||
selftest_timeline.c | ||
selftest_workarounds.c |