linux/drivers/gpu/drm/i915/gt
Umesh Nerlige Ramappa 7d73c60215 drm/i915/pmu: Fix KMD and GuC race on accessing busyness
GuC updates shared memory and KMD reads it. Since this is not
synchronized, we run into a race where the value read is inconsistent.
Sometimes the inconsistency is in reading the upper MSB bytes of the
last_switch_in value. 2 types of cases are seen - upper 8 bits are zero
and upper 24 bits are zero. Since these are non-zero values, it is
not trivial to determine validity of these values. Instead we read the
values multiple times until they are consistent. In test runs, 3
attempts results in consistent values. The upper bound is set to 6
attempts and may need to be tuned as per any new occurences.

Since the duration that gt is parked can vary, the patch also updates
the gt timestamp on unpark before starting the worker.

v2:
- Initialize i
- Use READ_ONCE to access engine record

Fixes: 77cdd054dd ("drm/i915/pmu: Connect engine busyness stats from GuC to pmu")
Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Reviewed-by: Alan Previn <alan.previn.teres.alexis@intel.com>
Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220125020124.788679-2-umesh.nerlige.ramappa@intel.com
(cherry picked from commit 512712a824)
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
2022-02-01 08:59:25 +00:00
..
selftests
shaders
uc drm/i915/pmu: Fix KMD and GuC race on accessing busyness 2022-02-01 08:59:25 +00:00
gen2_engine_cs.c drm/i915/gt: replace IS_GEN and friends with GRAPHICS_VER 2021-06-05 15:09:06 -07:00
gen2_engine_cs.h
gen6_engine_cs.c drm/i915: Do not share hwsp across contexts any more, v8. 2021-03-24 11:38:56 +01:00
gen6_engine_cs.h
gen6_ppgtt.c drm/i915: Remove pages_mutex and intel_gtt->vma_ops.set/clear_pages members, v3. 2021-12-20 16:31:02 +01:00
gen6_ppgtt.h drm/i915: Create a dummy object for gen6 ppgtt 2021-11-19 17:38:03 +00:00
gen6_renderstate.c drm/i915/gt: SPDX cleanup 2021-03-24 19:30:34 +01:00
gen7_renderclear.c drm/i915/gt: Disable HiZ Raw Stall Optimization on broken gen7 2021-05-18 08:56:53 -04:00
gen7_renderclear.h
gen7_renderstate.c drm/i915/gt: SPDX cleanup 2021-03-24 19:30:34 +01:00
gen8_engine_cs.c drm/i915: Rename GT_STEP to GRAPHICS_STEP 2021-11-02 13:05:40 -07:00
gen8_engine_cs.h drm/i915/gt: Move gen8 CS emitters into gen8_engine_cs.h 2020-12-16 15:55:43 +00:00
gen8_ppgtt.c drm/i915/gtt/xehpsdv: move scratch page to system memory 2021-12-09 22:09:29 +05:30
gen8_ppgtt.h drm/i915: Reduce the number of objects subject to memcpy recover 2021-09-24 08:19:16 +02:00
gen8_renderstate.c drm/i915/gt: SPDX cleanup 2021-03-24 19:30:34 +01:00
gen9_renderstate.c drm/i915/gt: SPDX cleanup 2021-03-24 19:30:34 +01:00
hsw_clear_kernel.c
intel_breadcrumbs_types.h drm/i915/guc: Direct all breadcrumbs for a class to single breadcrumbs 2021-07-27 17:31:35 -07:00
intel_breadcrumbs.c drm/i915/guc: Implement GuC priority management 2021-07-27 17:32:27 -07:00
intel_breadcrumbs.h drm/i915/guc: Direct all breadcrumbs for a class to single breadcrumbs 2021-07-27 17:31:35 -07:00
intel_context_param.h drm/i915/gem: Set the watchdog timeout directly in intel_context_set_gem (v2) 2021-07-08 19:43:49 +02:00
intel_context_sseu.c drm/i915/gt: replace IS_GEN and friends with GRAPHICS_VER 2021-06-05 15:09:06 -07:00
intel_context_types.h drm/i915: Don't disable interrupts and pretend a lock as been acquired in __timeline_mark_lock(). 2021-12-13 09:25:58 +00:00
intel_context.c drm/i915: Drop stealing of bits from i915_sw_fence function pointer 2021-11-30 17:52:15 -08:00
intel_context.h drm/i915: Don't disable interrupts and pretend a lock as been acquired in __timeline_mark_lock(). 2021-12-13 09:25:58 +00:00
intel_engine_cs.c drm/i915/gt: Use hw_engine_masks as reset_domains 2021-12-08 18:27:05 -05:00
intel_engine_heartbeat.c drm/i915: remove IS_ACTIVE 2021-10-07 11:04:05 -07:00
intel_engine_heartbeat.h drm/i915: Reset GPU immediately if submission is disabled 2021-07-27 17:31:45 -07:00
intel_engine_pm.c drm/i915: Add ww ctx to i915_gem_object_trylock 2021-12-21 13:27:29 +01:00
intel_engine_pm.h drm/i915/guc: Take engine PM when a context is pinned with GuC submission 2021-10-15 10:37:26 -07:00
intel_engine_stats.h drm/i915/pmu: Add a name to the execlists stats 2021-10-28 11:02:18 -07:00
intel_engine_types.h drm/i915/gt: Use hw_engine_masks as reset_domains 2021-12-08 18:27:05 -05:00
intel_engine_user.c drm/i915/gt: Use to_gt() helper 2021-12-17 21:50:06 -08:00
intel_engine_user.h drm/i915/gt: SPDX cleanup 2021-03-24 19:30:34 +01:00
intel_engine.h drm/i915/guc: Connect UAPI to GuC multi-lrc interface 2021-10-15 10:45:50 -07:00
intel_execlists_submission.c drm/i915: Use __GFP_KSWAPD_RECLAIM in the capture code 2021-11-26 08:26:10 +01:00
intel_execlists_submission.h drm/i915/guc: GuC virtual engines 2021-07-27 17:31:28 -07:00
intel_ggtt_fencing.c drm/i915/gt: Fix -EDEADLK handling regression 2021-07-13 15:56:21 -04:00
intel_ggtt_fencing.h drm/i915/gt: SPDX cleanup 2021-03-24 19:30:34 +01:00
intel_ggtt.c Merge tag 'drm-intel-gt-next-2021-12-23' of git://anongit.freedesktop.org/drm/drm-intel into drm-next 2021-12-24 06:14:51 +10:00
intel_gpu_commands.h drm/i915/pxp: Implement arb session teardown 2021-10-04 13:10:50 -04:00
intel_gt_buffer_pool_types.h Merge tag 'drm-intel-gt-next-2021-04-06' of git://anongit.freedesktop.org/drm/drm-intel into drm-next 2021-04-08 12:46:12 +10:00
intel_gt_buffer_pool.c drm/i915: Introduce to_gt() helper 2021-12-17 21:47:36 -08:00
intel_gt_buffer_pool.h drm/i915: Defer pin calls in buffer pool until first use by caller. 2021-03-24 17:27:20 +01:00
intel_gt_clock_utils.c drm/i915/gt: remove GRAPHICS_VER == 10 2021-07-29 10:06:10 -07:00
intel_gt_clock_utils.h drm/i915/gt: Consolidate the CS timestamp clocks 2020-12-23 21:10:41 +00:00
intel_gt_debugfs.c drm/i915/gt: move remaining debugfs interfaces into gt 2021-10-14 21:47:49 -07:00
intel_gt_debugfs.h drm/i915/guc: Speed up GuC log dumps 2021-12-20 15:33:16 -08:00
intel_gt_engines_debugfs.c drm/i915: rename debugfs_engines files 2021-09-18 23:33:22 -07:00
intel_gt_engines_debugfs.h drm/i915: rename debugfs_engines files 2021-09-18 23:33:22 -07:00
intel_gt_irq.c drm/i915/pxp: Implement PXP irq handler 2021-10-04 13:10:55 -04:00
intel_gt_irq.h drm/i915/gt: Move CS interrupt handler to the backend 2021-05-25 15:14:40 +02:00
intel_gt_pm_debugfs.c Merge tag 'drm-intel-gt-next-2021-10-21' of git://anongit.freedesktop.org/drm/drm-intel into drm-next 2021-10-22 06:30:34 +10:00
intel_gt_pm_debugfs.h drm/i915/gt: move remaining debugfs interfaces into gt 2021-10-14 21:47:49 -07:00
intel_gt_pm_irq.c drm/i915/gt: replace IS_GEN and friends with GRAPHICS_VER 2021-06-05 15:09:06 -07:00
intel_gt_pm_irq.h drm/i915/gt: SPDX cleanup 2021-03-24 19:30:34 +01:00
intel_gt_pm.c drm/i915/gt: Hold RPM wakelock during PXP suspend 2021-11-24 09:07:18 -05:00
intel_gt_pm.h drm/i915/guc: Take engine PM when a context is pinned with GuC submission 2021-10-15 10:37:26 -07:00
intel_gt_requests.c drm/i915/guc: Update intel_gt_wait_for_idle to work with GuC 2021-07-22 10:07:23 -07:00
intel_gt_requests.h drm/i915: use linux/stddef.h due to "isystem: trim/fixup stdarg.h and other headers" 2021-09-06 09:31:23 +02:00
intel_gt_types.h drm/i915: Flush TLBs before releasing backing store 2022-01-25 20:06:06 +02:00
intel_gt.c drm/i915: Flush TLBs before releasing backing store 2022-01-25 20:06:06 +02:00
intel_gt.h drm/i915: Flush TLBs before releasing backing store 2022-01-25 20:06:06 +02:00
intel_gtt.c Merge tag 'drm-intel-gt-next-2021-12-23' of git://anongit.freedesktop.org/drm/drm-intel into drm-next 2021-12-24 06:14:51 +10:00
intel_gtt.h Merge tag 'drm-intel-gt-next-2021-12-23' of git://anongit.freedesktop.org/drm/drm-intel into drm-next 2021-12-24 06:14:51 +10:00
intel_llc_types.h drm/i915/gt: SPDX cleanup 2021-03-24 19:30:34 +01:00
intel_llc.c Merge tag 'drm-intel-gt-next-2021-10-21' of git://anongit.freedesktop.org/drm/drm-intel into drm-next 2021-10-22 06:30:34 +10:00
intel_llc.h drm/i915/gt: SPDX cleanup 2021-03-24 19:30:34 +01:00
intel_lrc_reg.h drm/i915/guc: Implement GuC context operations for new inteface 2021-07-22 10:07:08 -07:00
intel_lrc.c drm/i915/dg2: Add Wa_16013000631 2021-12-02 21:38:38 -08:00
intel_lrc.h drm/i915/gt: Exercise lrc_wa_ctx initialisation failure 2021-01-09 16:02:57 +00:00
intel_migrate_types.h drm/i915/gt: Pipelined page migration 2021-06-17 14:23:05 +01:00
intel_migrate.c drm/i915: Avoid using the i915_fence_array when collecting dependencies 2021-12-22 08:14:30 +01:00
intel_migrate.h drm/i915: Avoid using the i915_fence_array when collecting dependencies 2021-12-22 08:14:30 +01:00
intel_mocs.c drm/i915: Rename GT_STEP to GRAPHICS_STEP 2021-11-02 13:05:40 -07:00
intel_mocs.h drm/i915/gt: Add "intel_" as prefix in set_mocs_index() 2021-09-20 08:23:27 -07:00
intel_ppgtt.c drm/i915: Remove pages_mutex and intel_gtt->vma_ops.set/clear_pages members, v3. 2021-12-20 16:31:02 +01:00
intel_rc6_types.h drm/i915/gt: SPDX cleanup 2021-03-24 19:30:34 +01:00
intel_rc6.c drm/i915/dg2: Add Wa_16011777198 2021-12-02 21:38:18 -08:00
intel_rc6.h drm/i915/gt: SPDX cleanup 2021-03-24 19:30:34 +01:00
intel_region_lmem.c drm/i915/xehpsdv: set min page-size to 64K 2021-12-09 22:09:28 +05:30
intel_region_lmem.h drm/i915: setup the LMEM region 2021-03-24 19:30:36 +01:00
intel_renderstate.c drm/i915/gt: replace IS_GEN and friends with GRAPHICS_VER 2021-06-05 15:09:06 -07:00
intel_renderstate.h drm/i915: Break out dma_resv ww locking utilities to separate files 2021-06-17 14:22:59 +01:00
intel_reset_types.h drm/i915/gt: Remove repeated words from comments 2021-03-24 19:30:35 +01:00
intel_reset.c Merge tag 'drm-intel-next-2021-12-14' of ssh://git.freedesktop.org/git/drm/drm-intel into drm-next 2021-12-17 15:23:49 +10:00
intel_reset.h drm/i915/gt: SPDX cleanup 2021-03-24 19:30:34 +01:00
intel_ring_submission.c drm/i915: vma is always backed by an object. 2021-11-19 17:38:03 +00:00
intel_ring_types.h drm/i915/gt: SPDX cleanup 2021-03-24 19:30:34 +01:00
intel_ring.c drm/i915: Don't back up pinned LMEM context images and rings during suspend 2021-09-24 08:19:15 +02:00
intel_ring.h drm/i915/gt: Pipelined page migration 2021-06-17 14:23:05 +01:00
intel_rps_types.h drm/i915/gt: SPDX cleanup 2021-03-24 19:30:34 +01:00
intel_rps.c drm/i915/guc: Request RP0 before loading firmware 2021-12-21 11:24:55 -08:00
intel_rps.h drm/i915/guc: Request RP0 before loading firmware 2021-12-21 11:24:55 -08:00
intel_sseu_debugfs.c drm/i915: rename debugfs_gt files 2021-09-18 23:33:19 -07:00
intel_sseu_debugfs.h
intel_sseu.c drm/i915/xehp: Check new fuse bits for SFC availability 2021-09-20 21:42:09 -07:00
intel_sseu.h drm/i915/xehpsdv: Add compute DSS type 2021-08-11 08:21:49 -07:00
intel_timeline_types.h Merge tag 'drm-intel-gt-next-2021-04-06' of git://anongit.freedesktop.org/drm/drm-intel into drm-next 2021-04-08 12:46:12 +10:00
intel_timeline.c drm/i915: Catch yet another unconditioal clflush 2021-10-18 12:45:19 +03:00
intel_timeline.h Merge tag 'drm-intel-gt-next-2021-04-06' of git://anongit.freedesktop.org/drm/drm-intel into drm-next 2021-04-08 12:46:12 +10:00
intel_workarounds_types.h drm/i915/guc: Provide mmio list to be saved/restored on engine reset 2021-07-27 17:31:55 -07:00
intel_workarounds.c drm/i915/gt: Use to_gt() helper 2021-12-17 21:50:06 -08:00
intel_workarounds.h drm/i915: Make wa list per-gt 2021-09-20 08:06:36 -07:00
ivb_clear_kernel.c
mock_engine.c drm/i915: Add ww ctx to i915_gem_object_trylock 2021-12-21 13:27:29 +01:00
mock_engine.h drm/i915/gt: SPDX cleanup 2021-03-24 19:30:34 +01:00
selftest_context.c drm/i915/gt: Use to_gt() helper 2021-12-17 21:50:06 -08:00
selftest_engine_cs.c drm/i915/gt: Use to_gt() helper 2021-12-17 21:50:06 -08:00
selftest_engine_heartbeat.c drm/i915/gt: Use to_gt() helper 2021-12-17 21:50:06 -08:00
selftest_engine_heartbeat.h drm/i915/selftest: Fix hangcheck self test for GuC submission 2021-07-27 17:32:23 -07:00
selftest_engine_pm.c drm/i915/pmu: Wait longer for busyness data to be available from GuC 2021-12-09 09:56:14 -08:00
selftest_engine.c drm/i915/gt: Use to_gt() helper 2021-12-17 21:50:06 -08:00
selftest_engine.h drm/i915/gt: SPDX cleanup 2021-03-24 19:30:34 +01:00
selftest_execlists.c drm/i915/gt: Use to_gt() helper 2021-12-17 21:50:06 -08:00
selftest_gt_pm.c Merge tag 'drm-intel-gt-next-2021-12-23' of git://anongit.freedesktop.org/drm/drm-intel into drm-next 2021-12-24 06:14:51 +10:00
selftest_hangcheck.c drm/i915/gt: Use to_gt() helper 2021-12-17 21:50:06 -08:00
selftest_llc.c drm/i915/gt: replace IS_GEN and friends with GRAPHICS_VER 2021-06-05 15:09:06 -07:00
selftest_llc.h drm/i915/gt: SPDX cleanup 2021-03-24 19:30:34 +01:00
selftest_lrc.c drm/i915/gt: Use to_gt() helper 2021-12-17 21:50:06 -08:00
selftest_migrate.c drm/i915: Add ww ctx to i915_gem_object_trylock 2021-12-21 13:27:29 +01:00
selftest_mocs.c drm/i915/gt: Use to_gt() helper 2021-12-17 21:50:06 -08:00
selftest_rc6.c drm/i915/gt: replace IS_GEN and friends with GRAPHICS_VER 2021-06-05 15:09:06 -07:00
selftest_rc6.h drm/i915/gt: SPDX cleanup 2021-03-24 19:30:34 +01:00
selftest_reset.c drm/i915/gt: Use to_gt() helper 2021-12-17 21:50:06 -08:00
selftest_ring_submission.c drm/i915/gt: Use to_gt() helper 2021-12-17 21:50:06 -08:00
selftest_ring.c
selftest_rps.c drm/i915/gt: replace IS_GEN and friends with GRAPHICS_VER 2021-06-05 15:09:06 -07:00
selftest_rps.h
selftest_slpc.c drm/i915/gt: Use to_gt() helper 2021-12-17 21:50:06 -08:00
selftest_timeline.c drm/i915/gt: Use to_gt() helper 2021-12-17 21:50:06 -08:00
selftest_workarounds.c drm/i915/gt: Use to_gt() helper 2021-12-17 21:50:06 -08:00
shmem_utils.c drm/i915/dg1: Fix mapping type for default state object 2021-04-27 16:19:52 +01:00
shmem_utils.h
st_shmem_utils.c
sysfs_engines.c
sysfs_engines.h