]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu: keeping waiting userq fence infinitely
authorPrike Liang <Prike.Liang@amd.com>
Tue, 22 Jul 2025 05:43:51 +0000 (13:43 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 13 Oct 2025 18:14:34 +0000 (14:14 -0400)
Keeping waiting the userq fence infinitely until
hang detection, and then suspend the hang queue and
set the fence error.

Signed-off-by: Prike Liang <Prike.Liang@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c

index 5c66f472d055d4b4501cf2113c65f24f4d41ed76..4cd662ad7be9ea35d19c6963854f80a90e412b5b 100644 (file)
@@ -213,19 +213,24 @@ amdgpu_userq_map_helper(struct amdgpu_userq_mgr *uq_mgr,
        return r;
 }
 
-static void
+static int
 amdgpu_userq_wait_for_last_fence(struct amdgpu_userq_mgr *uq_mgr,
                                 struct amdgpu_usermode_queue *queue)
 {
        struct dma_fence *f = queue->last_fence;
-       int ret;
+       int ret = 0;
 
        if (f && !dma_fence_is_signaled(f)) {
-               ret = dma_fence_wait_timeout(f, true, msecs_to_jiffies(100));
-               if (ret <= 0)
+               ret = dma_fence_wait_timeout(f, true, MAX_SCHEDULE_TIMEOUT);
+               if (ret <= 0) {
                        drm_file_err(uq_mgr->file, "Timed out waiting for fence=%llu:%llu\n",
                                     f->context, f->seqno);
+                       queue->state = AMDGPU_USERQ_STATE_HUNG;
+                       return -ETIME;
+               }
        }
+
+       return ret;
 }
 
 static void