On Mon, Jul 13, 2026 at 5:02 PM Alex Deucher <[email protected]> wrote:
>
> On Mon, Jul 13, 2026 at 5:00 PM Alex Deucher <[email protected]> wrote:
> >
> > On Mon, Jul 13, 2026 at 1:39 PM Srinivasan Shanmugam
> > <[email protected]> wrote:
> > >
> > > Pending WAIT_EVENT records for queue-scoped events store queue pointers
> > > and own queue references while queued.
> > >
> > > Remove all WAIT_EVENT records associated with a user queue before USERQ
> > > drops its queue reference during queue teardown. This mirrors the
> > > EVENTFD queue cleanup path and prevents pending records from keeping
> > > stale queue state after the queue is removed from USERQ ownership.
> > >
> > > Cc: Alex Deucher <[email protected]>
> > > Cc: Christian König <[email protected]>
> > > Signed-off-by: Srinivasan Shanmugam <[email protected]>
> >
> > Reviewed-by: Alex Deucher <[email protected]>
>
> Actually this patch should be applied before the IOCTL is enabled
> otherwise the previous patch will leak events.

Actually nevermind, you don't add any queue events until patch 5.

Alex

>
> Alex
>
> >
> > > ---
> > >  drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 21 +++++++++++++++++++++
> > >  drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h |  2 ++
> > >  2 files changed, 23 insertions(+)
> > >
> > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c 
> > > b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> > > index 5bf231d7a630..b3ac1e81c9ca 100644
> > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
> > > @@ -56,6 +56,24 @@ amdgpu_userq_eventfd_mgr(struct amdgpu_userq_mgr 
> > > *userq_mgr)
> > >         return &fpriv->eventfd_mgr;
> > >  }
> > >
> > > +/*
> > > + * Get the per-file wait-event manager associated with this userq 
> > > manager.
> > > + */
> > > +struct amdgpu_wait_event_mgr *
> > > +amdgpu_userq_wait_event_mgr(struct amdgpu_userq_mgr *userq_mgr)
> > > +{
> > > +       struct amdgpu_fpriv *fpriv;
> > > +
> > > +       if (WARN_ON(!userq_mgr || !userq_mgr->file))
> > > +               return NULL;
> > > +
> > > +       fpriv = userq_mgr->file->driver_priv;
> > > +       if (WARN_ON(!fpriv))
> > > +               return NULL;
> > > +
> > > +       return &fpriv->wait_event_mgr;
> > > +}
> > > +
> > >  u32 amdgpu_userq_get_supported_ip_mask(struct amdgpu_device *adev)
> > >  {
> > >         int i;
> > > @@ -1040,6 +1058,7 @@ int amdgpu_userq_ioctl(struct drm_device *dev, void 
> > > *data,
> > >                         return -ENOENT;
> > >
> > >                 amdgpu_eventfd_remove_queue(&fpriv->eventfd_mgr, queue);
> > > +               amdgpu_wait_event_remove_queue(&fpriv->wait_event_mgr, 
> > > queue);
> > >
> > >                 amdgpu_userq_put(queue);
> > >                 break;
> > > @@ -1426,6 +1445,8 @@ void amdgpu_userq_mgr_fini(struct amdgpu_userq_mgr 
> > > *userq_mgr)
> > >
> > >                 
> > > amdgpu_eventfd_remove_queue(amdgpu_userq_eventfd_mgr(userq_mgr),
> > >                                             queue);
> > > +               
> > > amdgpu_wait_event_remove_queue(amdgpu_userq_wait_event_mgr(userq_mgr),
> > > +                                              queue);
> > >
> > >                 amdgpu_userq_put(queue);
> > >         }
> > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h 
> > > b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h
> > > index 187bfd66eb13..6a53cd3208da 100644
> > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h
> > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.h
> > > @@ -203,4 +203,6 @@ int amdgpu_userq_input_cwsr_params_validate(
> > >         struct amdgpu_cwsr_params *cwsr_params);
> > >  struct amdgpu_eventfd_mgr *
> > >  amdgpu_userq_eventfd_mgr(struct amdgpu_userq_mgr *userq_mgr);
> > > +struct amdgpu_wait_event_mgr *
> > > +amdgpu_userq_wait_event_mgr(struct amdgpu_userq_mgr *userq_mgr);
> > >  #endif
> > > --
> > > 2.34.1
> > >

Reply via email to