diff options
author | Philip Yang <Philip.Yang@amd.com> | 2022-06-27 13:23:27 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2022-06-28 11:24:59 -0400 |
commit | 8c07f33ea096a1d25fcefa4e904ce50aa2358876 (patch) | |
tree | 6e2e0cb854bc0ec33bfb3f44a418e061fa627782 /drivers/gpu/drm/amd | |
parent | 1c4dae3e4639540fb567e570cc56a3c292afb6fe (diff) | |
download | linux-8c07f33ea096a1d25fcefa4e904ce50aa2358876.tar.bz2 |
Revert "drm/amdkfd: Free queue after unmap queue success"
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>
Diffstat (limited to 'drivers/gpu/drm/amd')
-rw-r--r-- | drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 28 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 2 |
2 files changed, 12 insertions, 18 deletions
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c index 21e451acfa59..93a0b6995430 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c @@ -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); 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 a46e2a37b4a6..c9c205df4a14 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c @@ -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); } |