]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amdkfd: Remove queue node when destroy queue failed
authorShaoyun Liu <Shaoyun.Liu@amd.com>
Tue, 1 May 2018 21:56:11 +0000 (17:56 -0400)
committerOded Gabbay <oded.gabbay@gmail.com>
Tue, 1 May 2018 21:56:11 +0000 (17:56 -0400)
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.Liu@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c

index 3045aebdc3f7a081f6b8076ecd815b073ee0351c..d65ce0436b31ba45ca9ef303b3970f7e5fc42dc6 100644 (file)
@@ -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);
        }