When MES is enabled and amdgpu_amdkfd_alloc_kernel_mem() fails during
the first queue creation for a process, pqm_create_queue() returns
early via 'return retval' without going through the err_create_queue
cleanup label.

This means clear_bit(*qid, pqm->queue_slot_bitmap) is never called,
leaving the reserved QID bit permanently set in queue_slot_bitmap.
Over time this leaks QID slots, potentially exhausting all available
queue slots.

Fix this by replacing 'return retval' with 'goto err_create_queue'
so that clear_bit() is always called on the error path.

Fixes: AILIKFD-813
Reported-by: Deucher, Alexander <[email protected]>
Signed-off-by: Vladimir Marioukhine <[email protected]>

Changes in v2:
- Fixed author name format to First Last order (suggested by A. Deucher)
- Removed incorrect attachments from mailing list submission

---
 drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

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 1234567..abcdefg 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
@@ -378,7 +378,7 @@
                                                     false);
                if (retval) {
                        dev_err(dev->adev->dev, "failed to allocate process 
context bo\n");
-                       return retval;
+                       goto err_create_queue;
                }
                memset(pdd->proc_ctx_cpu_ptr, 0, AMDGPU_MES_PROC_CTX_SIZE);
        }
--
2.34.1

Reply via email to