]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu/userq: clean the VA mapping list for failed queue creation
authorSunil Khatri <sunil.khatri@amd.com>
Wed, 8 Apr 2026 05:05:05 +0000 (10:35 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 17 Apr 2026 19:41:11 +0000 (15:41 -0400)
If the queue creation failed during mapping of the important VA's
like queue_va, rptr_va and wptr_va. These needs to be cleaned
as queue destroy will not be called for such queues as user never
get call to creation failure.

Signed-off-by: Sunil Khatri <sunil.khatri@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c

index b29484ecce9b2dbcdb78f8ea8cafb19424c1468a..bf152b63653640c7bd6e19e734fbeb44a49922b0 100644 (file)
@@ -767,7 +767,7 @@ amdgpu_userq_create(struct drm_file *filp, union drm_amdgpu_userq *args)
            amdgpu_userq_input_va_validate(adev, queue, args->in.rptr_va, AMDGPU_GPU_PAGE_SIZE) ||
            amdgpu_userq_input_va_validate(adev, queue, args->in.wptr_va, AMDGPU_GPU_PAGE_SIZE)) {
                r = -EINVAL;
-               goto free_queue;
+               goto clean_mapping;
        }
 
        /* Convert relative doorbell offset into absolute doorbell index */
@@ -775,7 +775,7 @@ amdgpu_userq_create(struct drm_file *filp, union drm_amdgpu_userq *args)
        if (index == (uint64_t)-EINVAL) {
                drm_file_err(uq_mgr->file, "Failed to get doorbell for queue\n");
                r = -EINVAL;
-               goto free_queue;
+               goto clean_mapping;
        }
 
        queue->doorbell_index = index;
@@ -783,7 +783,7 @@ amdgpu_userq_create(struct drm_file *filp, union drm_amdgpu_userq *args)
        r = amdgpu_userq_fence_driver_alloc(adev, &queue->fence_drv);
        if (r) {
                drm_file_err(uq_mgr->file, "Failed to alloc fence driver\n");
-               goto free_queue;
+               goto clean_mapping;
        }
 
        /*
@@ -857,7 +857,8 @@ clean_mqd:
 clean_fence_driver:
        amdgpu_userq_fence_driver_free(queue);
        mutex_unlock(&uq_mgr->userq_mutex);
-free_queue:
+clean_mapping:
+       amdgpu_userq_buffer_vas_list_cleanup(adev, queue);
        kfree(queue);
        return r;
 }