On 7/14/26 10:02, Srinivasan Shanmugam wrote:
> Signal USERQ_EOP EVENTFD subscriptions from the USERQ interrupt path.
> 
> The EOP interrupt already identifies the queue that completed. Use the
> queue object directly to notify matching EVENTFD subscribers.
> 
> Routing notifications through the queue object keeps delivery tied to
> the queue instance that generated the completion event, avoiding
> ambiguities from reused queue identifiers or doorbell indices.
> 
> EVENTFD remains notification-only and carries no event payload.
> 
> v2: (per Christian)
> - Move USERQ_EOP EVENTFD signaling into amdgpu_userq_process_fence_irq().
> - Reuse the existing doorbell-to-queue lookup instead of duplicating it
>   in the interrupt handler.
> - Keep fence processing and EVENTFD notification handling together in a
>   single helper.
> 
> Cc: Alex Deucher <[email protected]>
> Cc: Christian König <[email protected]>
> Signed-off-by: Srinivasan Shanmugam <[email protected]>
> Reviewed-by: Alex Deucher <[email protected]>

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

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> index fbf783946f6d..ab3ef3a9f655 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> @@ -215,6 +215,7 @@ void amdgpu_userq_process_fence_irq(struct amdgpu_device 
> *adev, u32 doorbell)
>  {
>       struct xarray *xa = &adev->userq_doorbell_xa;
>       struct amdgpu_usermode_queue *queue;
> +     struct amdgpu_eventfd_mgr *eventfd_mgr;
>       unsigned long flags;
>       int r;
>  
> @@ -232,6 +233,11 @@ void amdgpu_userq_process_fence_irq(struct amdgpu_device 
> *adev, u32 doorbell)
>               /* Restart the timer when there are still fences pending */
>               if (r == 1)
>                       amdgpu_userq_start_hang_detect_work(queue);
> +
> +             eventfd_mgr = amdgpu_userq_eventfd_mgr(queue->userq_mgr);
> +             amdgpu_eventfd_signal(eventfd_mgr,
> +                                   DRM_AMDGPU_EVENT_TYPE_USERQ_EOP,
> +                                   queue);
>       }
>       xa_unlock_irqrestore(xa, flags);
>  }

Reply via email to