On 4/13/26 14:56, Sunil Khatri wrote:
> In amdgpu_userq_destroy once unmap_helpder is called within mutex
> there is no need to hold mutex.
> 
> This helps in avoiding a deadlock between doorbell and wptr ww mutex
> and we could unpin and unref these bos outside mutex safely.
> 
> Signed-off-by: Sunil Khatri <[email protected]>

Reviewed-by: Christian König <[email protected]>

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> index d4e18b57be80..d66ed81a3fd6 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> @@ -444,7 +444,6 @@ static void amdgpu_userq_cleanup(struct 
> amdgpu_usermode_queue *queue)
>       queue->fence_drv = NULL;
>       queue->userq_mgr = NULL;
>       list_del(&queue->userq_va_list);
> -     kfree(queue);
>  
>       up_read(&adev->reset_domain->sem);
>  }
> @@ -650,6 +649,10 @@ amdgpu_userq_destroy(struct amdgpu_userq_mgr *uq_mgr, 
> struct amdgpu_usermode_que
>               queue->state = AMDGPU_USERQ_STATE_HUNG;
>       }
>  
> +     atomic_dec(&uq_mgr->userq_count[queue->queue_type]);
> +     amdgpu_userq_cleanup(queue);
> +     mutex_unlock(&uq_mgr->userq_mutex);
> +
>       amdgpu_bo_reserve(queue->db_obj.obj, true);
>       amdgpu_bo_unpin(queue->db_obj.obj);
>       amdgpu_bo_unreserve(queue->db_obj.obj);
> @@ -659,11 +662,8 @@ amdgpu_userq_destroy(struct amdgpu_userq_mgr *uq_mgr, 
> struct amdgpu_usermode_que
>       amdgpu_bo_unpin(queue->wptr_obj.obj);
>       amdgpu_bo_unreserve(queue->wptr_obj.obj);
>       amdgpu_bo_unref(&queue->wptr_obj.obj);
> +     kfree(queue);
>  
> -     atomic_dec(&uq_mgr->userq_count[queue->queue_type]);
> -
> -     amdgpu_userq_cleanup(queue);
> -     mutex_unlock(&uq_mgr->userq_mutex);
>       pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
>  
>       return r;

Reply via email to