Revert "drm/amdkfd: Free queue after unmap queue success"
authorPhilip Yang <Philip.Yang@amd.com>
Mon, 27 Jun 2022 17:23:27 +0000 (13:23 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 28 Jun 2022 15:24:59 +0000 (11:24 -0400)
This reverts commit ab8529b0cdb271d9b222cbbddb2641f3fca5df8f.

This causes KFDTest KFDMemoryTest.MemoryRegister test failed on gfx9.

Signed-off-by: Philip Yang <Philip.Yang@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c

index 21e451a..93a0b69 100644 (file)
@@ -1881,22 +1881,6 @@ static int destroy_queue_cpsch(struct device_queue_manager *dqm,
 
        }
 
-       if (q->properties.is_active) {
-               if (!dqm->dev->shared_resources.enable_mes) {
-                       retval = execute_queues_cpsch(dqm,
-                                                     KFD_UNMAP_QUEUES_FILTER_DYNAMIC_QUEUES, 0);
-                       if (retval == -ETIME)
-                               qpd->reset_wavefronts = true;
-               } else {
-                       retval = remove_queue_mes(dqm, q, qpd);
-               }
-
-               if (retval)
-                       goto failed_unmap_queue;
-
-               decrement_queue_count(dqm, qpd, q);
-       }
-
        mqd_mgr = dqm->mqd_mgrs[get_mqd_type_from_queue_type(
                        q->properties.type)];
 
@@ -1910,6 +1894,17 @@ static int destroy_queue_cpsch(struct device_queue_manager *dqm,
 
        list_del(&q->list);
        qpd->queue_count--;
+       if (q->properties.is_active) {
+               if (!dqm->dev->shared_resources.enable_mes) {
+                       decrement_queue_count(dqm, qpd, q);
+                       retval = execute_queues_cpsch(dqm,
+                                                     KFD_UNMAP_QUEUES_FILTER_DYNAMIC_QUEUES, 0);
+                       if (retval == -ETIME)
+                               qpd->reset_wavefronts = true;
+               } else {
+                       retval = remove_queue_mes(dqm, q, qpd);
+               }
+       }
 
        /*
         * Unconditionally decrement this counter, regardless of the queue's
@@ -1926,7 +1921,6 @@ static int destroy_queue_cpsch(struct device_queue_manager *dqm,
 
        return retval;
 
-failed_unmap_queue:
 failed_try_destroy_debugged_queue:
 
        dqm_unlock(dqm);
index a46e2a3..c9c205d 100644 (file)
@@ -422,6 +422,7 @@ int pqm_destroy_queue(struct process_queue_manager *pqm, unsigned int qid)
        }
 
        if (pqn->q) {
+               kfd_procfs_del_queue(pqn->q);
                dqm = pqn->q->device->dqm;
                retval = dqm->ops.destroy_queue(dqm, &pdd->qpd, pqn->q);
                if (retval) {
@@ -445,7 +446,6 @@ int pqm_destroy_queue(struct process_queue_manager *pqm, unsigned int qid)
                                amdgpu_amdkfd_free_gtt_mem(dev->adev, pqn->q->wptr_bo);
 
                }
-               kfd_procfs_del_queue(pqn->q);
                uninit_queue(pqn->q);
        }