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 >
