]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amdkfd: fix QID bit leak in pqm_create_queue()
authorVladimir Marioukhine <Vladimir.Marioukhine@amd.com>
Mon, 20 Jul 2026 15:53:30 +0000 (11:53 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 28 Jul 2026 23:59:15 +0000 (19:59 -0400)
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_allocate_pqn'
so that clear_bit() is always called on the error path without
touching the uninitialized pqn pointer.

AILIKFD-813

Reported-by: Deucher, Alexander <alexander.deucher@amd.com>
Signed-off-by: Vladimir Marioukhine <Vladimir.Marioukhine@amd.com>
Reviewed-by: Kent Russell <kent.russell@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit a107f74c38edbb80d6ab64dcaeeb292c14e9779f)
Cc: stable@vger.kernel.org
drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c

index 9ccbc6e5b27b3b4394599affcd96e6b0275f55d7..503176f0020405917b97b74ecf8c21420b2d5804 100644 (file)
@@ -383,7 +383,7 @@ int pqm_create_queue(struct process_queue_manager *pqm,
                                                     false);
                if (retval) {
                        dev_err(dev->adev->dev, "failed to allocate process context bo\n");
-                       return retval;
+                       goto err_allocate_pqn;
                }
                memset(pdd->proc_ctx_cpu_ptr, 0, AMDGPU_MES_PROC_CTX_SIZE);
        }