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)
+);
 #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);
 
-- 
2.34.1

Reply via email to