]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu/userq: Fix the mutex_init cleanup for fence_drv_lock
authorSunil Khatri <sunil.khatri@amd.com>
Tue, 19 May 2026 09:42:42 +0000 (15:12 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 27 May 2026 15:55:38 +0000 (11:55 -0400)
mutex fence_drv_lock is destroyed in amdgpu_userq_fence_driver_free
also in one of the jump condition mutex_destroy is also called leading
to double mutex_destroy.

So rearranging the code so amdgpu_userq_fence_driver_free takes care
of the clean up along with mutex_destroy.

Signed-off-by: Sunil Khatri <sunil.khatri@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 384dbef269d101e5b671fc7b942c56734cd1d186)

drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c

index 2301a44a03b13eaa4887df049cdd42d23010166c..d6390cc5a798ed7504c7b11291b1e13fe716b603 100644 (file)
@@ -748,12 +748,12 @@ amdgpu_userq_create(struct drm_file *filp, union drm_amdgpu_userq *args)
        INIT_DELAYED_WORK(&queue->hang_detect_work,
                          amdgpu_userq_hang_detect_work);
 
-       mutex_init(&queue->fence_drv_lock);
-       xa_init_flags(&queue->fence_drv_xa, XA_FLAGS_ALLOC);
        r = amdgpu_userq_fence_driver_alloc(adev, &queue->fence_drv);
        if (r)
                goto free_queue;
 
+       xa_init_flags(&queue->fence_drv_xa, XA_FLAGS_ALLOC);
+       mutex_init(&queue->fence_drv_lock);
        /* Make sure the queue can actually run with those virtual addresses. */
        r = amdgpu_bo_reserve(fpriv->vm.root.bo, false);
        if (r)
@@ -844,7 +844,6 @@ clean_mapping:
        amdgpu_bo_reserve(fpriv->vm.root.bo, true);
        amdgpu_userq_buffer_vas_list_cleanup(adev, queue);
        amdgpu_bo_unreserve(fpriv->vm.root.bo);
-       mutex_destroy(&queue->fence_drv_lock);
 free_fence_drv:
        amdgpu_userq_fence_driver_free(queue);
 free_queue: