AMD General

Regards,
      Prike

> -----Original Message-----
> From: Pierre-Eric Pelloux-Prayer <[email protected]>
> Sent: Wednesday, May 13, 2026 5:16 PM
> To: Liang, Prike <[email protected]>; [email protected]
> Cc: Deucher, Alexander <[email protected]>; Koenig, Christian
> <[email protected]>
> Subject: Re: [PATCH 3/4] drm/amdgpu: add userq fence emit and signal 
> tracepoints
>
>
>
> Le 11/05/2026 à 15:54, Prike Liang a écrit :
> > Add ftrace events for user queue fence emission and completion.
> >
> > Signed-off-by: Prike Liang <[email protected]>
> > ---
> >   drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h     | 48 +++++++++++++++++++
> >   .../gpu/drm/amd/amdgpu/amdgpu_userq_fence.c   |  8 ++++
> >   2 files changed, 56 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
> > b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
> > index 484fbb00068b..d421a44ef933 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
> > @@ -661,6 +661,54 @@ DEFINE_EVENT(amdgpu_userq_queue_result,
> amdgpu_userq_map_end,
> >   DEFINE_EVENT(amdgpu_userq_queue_result, amdgpu_userq_unmap_end,
> >          TP_PROTO(struct amdgpu_usermode_queue *queue, int result),
> >          TP_ARGS(queue, result));
> > +
> > +TRACE_EVENT(amdgpu_userq_fence_emit,
> > +       TP_PROTO(struct amdgpu_usermode_queue *queue, u64 seqno,
> > +                unsigned int num_read_handles,
> > +                unsigned int num_write_handles,
> > +                unsigned int num_syncobj_handles),
> > +       TP_ARGS(queue, seqno, num_read_handles, num_write_handles,
> > +               num_syncobj_handles),
> > +       TP_STRUCT__entry(
> > +                        __field(struct amdgpu_usermode_queue *, queue)
> > +                        __field(u64, doorbell_index)
> > +                        __field(int, queue_type)
> > +                        __field(u64, seqno)
> > +                        __field(unsigned int, num_read_handles)
> > +                        __field(unsigned int, num_write_handles)
> > +                        __field(unsigned int, num_syncobj_handles)
> > +                        ),
> > +       TP_fast_assign(
> > +                      __entry->queue = queue;
> > +                      __entry->doorbell_index = queue ? 
> > queue->doorbell_index :
> 0;
> > +                      __entry->queue_type = queue ? queue->queue_type : -1;
> > +                      __entry->seqno = seqno;
> > +                      __entry->num_read_handles = num_read_handles;
> > +                      __entry->num_write_handles = num_write_handles;
> > +                      __entry->num_syncobj_handles = num_syncobj_handles;
> > +                      ),
> > +       TP_printk("queue=%p, doorbell=%llu, type=%d, seqno=%llu, read=%u,
> write=%u, syncobj=%u",
> > +                 __entry->queue, __entry->doorbell_index,
> > +                 __entry->queue_type, __entry->seqno,
> > +                 __entry->num_read_handles, __entry->num_write_handles,
> > +                 __entry->num_syncobj_handles) );
> > +TRACE_EVENT(amdgpu_userq_fence_signal,
> > +       TP_PROTO(u64 context, u64 seqno, u64 rptr),
> > +       TP_ARGS(context, seqno, rptr),
> > +       TP_STRUCT__entry(
> > +                        __field(u64, context)
> > +                        __field(u64, seqno)
> > +                        __field(u64, rptr)
> > +                        ),
> > +       TP_fast_assign(
> > +                      __entry->context = context;
> > +                      __entry->seqno = seqno;
> > +                      __entry->rptr = rptr;
> > +                      ),
> > +       TP_printk("context=%llu, seqno=%llu, rptr=%llu",
> > +                 __entry->context, __entry->seqno, __entry->rptr) );
>
> Could you replace this patch with my version? The event names are more 
> consistent
> with the kernel queue ones and it also has one event for dependencies.

Sure, I will merge your patch into this userq submission tracker part.

> Pierre-Eric
>
>
> >   #undef AMDGPU_JOB_GET_TIMELINE_NAME
> >   #endif
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c
> > b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c
> > index 369914cab555..50d1c3627279 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c
> > @@ -31,6 +31,7 @@
> >
> >   #include "amdgpu.h"
> >   #include "amdgpu_userq_fence.h"
> > +#include "amdgpu_trace.h"
> >
> >   #define AMDGPU_USERQ_MAX_HANDLES  (1U << 16)
> >
> > @@ -168,6 +169,9 @@ amdgpu_userq_fence_driver_process(struct
> amdgpu_userq_fence_driver *fence_drv)
> >     list_for_each_entry_safe(userq_fence, tmp, &to_be_signaled, link) {
> >             fence = &userq_fence->base;
> >             list_del_init(&userq_fence->link);
> > +           trace_amdgpu_userq_fence_signal(fence_drv->context,
> > +                                           userq_fence->base.seqno,
> > +                                           rptr);
> >             dma_fence_signal(fence);
> >             /* Drop fence_drv_array outside fence_list_lock
> >              * to avoid the recursion lock.
> > @@ -530,6 +534,10 @@ int amdgpu_userq_signal_ioctl(struct drm_device
> > *dev, void *data,
> >
> >     /* Create the new fence */
> >     amdgpu_userq_fence_init(queue, fence, wptr);
> > +   trace_amdgpu_userq_fence_emit(queue, fence->base.seqno,
> > +                                 num_read_bo_handles,
> > +                                 num_write_bo_handles,
> > +                                 num_syncobj_handles);
> >
> >     mutex_unlock(&userq_mgr->userq_mutex);
> >

Reply via email to