From b7560252e438970c693377d9097d2c0c86963533 Mon Sep 17 00:00:00 2001 From: Valentine Burley Date: Wed, 22 Apr 2026 13:31:41 +0200 Subject: [PATCH] tu/drm/virtio: Fix tu_wait_fence timeout handling Fixes two bugs in the WAIT_FENCE polling loop: 1. Break on timeout returned VK_SUCCESS because ret was read too late. 2. UINT64_MAX timeout_ns overflowed end_time, causing immediate exit. Fix by reading rsp->ret before the timeout check and using OS_TIMEOUT_INFINITE (like virtio_pipe_wait in freedreno) to avoid overflow. This prevents premature BO teardown during host-side fault recovery. Fixes: f17c5297d7a ("tu: Add virtgpu support") Signed-off-by: Valentine Burley (cherry picked from commit dad72b414b14764dd868eb2e5832aab3dd473982) Part-of: --- .pick_status.json | 2 +- src/freedreno/vulkan/tu_knl_drm_virtio.cc | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index a760fd62817..7a8d826e822 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -2494,7 +2494,7 @@ "description": "tu/drm/virtio: Fix tu_wait_fence timeout handling", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "f17c5297d7a01eb37815f96bbf3a87667a2f3261", "notes": null diff --git a/src/freedreno/vulkan/tu_knl_drm_virtio.cc b/src/freedreno/vulkan/tu_knl_drm_virtio.cc index 020210dd8af..6ba85cdb80f 100644 --- a/src/freedreno/vulkan/tu_knl_drm_virtio.cc +++ b/src/freedreno/vulkan/tu_knl_drm_virtio.cc @@ -427,10 +427,11 @@ tu_wait_fence(struct tu_device *dev, if (ret) goto out; - if (os_time_get_nano() >= end_time) - break; - ret = rsp->ret; + + if (timeout_ns != OS_TIMEOUT_INFINITE && + os_time_get_nano() >= end_time) + break; } while (ret == -ETIMEDOUT); out: