From: Shaoyun Liu <shaoyun....@amd.com>

HWS may hang in the middle of destroy queue, remove the queue from the
process queue list so it won't be freed again in the future

Signed-off-by: Shaoyun Liu <shaoyun....@amd.com>
Reviewed-by: Felix Kuehling <felix.kuehl...@amd.com>
Signed-off-by: Felix Kuehling <felix.kuehl...@amd.com>
---
 drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c 
b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
index 3045aeb..d65ce04 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
@@ -241,7 +241,8 @@ int pqm_create_queue(struct process_queue_manager *pqm,
        }
 
        if (retval != 0) {
-               pr_err("DQM create queue failed\n");
+               pr_err("Pasid %d DQM create queue %d failed. ret %d\n",
+                       pqm->process->pasid, type, retval);
                goto err_create_queue;
        }
 
@@ -319,8 +320,11 @@ int pqm_destroy_queue(struct process_queue_manager *pqm, 
unsigned int qid)
                dqm = pqn->q->device->dqm;
                retval = dqm->ops.destroy_queue(dqm, &pdd->qpd, pqn->q);
                if (retval) {
-                       pr_debug("Destroy queue failed, returned %d\n", retval);
-                       goto err_destroy_queue;
+                       pr_err("Pasid %d destroy queue %d failed, ret %d\n",
+                               pqm->process->pasid,
+                               pqn->q->properties.queue_id, retval);
+                       if (retval != -ETIME)
+                               goto err_destroy_queue;
                }
                uninit_queue(pqn->q);
        }
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to