While tear down of a userq_mgr is happening when all the queues
are free we should cancel any reset work if pending before exiting.

Signed-off-by: Sunil Khatri <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
index 0a1fc45f5b4e..6000dee5ee3d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
@@ -1346,6 +1346,14 @@ void amdgpu_userq_mgr_fini(struct amdgpu_userq_mgr 
*userq_mgr)
        }
 
        xa_destroy(&userq_mgr->userq_xa);
+
+       /*
+        * Drain any in-flight reset_work. By this point all queues are freed
+        * and userq_count is 0, so if reset_work starts now it exits early.
+        * We still need to wait in case it was already executing gpu_recover.
+        */
+       cancel_work_sync(&userq_mgr->reset_work);
+
        mutex_destroy(&userq_mgr->userq_mutex);
 }
 
-- 
2.34.1

Reply via email to