On Mon, Jul 13, 2026 at 12:44 PM Srinivasan Shanmugam
<[email protected]> 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]>

> ---
>  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);
>  }
> --
> 2.34.1
>

Reply via email to