summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2026-07-03 15:44:49 +0100
committerMark Brown <broonie@kernel.org>2026-07-03 15:44:49 +0100
commit4dac529c9a2c0ed1286801ec62d23538035a3a1d (patch)
treec99335269438629bc089c9895e6156cf9a374a22 /drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
parent5a42c9f18870162ae14f0d8e193671017421a982 (diff)
parent50be7c9b5d5ea55fd40bb411cf324cec99ec7417 (diff)
downloadlinux-next-4dac529c9a2c0ed1286801ec62d23538035a3a1d.tar.gz
linux-next-4dac529c9a2c0ed1286801ec62d23538035a3a1d.zip
Merge branch 'drm-next' of https://gitlab.freedesktop.org/agd5f/linux.git
# Conflicts: # drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c # drivers/gpu/drm/amd/amdgpu/amdgpu_device.c # drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c # drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h150
1 files changed, 150 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
index 85724ec6aaf8..5324030a13f5 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
@@ -28,6 +28,8 @@
#include <linux/types.h>
#include <linux/tracepoint.h>
+#include "amdgpu_userq_fence.h"
+
#undef TRACE_SYSTEM
#define TRACE_SYSTEM amdgpu
#define TRACE_INCLUDE_FILE amdgpu_trace
@@ -582,6 +584,154 @@ TRACE_EVENT(amdgpu_reset_reg_dumps,
__entry->value)
);
+DECLARE_EVENT_CLASS(amdgpu_userq_queue,
+ TP_PROTO(struct amdgpu_usermode_queue *queue),
+ TP_ARGS(queue),
+ TP_STRUCT__entry(
+ __field(void *, queue)
+ __field(u64, doorbell_index)
+ __field(int, queue_type)
+ __field(int, state)
+ __field(u32, xcp_id)
+ ),
+ TP_fast_assign(
+ __entry->queue = queue;
+ __entry->doorbell_index = queue->doorbell_index;
+ __entry->queue_type = queue->queue_type;
+ __entry->state = queue->state;
+ __entry->xcp_id = queue->xcp_id;
+ ),
+ TP_printk("queue=%p, doorbell=%llu, type=%d, state=%d, xcp_id=%u",
+ __entry->queue, __entry->doorbell_index,
+ __entry->queue_type, __entry->state, __entry->xcp_id)
+);
+DEFINE_EVENT(amdgpu_userq_queue, amdgpu_userq_create_start,
+ TP_PROTO(struct amdgpu_usermode_queue *queue),
+ TP_ARGS(queue));
+DEFINE_EVENT(amdgpu_userq_queue, amdgpu_userq_destroy_start,
+ TP_PROTO(struct amdgpu_usermode_queue *queue),
+ TP_ARGS(queue));
+DECLARE_EVENT_CLASS(amdgpu_userq_queue_result,
+ TP_PROTO(struct amdgpu_usermode_queue *queue, int result),
+ TP_ARGS(queue, result),
+ TP_STRUCT__entry(
+ __field(void *, queue)
+ __field(u64, doorbell_index)
+ __field(int, queue_type)
+ __field(int, state)
+ __field(u32, xcp_id)
+ __field(int, result)
+ ),
+ TP_fast_assign(
+ __entry->queue = queue;
+ __entry->doorbell_index = queue->doorbell_index;
+ __entry->queue_type = queue->queue_type;
+ __entry->state = queue->state;
+ __entry->xcp_id = queue->xcp_id;
+ __entry->result = result;
+ ),
+ TP_printk("queue=%p, doorbell=%llu, type=%d, state=%d, xcp_id=%u, result=%d",
+ __entry->queue, __entry->doorbell_index,
+ __entry->queue_type, __entry->state,
+ __entry->xcp_id, __entry->result)
+);
+DEFINE_EVENT(amdgpu_userq_queue_result, amdgpu_userq_create_end,
+ TP_PROTO(struct amdgpu_usermode_queue *queue, int result),
+ TP_ARGS(queue, result));
+DEFINE_EVENT(amdgpu_userq_queue_result, amdgpu_userq_destroy_end,
+ TP_PROTO(struct amdgpu_usermode_queue *queue, int result),
+ TP_ARGS(queue, result));
+
+TRACE_EVENT(amdgpu_userq_emit_fence,
+ TP_PROTO(struct device *device, struct amdgpu_usermode_queue *queue, struct amdgpu_userq_fence *fence),
+ TP_ARGS(device, queue, fence),
+ TP_STRUCT__entry(
+ __field(u64, fence_context)
+ __field(u64, fence_seqno)
+ __string(dev, dev_name(device))
+ __field(u64, doorbell_index)
+ __field(u64, client_id)
+ __field(u32, queue_type)
+ ),
+ TP_fast_assign(
+ __entry->fence_context = fence->base.context;
+ __entry->fence_seqno = fence->base.seqno;
+ __assign_str(dev);
+ __entry->doorbell_index = queue->doorbell_index;
+ __entry->client_id = queue->userq_mgr->file->client_id;
+ __entry->queue_type = queue->queue_type;
+ ),
+ TP_printk("dev=%s, client_id=%llu, type=%u, doorbell=%llu, fence=%llu:%llu",
+ __get_str(dev), __entry->client_id, __entry->queue_type, __entry->doorbell_index,
+ __entry->fence_context,
+ __entry->fence_seqno)
+);
+
+TRACE_EVENT(amdgpu_userq_wait_deps,
+ TP_PROTO(struct device *device, struct amdgpu_usermode_queue *queue, struct amdgpu_userq_fence *dep),
+ TP_ARGS(device, queue, dep),
+ TP_STRUCT__entry(
+ __field(u64, context)
+ __field(u64, dep_context)
+ __field(u64, dep_seqno)
+ __string(dev, dev_name(device))
+ __field(u64, doorbell_index)
+ __field(u64, client_id)
+ __field(u32, queue_type)
+ ),
+ TP_fast_assign(
+ __assign_str(dev);
+ __entry->doorbell_index = queue->doorbell_index;
+ __entry->queue_type = queue->queue_type;
+ __entry->client_id = queue->userq_mgr->file->client_id;
+ __entry->context = queue->fence_drv->context;
+ __entry->dep_context = dep->base.context;
+ __entry->dep_seqno = dep->base.seqno;
+ ),
+ TP_printk("dev=%s, client_id=%llu, type=%u, doorbell=%llu, context=%llu depends on fence=%llu:%llu",
+ __get_str(dev), __entry->client_id, __entry->queue_type, __entry->doorbell_index, __entry->context,
+ __entry->dep_context,
+ __entry->dep_seqno)
+);
+
+TRACE_EVENT(amdgpu_userq_state_start,
+ TP_PROTO(struct amdgpu_usermode_queue *queue),
+ TP_ARGS(queue),
+ TP_STRUCT__entry(
+ __field(u64, doorbell_index)
+ __field(u64, client_id)
+ __field(u32, queue_type)
+ __field(u32, from)
+ ),
+ TP_fast_assign(
+ __entry->doorbell_index = queue->doorbell_index;
+ __entry->queue_type = queue->queue_type;
+ __entry->client_id = queue->userq_mgr->file->client_id;
+ __entry->from = queue->state;
+ ),
+ TP_printk("client_id=%llu, type=%u, doorbell=%llu, from=%d",
+ __entry->client_id, __entry->queue_type, __entry->doorbell_index, __entry->from)
+);
+
+TRACE_EVENT(amdgpu_userq_state_changed,
+ TP_PROTO(struct amdgpu_usermode_queue *queue, enum amdgpu_userq_state new_state),
+ TP_ARGS(queue, new_state),
+ TP_STRUCT__entry(
+ __field(u64, doorbell_index)
+ __field(u64, client_id)
+ __field(u32, queue_type)
+ __field(u32, to)
+ ),
+ TP_fast_assign(
+ __entry->doorbell_index = queue->doorbell_index;
+ __entry->queue_type = queue->queue_type;
+ __entry->client_id = queue->userq_mgr->file->client_id;
+ __entry->to = new_state;
+ ),
+ TP_printk("client_id=%llu, type=%u, doorbell=%llu, to=%d",
+ __entry->client_id, __entry->queue_type, __entry->doorbell_index, __entry->to)
+);
+
#undef AMDGPU_JOB_GET_TIMELINE_NAME
#endif