Complete the hang user queue fence unconditionally, including
the case where queue reset fails. Without this fix, a failed
reset leaves the fence unsignaled, causing waiters to block
indefinitely.

Signed-off-by: Prike Liang <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/mes_userqueue.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c 
b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
index 83a438d8e117..2bb5f231f133 100644
--- a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
+++ b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
@@ -255,12 +255,10 @@ int mes_userq_reset_queue(struct amdgpu_device *adev,
                                        r = amdgpu_mes_reset_queue_mmio(adev, 
queue_type, 0, 1, pipe, queue, 0);
                                else
                                        r = amdgpu_mes_reset_user_queue(adev, 
queue_type, db, 0);
-                               if (r)
-                                       return r;
-                               r = mes_userq_unmap(uq);
-                               if (r)
-                                       return r;
+                               if (!r)
+                                       r = mes_userq_unmap(uq);
                                amdgpu_userq_fence_driver_force_completion(uq);
+                               return r;
                                break;
                        }
                }
-- 
2.34.1

Reply via email to