]> git.ipfire.org Git - thirdparty/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 14:32:09 +0000 (10:32 -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>
drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c

index 8ea8b1cc4fde53a54b61a9caba5616e5943f1da9..af9904f9d7036c32c42b49a68a95381493bf73ac 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: