On 6/24/26 11:26, Zhu Lingshan wrote:
> When creating an user-queue, the user space
> provides a doorbell BO handle and an offset within
> the bo to obtain a doorbell.
> 
> However current implementation using xa_store_irq()
> to store a doorbell, which allows a later queue created
> with the same BO and offset parameters to overwrite an
> existing queue and doorbell mapping.
> 
> This can cause problems like misrouting fence IRQ
> processing to a wrong queue, and mislead the cleanup
> process of one queue erasing the mapping of another queue.
> 
> This commit fixes this issue by replacing xa_store_irq with
> xa_insert_irq, which rejects mapping a reserved
> doorbell to a newly created queue
> 
> Signed-off-by: Zhu Lingshan <[email protected]>

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

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> index f45bc8cb815c..fb7e18c841ee 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> @@ -704,8 +704,8 @@ amdgpu_userq_create(struct drm_file *filp, union 
> drm_amdgpu_userq *args)
>       /* Update VM owner at userq submit-time for page-fault attribution. */
>       amdgpu_vm_set_task_info(&fpriv->vm);
>  
> -     r = xa_err(xa_store_irq(&adev->userq_doorbell_xa, index, queue,
> -                             GFP_KERNEL));
> +     r = xa_insert_irq(&adev->userq_doorbell_xa, index, queue,
> +                       GFP_KERNEL);
>       if (r)
>               goto clean_mqd;
>  

Reply via email to