On 5/19/26 13:17, Sunil Khatri wrote:
> 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.

Please also move amdgpu_userq_fence_driver_free() into amdgpu_userq.c or 
eventually completely drop it.

The cleanup done in there is actually on the queue and not the fence driver.

Regards,
Christian.

> 
> Signed-off-by: Sunil Khatri <[email protected]>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> index eedea84c5e0f..3bfb9ae2cb3a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> @@ -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 @@ amdgpu_userq_create(struct drm_file *filp, union 
> drm_amdgpu_userq *args)
>       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:

Reply via email to