On Thu, Oct 09, 2025 at 02:33:09PM +0000, Lin, Shuicheng wrote:
On Fri, Sep 12, 2025 3:32 PM Kenneth Graunke wrote:
The previous timeout of 500us seems to be too small; panning the map in the Roll20 VTT in Firefox on a KDE/Wayland desktop reliably triggered timeouts within a few seconds of usage, causing the monitor to freeze and the following to be printed to dmesg:
[Jul30 13:44] xe 0000:03:00.0: [drm] *ERROR* GT0: Global invalidation timeout [Jul30 13:48] xe 0000:03:00.0: [drm] *ERROR* [CRTC:82:pipe A] flip_done timed out
I haven't hit a single timeout since increasing it to 1000us even after several multi-hour testing sessions.
Fixes: c0114fdf6d4a ("drm/xe: Move DSB l2 flush to a more sensible place")
it looks like you used the commit hash of the backport to 6.15:
$ git tag --contains c0114fdf6d4a v6.15.10 v6.15.11 v6.15.5 v6.15.6 v6.15.7 v6.15.8 v6.15.9
I'm changing this to the commit in Linus' tree:
Fixes: 0dd2dd0182bc ("drm/xe: Move DSB l2 flush to a more sensible place")
Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/5710 Signed-off-by: Kenneth Graunke kenneth@whitecape.org Cc: stable@vger.kernel.org Cc: Maarten Lankhorst dev@lankhorst.se
drivers/gpu/drm/xe/xe_device.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
This fixes my desktop which has been broken since 6.15. Given that https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/6097 was recently filed and they seem to need a timeout of 2000 (and are having somewhat different issues), maybe more work's needed here...but I figured I'd send out the fix for my system and let xe folks figure out what they'd like to do. Thanks :)
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c index a4d12ee7d575..6339b8800914 100644 --- a/drivers/gpu/drm/xe/xe_device.c +++ b/drivers/gpu/drm/xe/xe_device.c @@ -1064,7 +1064,7 @@ void xe_device_l2_flush(struct xe_device *xe) spin_lock(>->global_invl_lock);
xe_mmio_write32(>->mmio, XE2_GLOBAL_INVAL, 0x1);
- if (xe_mmio_wait32(>->mmio, XE2_GLOBAL_INVAL, 0x1, 0x0, 500,
NULL, true))
- if (xe_mmio_wait32(>->mmio, XE2_GLOBAL_INVAL, 0x1, 0x0,
1000, NULL, +true))
It should be safe to increase the timeout value, since xe_mmio_wait32() divides the total wait time into several intervals and checks the MMIO register value in each iteration. In normal cases, the actual wait duration remains unchanged, while in abnormal cases, the extended timeout is necessary to handle longer delays properly.
Reviewed-by: Shuicheng Lin shuicheng.lin@intel.com
Agreed.
Merged to drm-xe-next, thanks!
[1/1] drm/xe: Increase global invalidation timeout to 1000us commit: 146046907b56578263434107f5a7d5051847c459
thanks, Lucas De Marchi
xe_gt_err_once(gt, "Global invalidation timeout\n");
spin_unlock(>->global_invl_lock);
2.51.0