Keeping waiting the userq fence infinitely untill
hang detection, and then suspend the hang queue and
set the fence error.

Signed-off-by: Prike Liang <prike.li...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
index e5891674b4d0..a78c2caeef41 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
@@ -283,7 +283,7 @@ 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)
 {
@@ -291,11 +291,16 @@ amdgpu_userq_wait_for_last_fence(struct amdgpu_userq_mgr 
*uq_mgr,
        int ret;
 
        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
-- 
2.34.1

Reply via email to