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; >
