From dad72b414b14764dd868eb2e5832aab3dd473982 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 Part-of: --- src/freedreno/vulkan/tu_knl_drm_virtio.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/freedreno/vulkan/tu_knl_drm_virtio.cc b/src/freedreno/vulkan/tu_knl_drm_virtio.cc index e28888fdcb1..ea4d31ab665 100644 --- a/src/freedreno/vulkan/tu_knl_drm_virtio.cc +++ b/src/freedreno/vulkan/tu_knl_drm_virtio.cc @@ -430,10 +430,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: