[PATCH v2 0/3] drm/xe: fix GuC TLB invalidation ack stalls on ARL (Wa_22016122933)
Tales A. Mendonça <[email protected]>
| Newsgroups | org.freedesktop.lists.intel-xe,org.freedesktop.lists.dri-devel |
|---|---|
| Message-ID | <[email protected]> |
Hi, v2 of the TLB invalidation ack stall series for ARL, tracked in: https://gitlab.freedesktop.org/drm/xe/kernel/-/work_items/8678 The investigation concluded since v1: the GuC always replied in time. The CPU was reading a stale cache line of the G2H CTB - the GT1 caching bug that i915 works around as Wa_22016122933 and xe never inherited. Thanks Daniele for spotting the GT1 pattern in the GuC logs and suggesting the test, and Matt for the review and the guidance to mirror the i915 workaround. Patch 3 is new and is the actual fix: Wa_22016122933 for xe, scoped like i915 (media GT on media version 13.00) and covering the GuC-shared allocations the CPU reads from. Validation of patch 3 on two ARL machines (7d51 and 7dd1): before, 20-60 ack stalls/day, every day, for weeks, on two GuC firmware versions; after, zero stalls across 6+ days combined and >5M TLB invalidations. The 7dd1 machine, which could not survive a day of media workloads on xe without a platform freeze, ran 34h+ continuously including video transcoding with zero incidents. Patches 1-2 are the diagnostics that made the investigation possible, updated per Matt's v1 review. v1 -> v2: - Dropped the "kick" workaround (RFC patch 3): obsolete now that the root cause is fixed by Wa_22016122933. - Patch 1: unified with the existing devcoredump path - __xe_devcoredump() taking a GT plus nullable q/job, with xe_devcoredump()/xe_devcoredump_gt() wrapper macros (Matt). - Patch 2: record the first timed out seqno instead of the last one, and use xe_warn() (Matt). - New patch 3: implement Wa_22016122933. Based on today's drm-tip. Thanks, Tales Tales A. Mendonça (3): drm/xe: Capture devcoredump on TLB invalidation timeout drm/xe: Log when a timed out TLB invalidation ack finally arrives drm/xe: Implement Wa_22016122933 drivers/gpu/drm/xe/xe_devcoredump.c | 46 ++++++++++++++----------- drivers/gpu/drm/xe/xe_devcoredump.h | 15 +++++--- drivers/gpu/drm/xe/xe_guc.c | 16 +++++++++ drivers/gpu/drm/xe/xe_guc.h | 2 ++ drivers/gpu/drm/xe/xe_guc_ads.c | 3 +- drivers/gpu/drm/xe/xe_guc_ct.c | 6 ++-- drivers/gpu/drm/xe/xe_guc_log.c | 7 ++-- drivers/gpu/drm/xe/xe_guc_pc.c | 3 +- drivers/gpu/drm/xe/xe_tlb_inval.c | 39 +++++++++++++++++++++ drivers/gpu/drm/xe/xe_tlb_inval_types.h | 17 +++++++++ drivers/gpu/drm/xe/xe_wa_oob.rules | 1 + 11 files changed, 124 insertions(+), 31 deletions(-) -- 2.55.0