* [PATCH v4 0/6] Tracing cleanup and add mmio tracing
@ 2024-06-06 0:18 Radhakrishna Sripada
2024-06-06 0:18 ` [PATCH v4 1/6] drm/xe/trace: Extract bo, vm, vma traces Radhakrishna Sripada
` (8 more replies)
0 siblings, 9 replies; 11+ messages in thread
From: Radhakrishna Sripada @ 2024-06-06 0:18 UTC (permalink / raw)
To: intel-xe; +Cc: gustavo.sousa, Radhakrishna Sripada
xe_trace.h is getting bloated. Group related events to their own
files. All bo, vm and vma related events have been moved to
xe_trace_bo.h. GuC related trace events have been moved to
xe_trace_guc.h. Patches 1 and 2 splits the trace events into
seperate files.
In multi gpu environments, it is important to know the device from
which the event was triggered. Print the device id information along
with the trace information being printed. Patches 3, 4 and 5 make
changes to print the device id's if not already captured.
Mmio reg read writes are important tracing information that needs to be
captured and will be helpful in display debug. Patch 6 adds the reg
read/write tracing support.
Earlier versions of patch 6 can be found here:
v1: https://patchwork.freedesktop.org/series/119312/
v2: https://patchwork.freedesktop.org/series/132626/
Radhakrishna Sripada (6):
drm/xe/trace: Extract bo, vm, vma traces
drm/xe/trace: Extract guc related traces
drm/xe/trace: Print device_id in xe_trace_bo events
drm/xe/trace: Print device_id in xe_trace_guc events
drm/xe/trace: Print device_id in xe_trace events
drm/xe: Add reg read/write trace
drivers/gpu/drm/xe/Makefile | 2 +
drivers/gpu/drm/xe/xe_bo.c | 2 +-
drivers/gpu/drm/xe/xe_gt_pagefault.c | 2 +-
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 27 +-
drivers/gpu/drm/xe/xe_guc_ct.c | 13 +-
drivers/gpu/drm/xe/xe_migrate.c | 2 +-
drivers/gpu/drm/xe/xe_mmio.c | 24 +-
drivers/gpu/drm/xe/xe_pt.c | 8 +-
drivers/gpu/drm/xe/xe_trace.h | 381 ++++----------------
drivers/gpu/drm/xe/xe_trace_bo.c | 9 +
drivers/gpu/drm/xe/xe_trace_bo.h | 248 +++++++++++++
drivers/gpu/drm/xe/xe_trace_guc.c | 9 +
drivers/gpu/drm/xe/xe_trace_guc.h | 111 ++++++
drivers/gpu/drm/xe/xe_vm.c | 2 +-
14 files changed, 495 insertions(+), 344 deletions(-)
create mode 100644 drivers/gpu/drm/xe/xe_trace_bo.c
create mode 100644 drivers/gpu/drm/xe/xe_trace_bo.h
create mode 100644 drivers/gpu/drm/xe/xe_trace_guc.c
create mode 100644 drivers/gpu/drm/xe/xe_trace_guc.h
--
2.34.1
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v4 1/6] drm/xe/trace: Extract bo, vm, vma traces
2024-06-06 0:18 [PATCH v4 0/6] Tracing cleanup and add mmio tracing Radhakrishna Sripada
@ 2024-06-06 0:18 ` Radhakrishna Sripada
2024-06-06 0:18 ` [PATCH v4 2/6] drm/xe/trace: Extract guc related traces Radhakrishna Sripada
` (7 subsequent siblings)
8 siblings, 0 replies; 11+ messages in thread
From: Radhakrishna Sripada @ 2024-06-06 0:18 UTC (permalink / raw)
To: intel-xe
Cc: gustavo.sousa, Radhakrishna Sripada, Jani Nikula, Lucas De Marchi
xe_trace.h is starting to get over crowded. Move the traces
related to bo, vm, vma's to its own file.
v2: Update year in License(Gustavo)
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com>
Suggested-by: Jani Nikula <jani.nikula@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
---
drivers/gpu/drm/xe/Makefile | 1 +
drivers/gpu/drm/xe/xe_bo.c | 2 +-
drivers/gpu/drm/xe/xe_gt_pagefault.c | 2 +-
drivers/gpu/drm/xe/xe_migrate.c | 2 +-
drivers/gpu/drm/xe/xe_trace.h | 212 ------------------------
drivers/gpu/drm/xe/xe_trace_bo.c | 9 +
drivers/gpu/drm/xe/xe_trace_bo.h | 236 +++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_vm.c | 2 +-
8 files changed, 250 insertions(+), 216 deletions(-)
create mode 100644 drivers/gpu/drm/xe/xe_trace_bo.c
create mode 100644 drivers/gpu/drm/xe/xe_trace_bo.h
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index 0c3e3adabb27..7c5e77fbfc1e 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -112,6 +112,7 @@ xe-y += xe_bb.o \
xe_tile.o \
xe_tile_sysfs.o \
xe_trace.o \
+ xe_trace_bo.o \
xe_ttm_sys_mgr.o \
xe_ttm_stolen_mgr.o \
xe_ttm_vram_mgr.o \
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 2bae01ce4e5b..74294f1b05bc 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -25,7 +25,7 @@
#include "xe_pm.h"
#include "xe_preempt_fence.h"
#include "xe_res_cursor.h"
-#include "xe_trace.h"
+#include "xe_trace_bo.h"
#include "xe_ttm_stolen_mgr.h"
#include "xe_vm.h"
diff --git a/drivers/gpu/drm/xe/xe_gt_pagefault.c b/drivers/gpu/drm/xe/xe_gt_pagefault.c
index 040dd142c49c..dead920de5f1 100644
--- a/drivers/gpu/drm/xe/xe_gt_pagefault.c
+++ b/drivers/gpu/drm/xe/xe_gt_pagefault.c
@@ -19,7 +19,7 @@
#include "xe_guc.h"
#include "xe_guc_ct.h"
#include "xe_migrate.h"
-#include "xe_trace.h"
+#include "xe_trace_bo.h"
#include "xe_vm.h"
struct pagefault {
diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
index cccffaf3db06..da3305834448 100644
--- a/drivers/gpu/drm/xe/xe_migrate.c
+++ b/drivers/gpu/drm/xe/xe_migrate.c
@@ -32,7 +32,7 @@
#include "xe_res_cursor.h"
#include "xe_sched_job.h"
#include "xe_sync.h"
-#include "xe_trace.h"
+#include "xe_trace_bo.h"
#include "xe_vm.h"
/**
diff --git a/drivers/gpu/drm/xe/xe_trace.h b/drivers/gpu/drm/xe/xe_trace.h
index 450f407c66e8..9493cc3d6d82 100644
--- a/drivers/gpu/drm/xe/xe_trace.h
+++ b/drivers/gpu/drm/xe/xe_trace.h
@@ -12,8 +12,6 @@
#include <linux/tracepoint.h>
#include <linux/types.h>
-#include "xe_bo.h"
-#include "xe_bo_types.h"
#include "xe_exec_queue_types.h"
#include "xe_gpu_scheduler_types.h"
#include "xe_gt_tlb_invalidation_types.h"
@@ -76,58 +74,6 @@ DEFINE_EVENT(xe_gt_tlb_invalidation_fence, xe_gt_tlb_invalidation_fence_timeout,
TP_ARGS(fence)
);
-DECLARE_EVENT_CLASS(xe_bo,
- TP_PROTO(struct xe_bo *bo),
- TP_ARGS(bo),
-
- TP_STRUCT__entry(
- __field(size_t, size)
- __field(u32, flags)
- __field(struct xe_vm *, vm)
- ),
-
- TP_fast_assign(
- __entry->size = bo->size;
- __entry->flags = bo->flags;
- __entry->vm = bo->vm;
- ),
-
- TP_printk("size=%zu, flags=0x%02x, vm=%p",
- __entry->size, __entry->flags, __entry->vm)
-);
-
-DEFINE_EVENT(xe_bo, xe_bo_cpu_fault,
- TP_PROTO(struct xe_bo *bo),
- TP_ARGS(bo)
-);
-
-TRACE_EVENT(xe_bo_move,
- TP_PROTO(struct xe_bo *bo, uint32_t new_placement, uint32_t old_placement,
- bool move_lacks_source),
- TP_ARGS(bo, new_placement, old_placement, move_lacks_source),
- TP_STRUCT__entry(
- __field(struct xe_bo *, bo)
- __field(size_t, size)
- __field(u32, new_placement)
- __field(u32, old_placement)
- __array(char, device_id, 12)
- __field(bool, move_lacks_source)
- ),
-
- TP_fast_assign(
- __entry->bo = bo;
- __entry->size = bo->size;
- __entry->new_placement = new_placement;
- __entry->old_placement = old_placement;
- strscpy(__entry->device_id, dev_name(xe_bo_device(__entry->bo)->drm.dev), 12);
- __entry->move_lacks_source = move_lacks_source;
- ),
- TP_printk("move_lacks_source:%s, migrate object %p [size %zu] from %s to %s device_id:%s",
- __entry->move_lacks_source ? "yes" : "no", __entry->bo, __entry->size,
- xe_mem_type_to_name[__entry->old_placement],
- xe_mem_type_to_name[__entry->new_placement], __entry->device_id)
-);
-
DECLARE_EVENT_CLASS(xe_exec_queue,
TP_PROTO(struct xe_exec_queue *q),
TP_ARGS(q),
@@ -386,164 +332,6 @@ DEFINE_EVENT(xe_hw_fence, xe_hw_fence_free,
TP_ARGS(fence)
);
-DECLARE_EVENT_CLASS(xe_vma,
- TP_PROTO(struct xe_vma *vma),
- TP_ARGS(vma),
-
- TP_STRUCT__entry(
- __field(struct xe_vma *, vma)
- __field(u32, asid)
- __field(u64, start)
- __field(u64, end)
- __field(u64, ptr)
- ),
-
- TP_fast_assign(
- __entry->vma = vma;
- __entry->asid = xe_vma_vm(vma)->usm.asid;
- __entry->start = xe_vma_start(vma);
- __entry->end = xe_vma_end(vma) - 1;
- __entry->ptr = xe_vma_userptr(vma);
- ),
-
- TP_printk("vma=%p, asid=0x%05x, start=0x%012llx, end=0x%012llx, userptr=0x%012llx,",
- __entry->vma, __entry->asid, __entry->start,
- __entry->end, __entry->ptr)
-)
-
-DEFINE_EVENT(xe_vma, xe_vma_flush,
- TP_PROTO(struct xe_vma *vma),
- TP_ARGS(vma)
-);
-
-DEFINE_EVENT(xe_vma, xe_vma_pagefault,
- TP_PROTO(struct xe_vma *vma),
- TP_ARGS(vma)
-);
-
-DEFINE_EVENT(xe_vma, xe_vma_acc,
- TP_PROTO(struct xe_vma *vma),
- TP_ARGS(vma)
-);
-
-DEFINE_EVENT(xe_vma, xe_vma_fail,
- TP_PROTO(struct xe_vma *vma),
- TP_ARGS(vma)
-);
-
-DEFINE_EVENT(xe_vma, xe_vma_bind,
- TP_PROTO(struct xe_vma *vma),
- TP_ARGS(vma)
-);
-
-DEFINE_EVENT(xe_vma, xe_vma_pf_bind,
- TP_PROTO(struct xe_vma *vma),
- TP_ARGS(vma)
-);
-
-DEFINE_EVENT(xe_vma, xe_vma_unbind,
- TP_PROTO(struct xe_vma *vma),
- TP_ARGS(vma)
-);
-
-DEFINE_EVENT(xe_vma, xe_vma_userptr_rebind_worker,
- TP_PROTO(struct xe_vma *vma),
- TP_ARGS(vma)
-);
-
-DEFINE_EVENT(xe_vma, xe_vma_userptr_rebind_exec,
- TP_PROTO(struct xe_vma *vma),
- TP_ARGS(vma)
-);
-
-DEFINE_EVENT(xe_vma, xe_vma_rebind_worker,
- TP_PROTO(struct xe_vma *vma),
- TP_ARGS(vma)
-);
-
-DEFINE_EVENT(xe_vma, xe_vma_rebind_exec,
- TP_PROTO(struct xe_vma *vma),
- TP_ARGS(vma)
-);
-
-DEFINE_EVENT(xe_vma, xe_vma_userptr_invalidate,
- TP_PROTO(struct xe_vma *vma),
- TP_ARGS(vma)
-);
-
-DEFINE_EVENT(xe_vma, xe_vma_invalidate,
- TP_PROTO(struct xe_vma *vma),
- TP_ARGS(vma)
-);
-
-DEFINE_EVENT(xe_vma, xe_vma_evict,
- TP_PROTO(struct xe_vma *vma),
- TP_ARGS(vma)
-);
-
-DEFINE_EVENT(xe_vma, xe_vma_userptr_invalidate_complete,
- TP_PROTO(struct xe_vma *vma),
- TP_ARGS(vma)
-);
-
-DECLARE_EVENT_CLASS(xe_vm,
- TP_PROTO(struct xe_vm *vm),
- TP_ARGS(vm),
-
- TP_STRUCT__entry(
- __field(struct xe_vm *, vm)
- __field(u32, asid)
- ),
-
- TP_fast_assign(
- __entry->vm = vm;
- __entry->asid = vm->usm.asid;
- ),
-
- TP_printk("vm=%p, asid=0x%05x", __entry->vm,
- __entry->asid)
-);
-
-DEFINE_EVENT(xe_vm, xe_vm_kill,
- TP_PROTO(struct xe_vm *vm),
- TP_ARGS(vm)
-);
-
-DEFINE_EVENT(xe_vm, xe_vm_create,
- TP_PROTO(struct xe_vm *vm),
- TP_ARGS(vm)
-);
-
-DEFINE_EVENT(xe_vm, xe_vm_free,
- TP_PROTO(struct xe_vm *vm),
- TP_ARGS(vm)
-);
-
-DEFINE_EVENT(xe_vm, xe_vm_cpu_bind,
- TP_PROTO(struct xe_vm *vm),
- TP_ARGS(vm)
-);
-
-DEFINE_EVENT(xe_vm, xe_vm_restart,
- TP_PROTO(struct xe_vm *vm),
- TP_ARGS(vm)
-);
-
-DEFINE_EVENT(xe_vm, xe_vm_rebind_worker_enter,
- TP_PROTO(struct xe_vm *vm),
- TP_ARGS(vm)
-);
-
-DEFINE_EVENT(xe_vm, xe_vm_rebind_worker_retry,
- TP_PROTO(struct xe_vm *vm),
- TP_ARGS(vm)
-);
-
-DEFINE_EVENT(xe_vm, xe_vm_rebind_worker_exit,
- TP_PROTO(struct xe_vm *vm),
- TP_ARGS(vm)
-);
-
/* GuC */
DECLARE_EVENT_CLASS(xe_guc_ct_flow_control,
TP_PROTO(u32 _head, u32 _tail, u32 size, u32 space, u32 len),
diff --git a/drivers/gpu/drm/xe/xe_trace_bo.c b/drivers/gpu/drm/xe/xe_trace_bo.c
new file mode 100644
index 000000000000..6d5e66ce4c50
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_trace_bo.c
@@ -0,0 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#ifndef __CHECKER__
+#define CREATE_TRACE_POINTS
+#include "xe_trace_bo.h"
+#endif
diff --git a/drivers/gpu/drm/xe/xe_trace_bo.h b/drivers/gpu/drm/xe/xe_trace_bo.h
new file mode 100644
index 000000000000..c8bd746d9d41
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_trace_bo.h
@@ -0,0 +1,236 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM xe
+
+#if !defined(_XE_TRACE_BO_H_) || defined(TRACE_HEADER_MULTI_READ)
+#define _XE_TRACE_BO_H_
+
+#include <linux/tracepoint.h>
+#include <linux/types.h>
+
+#include "xe_bo.h"
+#include "xe_bo_types.h"
+#include "xe_vm.h"
+
+DECLARE_EVENT_CLASS(xe_bo,
+ TP_PROTO(struct xe_bo *bo),
+ TP_ARGS(bo),
+
+ TP_STRUCT__entry(
+ __field(size_t, size)
+ __field(u32, flags)
+ __field(struct xe_vm *, vm)
+ ),
+
+ TP_fast_assign(
+ __entry->size = bo->size;
+ __entry->flags = bo->flags;
+ __entry->vm = bo->vm;
+ ),
+
+ TP_printk("size=%zu, flags=0x%02x, vm=%p",
+ __entry->size, __entry->flags, __entry->vm)
+);
+
+DEFINE_EVENT(xe_bo, xe_bo_cpu_fault,
+ TP_PROTO(struct xe_bo *bo),
+ TP_ARGS(bo)
+);
+
+TRACE_EVENT(xe_bo_move,
+ TP_PROTO(struct xe_bo *bo, uint32_t new_placement, uint32_t old_placement,
+ bool move_lacks_source),
+ TP_ARGS(bo, new_placement, old_placement, move_lacks_source),
+ TP_STRUCT__entry(
+ __field(struct xe_bo *, bo)
+ __field(size_t, size)
+ __field(u32, new_placement)
+ __field(u32, old_placement)
+ __array(char, device_id, 12)
+ __field(bool, move_lacks_source)
+ ),
+
+ TP_fast_assign(
+ __entry->bo = bo;
+ __entry->size = bo->size;
+ __entry->new_placement = new_placement;
+ __entry->old_placement = old_placement;
+ strscpy(__entry->device_id, dev_name(xe_bo_device(__entry->bo)->drm.dev), 12);
+ __entry->move_lacks_source = move_lacks_source;
+ ),
+ TP_printk("move_lacks_source:%s, migrate object %p [size %zu] from %s to %s device_id:%s",
+ __entry->move_lacks_source ? "yes" : "no", __entry->bo, __entry->size,
+ xe_mem_type_to_name[__entry->old_placement],
+ xe_mem_type_to_name[__entry->new_placement], __entry->device_id)
+);
+
+DECLARE_EVENT_CLASS(xe_vma,
+ TP_PROTO(struct xe_vma *vma),
+ TP_ARGS(vma),
+
+ TP_STRUCT__entry(
+ __field(struct xe_vma *, vma)
+ __field(u32, asid)
+ __field(u64, start)
+ __field(u64, end)
+ __field(u64, ptr)
+ ),
+
+ TP_fast_assign(
+ __entry->vma = vma;
+ __entry->asid = xe_vma_vm(vma)->usm.asid;
+ __entry->start = xe_vma_start(vma);
+ __entry->end = xe_vma_end(vma) - 1;
+ __entry->ptr = xe_vma_userptr(vma);
+ ),
+
+ TP_printk("vma=%p, asid=0x%05x, start=0x%012llx, end=0x%012llx, userptr=0x%012llx,",
+ __entry->vma, __entry->asid, __entry->start,
+ __entry->end, __entry->ptr)
+)
+
+DEFINE_EVENT(xe_vma, xe_vma_flush,
+ TP_PROTO(struct xe_vma *vma),
+ TP_ARGS(vma)
+);
+
+DEFINE_EVENT(xe_vma, xe_vma_pagefault,
+ TP_PROTO(struct xe_vma *vma),
+ TP_ARGS(vma)
+);
+
+DEFINE_EVENT(xe_vma, xe_vma_acc,
+ TP_PROTO(struct xe_vma *vma),
+ TP_ARGS(vma)
+);
+
+DEFINE_EVENT(xe_vma, xe_vma_fail,
+ TP_PROTO(struct xe_vma *vma),
+ TP_ARGS(vma)
+);
+
+DEFINE_EVENT(xe_vma, xe_vma_bind,
+ TP_PROTO(struct xe_vma *vma),
+ TP_ARGS(vma)
+);
+
+DEFINE_EVENT(xe_vma, xe_vma_pf_bind,
+ TP_PROTO(struct xe_vma *vma),
+ TP_ARGS(vma)
+);
+
+DEFINE_EVENT(xe_vma, xe_vma_unbind,
+ TP_PROTO(struct xe_vma *vma),
+ TP_ARGS(vma)
+);
+
+DEFINE_EVENT(xe_vma, xe_vma_userptr_rebind_worker,
+ TP_PROTO(struct xe_vma *vma),
+ TP_ARGS(vma)
+);
+
+DEFINE_EVENT(xe_vma, xe_vma_userptr_rebind_exec,
+ TP_PROTO(struct xe_vma *vma),
+ TP_ARGS(vma)
+);
+
+DEFINE_EVENT(xe_vma, xe_vma_rebind_worker,
+ TP_PROTO(struct xe_vma *vma),
+ TP_ARGS(vma)
+);
+
+DEFINE_EVENT(xe_vma, xe_vma_rebind_exec,
+ TP_PROTO(struct xe_vma *vma),
+ TP_ARGS(vma)
+);
+
+DEFINE_EVENT(xe_vma, xe_vma_userptr_invalidate,
+ TP_PROTO(struct xe_vma *vma),
+ TP_ARGS(vma)
+);
+
+DEFINE_EVENT(xe_vma, xe_vma_invalidate,
+ TP_PROTO(struct xe_vma *vma),
+ TP_ARGS(vma)
+);
+
+DEFINE_EVENT(xe_vma, xe_vma_evict,
+ TP_PROTO(struct xe_vma *vma),
+ TP_ARGS(vma)
+);
+
+DEFINE_EVENT(xe_vma, xe_vma_userptr_invalidate_complete,
+ TP_PROTO(struct xe_vma *vma),
+ TP_ARGS(vma)
+);
+
+DECLARE_EVENT_CLASS(xe_vm,
+ TP_PROTO(struct xe_vm *vm),
+ TP_ARGS(vm),
+
+ TP_STRUCT__entry(
+ __field(struct xe_vm *, vm)
+ __field(u32, asid)
+ ),
+
+ TP_fast_assign(
+ __entry->vm = vm;
+ __entry->asid = vm->usm.asid;
+ ),
+
+ TP_printk("vm=%p, asid=0x%05x", __entry->vm,
+ __entry->asid)
+);
+
+DEFINE_EVENT(xe_vm, xe_vm_kill,
+ TP_PROTO(struct xe_vm *vm),
+ TP_ARGS(vm)
+);
+
+DEFINE_EVENT(xe_vm, xe_vm_create,
+ TP_PROTO(struct xe_vm *vm),
+ TP_ARGS(vm)
+);
+
+DEFINE_EVENT(xe_vm, xe_vm_free,
+ TP_PROTO(struct xe_vm *vm),
+ TP_ARGS(vm)
+);
+
+DEFINE_EVENT(xe_vm, xe_vm_cpu_bind,
+ TP_PROTO(struct xe_vm *vm),
+ TP_ARGS(vm)
+);
+
+DEFINE_EVENT(xe_vm, xe_vm_restart,
+ TP_PROTO(struct xe_vm *vm),
+ TP_ARGS(vm)
+);
+
+DEFINE_EVENT(xe_vm, xe_vm_rebind_worker_enter,
+ TP_PROTO(struct xe_vm *vm),
+ TP_ARGS(vm)
+);
+
+DEFINE_EVENT(xe_vm, xe_vm_rebind_worker_retry,
+ TP_PROTO(struct xe_vm *vm),
+ TP_ARGS(vm)
+);
+
+DEFINE_EVENT(xe_vm, xe_vm_rebind_worker_exit,
+ TP_PROTO(struct xe_vm *vm),
+ TP_ARGS(vm)
+);
+
+#endif
+
+/* This part must be outside protection */
+#undef TRACE_INCLUDE_PATH
+#undef TRACE_INCLUDE_FILE
+#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/xe
+#define TRACE_INCLUDE_FILE xe_trace_bo
+#include <trace/define_trace.h>
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index 26b409e1b0f0..c2100d26b4e3 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -36,7 +36,7 @@
#include "xe_pt.h"
#include "xe_res_cursor.h"
#include "xe_sync.h"
-#include "xe_trace.h"
+#include "xe_trace_bo.h"
#include "xe_wa.h"
#include "xe_hmm.h"
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v4 2/6] drm/xe/trace: Extract guc related traces
2024-06-06 0:18 [PATCH v4 0/6] Tracing cleanup and add mmio tracing Radhakrishna Sripada
2024-06-06 0:18 ` [PATCH v4 1/6] drm/xe/trace: Extract bo, vm, vma traces Radhakrishna Sripada
@ 2024-06-06 0:18 ` Radhakrishna Sripada
2024-06-06 0:18 ` [PATCH v4 3/6] drm/xe/trace: Print device_id in xe_trace_bo events Radhakrishna Sripada
` (6 subsequent siblings)
8 siblings, 0 replies; 11+ messages in thread
From: Radhakrishna Sripada @ 2024-06-06 0:18 UTC (permalink / raw)
To: intel-xe
Cc: gustavo.sousa, Radhakrishna Sripada, Jani Nikula, Lucas De Marchi
xe_trace.h is starting to get over crowded. Move the traces
related to guc to its own file.
v2: Update year in License(Gustavo)
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com>
Suggested-by: Jani Nikula <jani.nikula@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
---
drivers/gpu/drm/xe/Makefile | 1 +
drivers/gpu/drm/xe/xe_guc_ct.c | 2 +-
drivers/gpu/drm/xe/xe_trace.h | 80 -----------------------
drivers/gpu/drm/xe/xe_trace_guc.c | 9 +++
drivers/gpu/drm/xe/xe_trace_guc.h | 103 ++++++++++++++++++++++++++++++
5 files changed, 114 insertions(+), 81 deletions(-)
create mode 100644 drivers/gpu/drm/xe/xe_trace_guc.c
create mode 100644 drivers/gpu/drm/xe/xe_trace_guc.h
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index 7c5e77fbfc1e..eb1943f81cf8 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -113,6 +113,7 @@ xe-y += xe_bb.o \
xe_tile_sysfs.o \
xe_trace.o \
xe_trace_bo.o \
+ xe_trace_guc.o \
xe_ttm_sys_mgr.o \
xe_ttm_stolen_mgr.o \
xe_ttm_vram_mgr.o \
diff --git a/drivers/gpu/drm/xe/xe_guc_ct.c b/drivers/gpu/drm/xe/xe_guc_ct.c
index c1f258348f5c..78f79df638d5 100644
--- a/drivers/gpu/drm/xe/xe_guc_ct.c
+++ b/drivers/gpu/drm/xe/xe_guc_ct.c
@@ -29,7 +29,7 @@
#include "xe_guc_submit.h"
#include "xe_map.h"
#include "xe_pm.h"
-#include "xe_trace.h"
+#include "xe_trace_guc.h"
/* Used when a CT send wants to block and / or receive data */
struct g2h_fence {
diff --git a/drivers/gpu/drm/xe/xe_trace.h b/drivers/gpu/drm/xe/xe_trace.h
index 9493cc3d6d82..8e00f0cdeb75 100644
--- a/drivers/gpu/drm/xe/xe_trace.h
+++ b/drivers/gpu/drm/xe/xe_trace.h
@@ -332,86 +332,6 @@ DEFINE_EVENT(xe_hw_fence, xe_hw_fence_free,
TP_ARGS(fence)
);
-/* GuC */
-DECLARE_EVENT_CLASS(xe_guc_ct_flow_control,
- TP_PROTO(u32 _head, u32 _tail, u32 size, u32 space, u32 len),
- TP_ARGS(_head, _tail, size, space, len),
-
- TP_STRUCT__entry(
- __field(u32, _head)
- __field(u32, _tail)
- __field(u32, size)
- __field(u32, space)
- __field(u32, len)
- ),
-
- TP_fast_assign(
- __entry->_head = _head;
- __entry->_tail = _tail;
- __entry->size = size;
- __entry->space = space;
- __entry->len = len;
- ),
-
- TP_printk("h2g flow control: head=%u, tail=%u, size=%u, space=%u, len=%u",
- __entry->_head, __entry->_tail, __entry->size,
- __entry->space, __entry->len)
-);
-
-DEFINE_EVENT(xe_guc_ct_flow_control, xe_guc_ct_h2g_flow_control,
- TP_PROTO(u32 _head, u32 _tail, u32 size, u32 space, u32 len),
- TP_ARGS(_head, _tail, size, space, len)
-);
-
-DEFINE_EVENT_PRINT(xe_guc_ct_flow_control, xe_guc_ct_g2h_flow_control,
- TP_PROTO(u32 _head, u32 _tail, u32 size, u32 space, u32 len),
- TP_ARGS(_head, _tail, size, space, len),
-
- TP_printk("g2h flow control: head=%u, tail=%u, size=%u, space=%u, len=%u",
- __entry->_head, __entry->_tail, __entry->size,
- __entry->space, __entry->len)
-);
-
-DECLARE_EVENT_CLASS(xe_guc_ctb,
- TP_PROTO(u8 gt_id, u32 action, u32 len, u32 _head, u32 tail),
- TP_ARGS(gt_id, action, len, _head, tail),
-
- TP_STRUCT__entry(
- __field(u8, gt_id)
- __field(u32, action)
- __field(u32, len)
- __field(u32, tail)
- __field(u32, _head)
- ),
-
- TP_fast_assign(
- __entry->gt_id = gt_id;
- __entry->action = action;
- __entry->len = len;
- __entry->tail = tail;
- __entry->_head = _head;
- ),
-
- TP_printk("gt%d: H2G CTB: action=0x%x, len=%d, tail=%d, head=%d\n",
- __entry->gt_id, __entry->action, __entry->len,
- __entry->tail, __entry->_head)
-);
-
-DEFINE_EVENT(xe_guc_ctb, xe_guc_ctb_h2g,
- TP_PROTO(u8 gt_id, u32 action, u32 len, u32 _head, u32 tail),
- TP_ARGS(gt_id, action, len, _head, tail)
-);
-
-DEFINE_EVENT_PRINT(xe_guc_ctb, xe_guc_ctb_g2h,
- TP_PROTO(u8 gt_id, u32 action, u32 len, u32 _head, u32 tail),
- TP_ARGS(gt_id, action, len, _head, tail),
-
- TP_printk("gt%d: G2H CTB: action=0x%x, len=%d, tail=%d, head=%d\n",
- __entry->gt_id, __entry->action, __entry->len,
- __entry->tail, __entry->_head)
-
-);
-
#endif
/* This part must be outside protection */
diff --git a/drivers/gpu/drm/xe/xe_trace_guc.c b/drivers/gpu/drm/xe/xe_trace_guc.c
new file mode 100644
index 000000000000..fcdf6888ff2f
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_trace_guc.c
@@ -0,0 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#ifndef __CHECKER__
+#define CREATE_TRACE_POINTS
+#include "xe_trace_guc.h"
+#endif
diff --git a/drivers/gpu/drm/xe/xe_trace_guc.h b/drivers/gpu/drm/xe/xe_trace_guc.h
new file mode 100644
index 000000000000..d6830ff21822
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_trace_guc.h
@@ -0,0 +1,103 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM xe
+
+#if !defined(_XE_TRACE_GUC_H_) || defined(TRACE_HEADER_MULTI_READ)
+#define _XE_TRACE_GUC_H_
+
+#include <linux/tracepoint.h>
+#include <linux/types.h>
+
+#include "xe_guc_exec_queue_types.h"
+
+DECLARE_EVENT_CLASS(xe_guc_ct_flow_control,
+ TP_PROTO(u32 _head, u32 _tail, u32 size, u32 space, u32 len),
+ TP_ARGS(_head, _tail, size, space, len),
+
+ TP_STRUCT__entry(
+ __field(u32, _head)
+ __field(u32, _tail)
+ __field(u32, size)
+ __field(u32, space)
+ __field(u32, len)
+ ),
+
+ TP_fast_assign(
+ __entry->_head = _head;
+ __entry->_tail = _tail;
+ __entry->size = size;
+ __entry->space = space;
+ __entry->len = len;
+ ),
+
+ TP_printk("h2g flow control: head=%u, tail=%u, size=%u, space=%u, len=%u",
+ __entry->_head, __entry->_tail, __entry->size,
+ __entry->space, __entry->len)
+);
+
+DEFINE_EVENT(xe_guc_ct_flow_control, xe_guc_ct_h2g_flow_control,
+ TP_PROTO(u32 _head, u32 _tail, u32 size, u32 space, u32 len),
+ TP_ARGS(_head, _tail, size, space, len)
+);
+
+DEFINE_EVENT_PRINT(xe_guc_ct_flow_control, xe_guc_ct_g2h_flow_control,
+ TP_PROTO(u32 _head, u32 _tail, u32 size, u32 space, u32 len),
+ TP_ARGS(_head, _tail, size, space, len),
+
+ TP_printk("g2h flow control: head=%u, tail=%u, size=%u, space=%u, len=%u",
+ __entry->_head, __entry->_tail, __entry->size,
+ __entry->space, __entry->len)
+);
+
+DECLARE_EVENT_CLASS(xe_guc_ctb,
+ TP_PROTO(u8 gt_id, u32 action, u32 len, u32 _head, u32 tail),
+ TP_ARGS(gt_id, action, len, _head, tail),
+
+ TP_STRUCT__entry(
+ __field(u8, gt_id)
+ __field(u32, action)
+ __field(u32, len)
+ __field(u32, tail)
+ __field(u32, _head)
+ ),
+
+ TP_fast_assign(
+ __entry->gt_id = gt_id;
+ __entry->action = action;
+ __entry->len = len;
+ __entry->tail = tail;
+ __entry->_head = _head;
+ ),
+
+ TP_printk("gt%d: H2G CTB: action=0x%x, len=%d, tail=%d, head=%d\n",
+ __entry->gt_id, __entry->action, __entry->len,
+ __entry->tail, __entry->_head)
+);
+
+DEFINE_EVENT(xe_guc_ctb, xe_guc_ctb_h2g,
+ TP_PROTO(u8 gt_id, u32 action, u32 len, u32 _head, u32 tail),
+ TP_ARGS(gt_id, action, len, _head, tail)
+);
+
+DEFINE_EVENT_PRINT(xe_guc_ctb, xe_guc_ctb_g2h,
+ TP_PROTO(u8 gt_id, u32 action, u32 len, u32 _head, u32 tail),
+ TP_ARGS(gt_id, action, len, _head, tail),
+
+ TP_printk("gt%d: G2H CTB: action=0x%x, len=%d, tail=%d, head=%d\n",
+ __entry->gt_id, __entry->action, __entry->len,
+ __entry->tail, __entry->_head)
+
+);
+
+#endif
+
+/* This part must be outside protection */
+#undef TRACE_INCLUDE_PATH
+#undef TRACE_INCLUDE_FILE
+#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/xe
+#define TRACE_INCLUDE_FILE xe_trace_guc
+#include <trace/define_trace.h>
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v4 3/6] drm/xe/trace: Print device_id in xe_trace_bo events
2024-06-06 0:18 [PATCH v4 0/6] Tracing cleanup and add mmio tracing Radhakrishna Sripada
2024-06-06 0:18 ` [PATCH v4 1/6] drm/xe/trace: Extract bo, vm, vma traces Radhakrishna Sripada
2024-06-06 0:18 ` [PATCH v4 2/6] drm/xe/trace: Extract guc related traces Radhakrishna Sripada
@ 2024-06-06 0:18 ` Radhakrishna Sripada
2024-06-06 0:18 ` [PATCH v4 4/6] drm/xe/trace: Print device_id in xe_trace_guc events Radhakrishna Sripada
` (5 subsequent siblings)
8 siblings, 0 replies; 11+ messages in thread
From: Radhakrishna Sripada @ 2024-06-06 0:18 UTC (permalink / raw)
To: intel-xe
Cc: gustavo.sousa, Radhakrishna Sripada, Ville Syrjälä,
Lucas De Marchi
In multi-gpu environments it is important to know the device
bo/vm belongs to. The tracing information includes the device_id
to indicate the device the event is associated with.
v2: Use variable sized variant to display dev name(Gustavo)
Suggested-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Gustavo Sousa <gustavo.sousa@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
---
drivers/gpu/drm/xe/xe_trace_bo.h | 30 +++++++++++++++++++++---------
1 file changed, 21 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_trace_bo.h b/drivers/gpu/drm/xe/xe_trace_bo.h
index c8bd746d9d41..b427baf2341a 100644
--- a/drivers/gpu/drm/xe/xe_trace_bo.h
+++ b/drivers/gpu/drm/xe/xe_trace_bo.h
@@ -9,6 +9,7 @@
#if !defined(_XE_TRACE_BO_H_) || defined(TRACE_HEADER_MULTI_READ)
#define _XE_TRACE_BO_H_
+#include <linux/string_helpers.h>
#include <linux/tracepoint.h>
#include <linux/types.h>
@@ -16,24 +17,31 @@
#include "xe_bo_types.h"
#include "xe_vm.h"
+#define __dev_name_bo(bo) dev_name(xe_bo_device((bo))->drm.dev)
+#define __dev_name_vm(vm) dev_name((vm)->xe->drm.dev)
+#define __dev_name_vma(vma) __dev_name_vm(xe_vma_vm(vma))
+
DECLARE_EVENT_CLASS(xe_bo,
TP_PROTO(struct xe_bo *bo),
TP_ARGS(bo),
TP_STRUCT__entry(
+ __string(dev, __dev_name_bo(bo))
__field(size_t, size)
__field(u32, flags)
__field(struct xe_vm *, vm)
),
TP_fast_assign(
+ __assign_str(dev, __dev_name_bo(bo));
__entry->size = bo->size;
__entry->flags = bo->flags;
__entry->vm = bo->vm;
),
- TP_printk("size=%zu, flags=0x%02x, vm=%p",
- __entry->size, __entry->flags, __entry->vm)
+ TP_printk("dev=%s, size=%zu, flags=0x%02x, vm=%p",
+ __get_str(dev), __entry->size,
+ __entry->flags, __entry->vm)
);
DEFINE_EVENT(xe_bo, xe_bo_cpu_fault,
@@ -50,7 +58,7 @@ TRACE_EVENT(xe_bo_move,
__field(size_t, size)
__field(u32, new_placement)
__field(u32, old_placement)
- __array(char, device_id, 12)
+ __string(device_id, __dev_name_bo(bo))
__field(bool, move_lacks_source)
),
@@ -59,13 +67,13 @@ TRACE_EVENT(xe_bo_move,
__entry->size = bo->size;
__entry->new_placement = new_placement;
__entry->old_placement = old_placement;
- strscpy(__entry->device_id, dev_name(xe_bo_device(__entry->bo)->drm.dev), 12);
+ __assign_str(device_id, __dev_name_bo(bo));
__entry->move_lacks_source = move_lacks_source;
),
TP_printk("move_lacks_source:%s, migrate object %p [size %zu] from %s to %s device_id:%s",
__entry->move_lacks_source ? "yes" : "no", __entry->bo, __entry->size,
xe_mem_type_to_name[__entry->old_placement],
- xe_mem_type_to_name[__entry->new_placement], __entry->device_id)
+ xe_mem_type_to_name[__entry->new_placement], __get_str(device_id))
);
DECLARE_EVENT_CLASS(xe_vma,
@@ -73,6 +81,7 @@ DECLARE_EVENT_CLASS(xe_vma,
TP_ARGS(vma),
TP_STRUCT__entry(
+ __string(dev, __dev_name_vma(vma))
__field(struct xe_vma *, vma)
__field(u32, asid)
__field(u64, start)
@@ -81,6 +90,7 @@ DECLARE_EVENT_CLASS(xe_vma,
),
TP_fast_assign(
+ __assign_str(dev, __dev_name_vma(vma));
__entry->vma = vma;
__entry->asid = xe_vma_vm(vma)->usm.asid;
__entry->start = xe_vma_start(vma);
@@ -88,8 +98,8 @@ DECLARE_EVENT_CLASS(xe_vma,
__entry->ptr = xe_vma_userptr(vma);
),
- TP_printk("vma=%p, asid=0x%05x, start=0x%012llx, end=0x%012llx, userptr=0x%012llx,",
- __entry->vma, __entry->asid, __entry->start,
+ TP_printk("dev=%s, vma=%p, asid=0x%05x, start=0x%012llx, end=0x%012llx, userptr=0x%012llx,",
+ __get_str(dev), __entry->vma, __entry->asid, __entry->start,
__entry->end, __entry->ptr)
)
@@ -173,17 +183,19 @@ DECLARE_EVENT_CLASS(xe_vm,
TP_ARGS(vm),
TP_STRUCT__entry(
+ __string(dev, __dev_name_vm(vm))
__field(struct xe_vm *, vm)
__field(u32, asid)
),
TP_fast_assign(
+ __assign_str(dev, __dev_name_vm(vm));
__entry->vm = vm;
__entry->asid = vm->usm.asid;
),
- TP_printk("vm=%p, asid=0x%05x", __entry->vm,
- __entry->asid)
+ TP_printk("dev=%s, vm=%p, asid=0x%05x", __get_str(dev),
+ __entry->vm, __entry->asid)
);
DEFINE_EVENT(xe_vm, xe_vm_kill,
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v4 4/6] drm/xe/trace: Print device_id in xe_trace_guc events
2024-06-06 0:18 [PATCH v4 0/6] Tracing cleanup and add mmio tracing Radhakrishna Sripada
` (2 preceding siblings ...)
2024-06-06 0:18 ` [PATCH v4 3/6] drm/xe/trace: Print device_id in xe_trace_bo events Radhakrishna Sripada
@ 2024-06-06 0:18 ` Radhakrishna Sripada
2024-06-06 0:18 ` [PATCH v4 5/6] drm/xe/trace: Print device_id in xe_trace events Radhakrishna Sripada
` (4 subsequent siblings)
8 siblings, 0 replies; 11+ messages in thread
From: Radhakrishna Sripada @ 2024-06-06 0:18 UTC (permalink / raw)
To: intel-xe
Cc: gustavo.sousa, Radhakrishna Sripada, Ville Syrjälä,
Lucas De Marchi
In multi-gpu environments it is important to know the device
guc txn belongs to. The tracing information includes the device_id
to indicate the device the event is associated with.
v2: Use variable sized variant to display dev name(Gustavo)
Suggested-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Gustavo Sousa <gustavo.sousa@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
---
drivers/gpu/drm/xe/xe_guc_ct.c | 11 +++----
drivers/gpu/drm/xe/xe_trace_guc.h | 48 ++++++++++++++++++-------------
2 files changed, 34 insertions(+), 25 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_guc_ct.c b/drivers/gpu/drm/xe/xe_guc_ct.c
index 78f79df638d5..ff3fd10cd417 100644
--- a/drivers/gpu/drm/xe/xe_guc_ct.c
+++ b/drivers/gpu/drm/xe/xe_guc_ct.c
@@ -528,7 +528,7 @@ static int h2g_write(struct xe_guc_ct *ct, const u32 *action, u32 len,
/* Update descriptor */
desc_write(xe, h2g, tail, h2g->info.tail);
- trace_xe_guc_ctb_h2g(gt->info.id, *(action - 1), full_len,
+ trace_xe_guc_ctb_h2g(xe, gt->info.id, *(action - 1), full_len,
desc_read(xe, h2g, head), h2g->info.tail);
return 0;
@@ -641,6 +641,7 @@ static int guc_ct_send_locked(struct xe_guc_ct *ct, const u32 *action, u32 len,
u32 g2h_len, u32 num_g2h,
struct g2h_fence *g2h_fence)
{
+ struct xe_device *xe = ct_to_xe(ct);
struct xe_gt *gt = ct_to_gt(ct);
struct drm_printer p = xe_gt_info_printer(gt);
unsigned int sleep_period_ms = 1;
@@ -668,7 +669,7 @@ static int guc_ct_send_locked(struct xe_guc_ct *ct, const u32 *action, u32 len,
if (sleep_period_ms == 1024)
goto broken;
- trace_xe_guc_ct_h2g_flow_control(h2g->info.head, h2g->info.tail,
+ trace_xe_guc_ct_h2g_flow_control(xe, h2g->info.head, h2g->info.tail,
h2g->info.size,
h2g->info.space,
len + GUC_CTB_HDR_LEN);
@@ -680,7 +681,7 @@ static int guc_ct_send_locked(struct xe_guc_ct *ct, const u32 *action, u32 len,
struct xe_device *xe = ct_to_xe(ct);
struct guc_ctb *g2h = &ct->ctbs.g2h;
- trace_xe_guc_ct_g2h_flow_control(g2h->info.head,
+ trace_xe_guc_ct_g2h_flow_control(xe, g2h->info.head,
desc_read(xe, g2h, tail),
g2h->info.size,
g2h->info.space,
@@ -1170,8 +1171,8 @@ static int g2h_read(struct xe_guc_ct *ct, u32 *msg, bool fast_path)
g2h->info.head = (head + avail) % g2h->info.size;
desc_write(xe, g2h, head, g2h->info.head);
- trace_xe_guc_ctb_g2h(ct_to_gt(ct)->info.id, action, len,
- g2h->info.head, tail);
+ trace_xe_guc_ctb_g2h(xe, ct_to_gt(ct)->info.id,
+ action, len, g2h->info.head, tail);
return len;
}
diff --git a/drivers/gpu/drm/xe/xe_trace_guc.h b/drivers/gpu/drm/xe/xe_trace_guc.h
index d6830ff21822..8f11e2df359c 100644
--- a/drivers/gpu/drm/xe/xe_trace_guc.h
+++ b/drivers/gpu/drm/xe/xe_trace_guc.h
@@ -9,16 +9,21 @@
#if !defined(_XE_TRACE_GUC_H_) || defined(TRACE_HEADER_MULTI_READ)
#define _XE_TRACE_GUC_H_
+#include <linux/string_helpers.h>
#include <linux/tracepoint.h>
#include <linux/types.h>
+#include "xe_device_types.h"
#include "xe_guc_exec_queue_types.h"
+#define __dev_name_xe(xe) dev_name((xe)->drm.dev)
+
DECLARE_EVENT_CLASS(xe_guc_ct_flow_control,
- TP_PROTO(u32 _head, u32 _tail, u32 size, u32 space, u32 len),
- TP_ARGS(_head, _tail, size, space, len),
+ TP_PROTO(struct xe_device *xe, u32 _head, u32 _tail, u32 size, u32 space, u32 len),
+ TP_ARGS(xe, _head, _tail, size, space, len),
TP_STRUCT__entry(
+ __string(dev, __dev_name_xe(xe))
__field(u32, _head)
__field(u32, _tail)
__field(u32, size)
@@ -27,6 +32,7 @@ DECLARE_EVENT_CLASS(xe_guc_ct_flow_control,
),
TP_fast_assign(
+ __assign_str(dev, __dev_name_xe(xe));
__entry->_head = _head;
__entry->_tail = _tail;
__entry->size = size;
@@ -34,30 +40,31 @@ DECLARE_EVENT_CLASS(xe_guc_ct_flow_control,
__entry->len = len;
),
- TP_printk("h2g flow control: head=%u, tail=%u, size=%u, space=%u, len=%u",
- __entry->_head, __entry->_tail, __entry->size,
+ TP_printk("dev=%s, h2g flow control: head=%u, tail=%u, size=%u, space=%u, len=%u",
+ __get_str(dev), __entry->_head, __entry->_tail, __entry->size,
__entry->space, __entry->len)
);
DEFINE_EVENT(xe_guc_ct_flow_control, xe_guc_ct_h2g_flow_control,
- TP_PROTO(u32 _head, u32 _tail, u32 size, u32 space, u32 len),
- TP_ARGS(_head, _tail, size, space, len)
+ TP_PROTO(struct xe_device *xe, u32 _head, u32 _tail, u32 size, u32 space, u32 len),
+ TP_ARGS(xe, _head, _tail, size, space, len)
);
DEFINE_EVENT_PRINT(xe_guc_ct_flow_control, xe_guc_ct_g2h_flow_control,
- TP_PROTO(u32 _head, u32 _tail, u32 size, u32 space, u32 len),
- TP_ARGS(_head, _tail, size, space, len),
+ TP_PROTO(struct xe_device *xe, u32 _head, u32 _tail, u32 size, u32 space, u32 len),
+ TP_ARGS(xe, _head, _tail, size, space, len),
- TP_printk("g2h flow control: head=%u, tail=%u, size=%u, space=%u, len=%u",
- __entry->_head, __entry->_tail, __entry->size,
+ TP_printk("dev=%s, g2h flow control: head=%u, tail=%u, size=%u, space=%u, len=%u",
+ __get_str(dev), __entry->_head, __entry->_tail, __entry->size,
__entry->space, __entry->len)
);
DECLARE_EVENT_CLASS(xe_guc_ctb,
- TP_PROTO(u8 gt_id, u32 action, u32 len, u32 _head, u32 tail),
- TP_ARGS(gt_id, action, len, _head, tail),
+ TP_PROTO(struct xe_device *xe, u8 gt_id, u32 action, u32 len, u32 _head, u32 tail),
+ TP_ARGS(xe, gt_id, action, len, _head, tail),
TP_STRUCT__entry(
+ __string(dev, __dev_name_xe(xe))
__field(u8, gt_id)
__field(u32, action)
__field(u32, len)
@@ -66,6 +73,7 @@ DECLARE_EVENT_CLASS(xe_guc_ctb,
),
TP_fast_assign(
+ __assign_str(dev, __dev_name_xe(xe));
__entry->gt_id = gt_id;
__entry->action = action;
__entry->len = len;
@@ -73,22 +81,22 @@ DECLARE_EVENT_CLASS(xe_guc_ctb,
__entry->_head = _head;
),
- TP_printk("gt%d: H2G CTB: action=0x%x, len=%d, tail=%d, head=%d\n",
- __entry->gt_id, __entry->action, __entry->len,
+ TP_printk("dev=%s, gt%d: H2G CTB: action=0x%x, len=%d, tail=%d, head=%d\n",
+ __get_str(dev), __entry->gt_id, __entry->action, __entry->len,
__entry->tail, __entry->_head)
);
DEFINE_EVENT(xe_guc_ctb, xe_guc_ctb_h2g,
- TP_PROTO(u8 gt_id, u32 action, u32 len, u32 _head, u32 tail),
- TP_ARGS(gt_id, action, len, _head, tail)
+ TP_PROTO(struct xe_device *xe, u8 gt_id, u32 action, u32 len, u32 _head, u32 tail),
+ TP_ARGS(xe, gt_id, action, len, _head, tail)
);
DEFINE_EVENT_PRINT(xe_guc_ctb, xe_guc_ctb_g2h,
- TP_PROTO(u8 gt_id, u32 action, u32 len, u32 _head, u32 tail),
- TP_ARGS(gt_id, action, len, _head, tail),
+ TP_PROTO(struct xe_device *xe, u8 gt_id, u32 action, u32 len, u32 _head, u32 tail),
+ TP_ARGS(xe, gt_id, action, len, _head, tail),
- TP_printk("gt%d: G2H CTB: action=0x%x, len=%d, tail=%d, head=%d\n",
- __entry->gt_id, __entry->action, __entry->len,
+ TP_printk("dev=%s, gt%d: G2H CTB: action=0x%x, len=%d, tail=%d, head=%d\n",
+ __get_str(dev), __entry->gt_id, __entry->action, __entry->len,
__entry->tail, __entry->_head)
);
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v4 5/6] drm/xe/trace: Print device_id in xe_trace events
2024-06-06 0:18 [PATCH v4 0/6] Tracing cleanup and add mmio tracing Radhakrishna Sripada
` (3 preceding siblings ...)
2024-06-06 0:18 ` [PATCH v4 4/6] drm/xe/trace: Print device_id in xe_trace_guc events Radhakrishna Sripada
@ 2024-06-06 0:18 ` Radhakrishna Sripada
2024-06-06 0:18 ` [PATCH v4 6/6] drm/xe: Add reg read/write trace Radhakrishna Sripada
` (3 subsequent siblings)
8 siblings, 0 replies; 11+ messages in thread
From: Radhakrishna Sripada @ 2024-06-06 0:18 UTC (permalink / raw)
To: intel-xe
Cc: gustavo.sousa, Radhakrishna Sripada, Ville Syrjälä,
Lucas De Marchi
In multi-gpu environments it is important to know the device
gt events belongs to. The tracing information includes the device_id
to indicate the device the event is associated with.
v2: Use variable sized variant to display dev name(Gustavo)
Suggested-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Gustavo Sousa <gustavo.sousa@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
---
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 27 +++++----
drivers/gpu/drm/xe/xe_pt.c | 8 ++-
drivers/gpu/drm/xe/xe_trace.h | 65 +++++++++++++--------
3 files changed, 60 insertions(+), 40 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
index 105797776a6c..23d397a246a8 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
@@ -22,6 +22,7 @@ static void xe_gt_tlb_fence_timeout(struct work_struct *work)
{
struct xe_gt *gt = container_of(work, struct xe_gt,
tlb_invalidation.fence_tdr.work);
+ struct xe_device *xe = gt_to_xe(gt);
struct xe_gt_tlb_invalidation_fence *fence, *next;
spin_lock_irq(>->tlb_invalidation.pending_lock);
@@ -33,7 +34,7 @@ static void xe_gt_tlb_fence_timeout(struct work_struct *work)
if (msecs_to_jiffies(since_inval_ms) < TLB_TIMEOUT)
break;
- trace_xe_gt_tlb_invalidation_fence_timeout(fence);
+ trace_xe_gt_tlb_invalidation_fence_timeout(xe, fence);
xe_gt_err(gt, "TLB invalidation fence timeout, seqno=%d recv=%d",
fence->seqno, gt->tlb_invalidation.seqno_recv);
@@ -71,18 +72,18 @@ int xe_gt_tlb_invalidation_init(struct xe_gt *gt)
}
static void
-__invalidation_fence_signal(struct xe_gt_tlb_invalidation_fence *fence)
+__invalidation_fence_signal(struct xe_device *xe, struct xe_gt_tlb_invalidation_fence *fence)
{
- trace_xe_gt_tlb_invalidation_fence_signal(fence);
+ trace_xe_gt_tlb_invalidation_fence_signal(xe, fence);
dma_fence_signal(&fence->base);
dma_fence_put(&fence->base);
}
static void
-invalidation_fence_signal(struct xe_gt_tlb_invalidation_fence *fence)
+invalidation_fence_signal(struct xe_device *xe, struct xe_gt_tlb_invalidation_fence *fence)
{
list_del(&fence->link);
- __invalidation_fence_signal(fence);
+ __invalidation_fence_signal(xe, fence);
}
/**
@@ -121,7 +122,7 @@ void xe_gt_tlb_invalidation_reset(struct xe_gt *gt)
list_for_each_entry_safe(fence, next,
>->tlb_invalidation.pending_fences, link)
- invalidation_fence_signal(fence);
+ invalidation_fence_signal(gt_to_xe(gt), fence);
spin_unlock_irq(>->tlb_invalidation.pending_lock);
mutex_unlock(>->uc.guc.ct.lock);
}
@@ -144,6 +145,7 @@ static int send_tlb_invalidation(struct xe_guc *guc,
u32 *action, int len)
{
struct xe_gt *gt = guc_to_gt(guc);
+ struct xe_device *xe = gt_to_xe(gt);
int seqno;
int ret;
@@ -157,7 +159,7 @@ static int send_tlb_invalidation(struct xe_guc *guc,
seqno = gt->tlb_invalidation.seqno;
if (fence) {
fence->seqno = seqno;
- trace_xe_gt_tlb_invalidation_fence_send(fence);
+ trace_xe_gt_tlb_invalidation_fence_send(xe, fence);
}
action[1] = seqno;
ret = xe_guc_ct_send_locked(&guc->ct, action, len,
@@ -171,7 +173,7 @@ static int send_tlb_invalidation(struct xe_guc *guc,
* we can just go ahead and signal the fence here.
*/
if (tlb_invalidation_seqno_past(gt, seqno)) {
- __invalidation_fence_signal(fence);
+ __invalidation_fence_signal(xe, fence);
} else {
fence->invalidation_time = ktime_get();
list_add_tail(&fence->link,
@@ -184,7 +186,7 @@ static int send_tlb_invalidation(struct xe_guc *guc,
}
spin_unlock_irq(>->tlb_invalidation.pending_lock);
} else if (ret < 0 && fence) {
- __invalidation_fence_signal(fence);
+ __invalidation_fence_signal(xe, fence);
}
if (!ret) {
gt->tlb_invalidation.seqno = (gt->tlb_invalidation.seqno + 1) %
@@ -294,7 +296,7 @@ int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
/* Execlists not supported */
if (gt_to_xe(gt)->info.force_execlist) {
if (fence)
- __invalidation_fence_signal(fence);
+ __invalidation_fence_signal(xe, fence);
return 0;
}
@@ -432,6 +434,7 @@ int xe_gt_tlb_invalidation_wait(struct xe_gt *gt, int seqno)
int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
{
struct xe_gt *gt = guc_to_gt(guc);
+ struct xe_device *xe = gt_to_xe(gt);
struct xe_gt_tlb_invalidation_fence *fence, *next;
unsigned long flags;
@@ -468,12 +471,12 @@ int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
list_for_each_entry_safe(fence, next,
>->tlb_invalidation.pending_fences, link) {
- trace_xe_gt_tlb_invalidation_fence_recv(fence);
+ trace_xe_gt_tlb_invalidation_fence_recv(xe, fence);
if (!tlb_invalidation_seqno_past(gt, fence->seqno))
break;
- invalidation_fence_signal(fence);
+ invalidation_fence_signal(xe, fence);
}
if (!list_empty(>->tlb_invalidation.pending_fences))
diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
index cd60c009b679..ade9e7a3a0ad 100644
--- a/drivers/gpu/drm/xe/xe_pt.c
+++ b/drivers/gpu/drm/xe/xe_pt.c
@@ -1137,8 +1137,9 @@ static void invalidation_fence_cb(struct dma_fence *fence,
{
struct invalidation_fence *ifence =
container_of(cb, struct invalidation_fence, cb);
+ struct xe_device *xe = gt_to_xe(ifence->gt);
- trace_xe_gt_tlb_invalidation_fence_cb(&ifence->base);
+ trace_xe_gt_tlb_invalidation_fence_cb(xe, &ifence->base);
if (!ifence->fence->error) {
queue_work(system_wq, &ifence->work);
} else {
@@ -1153,8 +1154,9 @@ static void invalidation_fence_work_func(struct work_struct *w)
{
struct invalidation_fence *ifence =
container_of(w, struct invalidation_fence, work);
+ struct xe_device *xe = gt_to_xe(ifence->gt);
- trace_xe_gt_tlb_invalidation_fence_work_func(&ifence->base);
+ trace_xe_gt_tlb_invalidation_fence_work_func(xe, &ifence->base);
xe_gt_tlb_invalidation_range(ifence->gt, &ifence->base, ifence->start,
ifence->end, ifence->asid);
}
@@ -1166,7 +1168,7 @@ static int invalidation_fence_init(struct xe_gt *gt,
{
int ret;
- trace_xe_gt_tlb_invalidation_fence_create(&ifence->base);
+ trace_xe_gt_tlb_invalidation_fence_create(gt_to_xe(gt), &ifence->base);
spin_lock_irq(>->tlb_invalidation.lock);
dma_fence_init(&ifence->base.base, &invalidation_fence_ops,
diff --git a/drivers/gpu/drm/xe/xe_trace.h b/drivers/gpu/drm/xe/xe_trace.h
index 8e00f0cdeb75..a22db52e88e3 100644
--- a/drivers/gpu/drm/xe/xe_trace.h
+++ b/drivers/gpu/drm/xe/xe_trace.h
@@ -9,6 +9,7 @@
#if !defined(_XE_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
#define _XE_TRACE_H_
+#include <linux/string_helpers.h>
#include <linux/tracepoint.h>
#include <linux/types.h>
@@ -20,58 +21,64 @@
#include "xe_sched_job.h"
#include "xe_vm.h"
+#define __dev_name_xe(xe) dev_name((xe)->drm.dev)
+#define __dev_name_gt(gt) __dev_name_xe(gt_to_xe((gt)))
+#define __dev_name_eq(q) __dev_name_gt((q)->gt)
+
DECLARE_EVENT_CLASS(xe_gt_tlb_invalidation_fence,
- TP_PROTO(struct xe_gt_tlb_invalidation_fence *fence),
- TP_ARGS(fence),
+ TP_PROTO(struct xe_device *xe, struct xe_gt_tlb_invalidation_fence *fence),
+ TP_ARGS(xe, fence),
TP_STRUCT__entry(
+ __string(dev, __dev_name_xe(xe))
__field(struct xe_gt_tlb_invalidation_fence *, fence)
__field(int, seqno)
),
TP_fast_assign(
+ __assign_str(dev, __dev_name_xe(xe));
__entry->fence = fence;
__entry->seqno = fence->seqno;
),
- TP_printk("fence=%p, seqno=%d",
- __entry->fence, __entry->seqno)
+ TP_printk("dev=%s, fence=%p, seqno=%d",
+ __get_str(dev), __entry->fence, __entry->seqno)
);
DEFINE_EVENT(xe_gt_tlb_invalidation_fence, xe_gt_tlb_invalidation_fence_create,
- TP_PROTO(struct xe_gt_tlb_invalidation_fence *fence),
- TP_ARGS(fence)
+ TP_PROTO(struct xe_device *xe, struct xe_gt_tlb_invalidation_fence *fence),
+ TP_ARGS(xe, fence)
);
DEFINE_EVENT(xe_gt_tlb_invalidation_fence,
xe_gt_tlb_invalidation_fence_work_func,
- TP_PROTO(struct xe_gt_tlb_invalidation_fence *fence),
- TP_ARGS(fence)
+ TP_PROTO(struct xe_device *xe, struct xe_gt_tlb_invalidation_fence *fence),
+ TP_ARGS(xe, fence)
);
DEFINE_EVENT(xe_gt_tlb_invalidation_fence, xe_gt_tlb_invalidation_fence_cb,
- TP_PROTO(struct xe_gt_tlb_invalidation_fence *fence),
- TP_ARGS(fence)
+ TP_PROTO(struct xe_device *xe, struct xe_gt_tlb_invalidation_fence *fence),
+ TP_ARGS(xe, fence)
);
DEFINE_EVENT(xe_gt_tlb_invalidation_fence, xe_gt_tlb_invalidation_fence_send,
- TP_PROTO(struct xe_gt_tlb_invalidation_fence *fence),
- TP_ARGS(fence)
+ TP_PROTO(struct xe_device *xe, struct xe_gt_tlb_invalidation_fence *fence),
+ TP_ARGS(xe, fence)
);
DEFINE_EVENT(xe_gt_tlb_invalidation_fence, xe_gt_tlb_invalidation_fence_recv,
- TP_PROTO(struct xe_gt_tlb_invalidation_fence *fence),
- TP_ARGS(fence)
+ TP_PROTO(struct xe_device *xe, struct xe_gt_tlb_invalidation_fence *fence),
+ TP_ARGS(xe, fence)
);
DEFINE_EVENT(xe_gt_tlb_invalidation_fence, xe_gt_tlb_invalidation_fence_signal,
- TP_PROTO(struct xe_gt_tlb_invalidation_fence *fence),
- TP_ARGS(fence)
+ TP_PROTO(struct xe_device *xe, struct xe_gt_tlb_invalidation_fence *fence),
+ TP_ARGS(xe, fence)
);
DEFINE_EVENT(xe_gt_tlb_invalidation_fence, xe_gt_tlb_invalidation_fence_timeout,
- TP_PROTO(struct xe_gt_tlb_invalidation_fence *fence),
- TP_ARGS(fence)
+ TP_PROTO(struct xe_device *xe, struct xe_gt_tlb_invalidation_fence *fence),
+ TP_ARGS(xe, fence)
);
DECLARE_EVENT_CLASS(xe_exec_queue,
@@ -79,6 +86,7 @@ DECLARE_EVENT_CLASS(xe_exec_queue,
TP_ARGS(q),
TP_STRUCT__entry(
+ __string(dev, __dev_name_eq(q))
__field(enum xe_engine_class, class)
__field(u32, logical_mask)
__field(u8, gt_id)
@@ -89,6 +97,7 @@ DECLARE_EVENT_CLASS(xe_exec_queue,
),
TP_fast_assign(
+ __assign_str(dev, __dev_name_eq(q));
__entry->class = q->class;
__entry->logical_mask = q->logical_mask;
__entry->gt_id = q->gt->info.id;
@@ -98,8 +107,8 @@ DECLARE_EVENT_CLASS(xe_exec_queue,
__entry->flags = q->flags;
),
- TP_printk("%d:0x%x, gt=%d, width=%d, guc_id=%d, guc_state=0x%x, flags=0x%x",
- __entry->class, __entry->logical_mask,
+ TP_printk("dev=%s, %d:0x%x, gt=%d, width=%d, guc_id=%d, guc_state=0x%x, flags=0x%x",
+ __get_str(dev), __entry->class, __entry->logical_mask,
__entry->gt_id, __entry->width, __entry->guc_id,
__entry->guc_state, __entry->flags)
);
@@ -199,6 +208,7 @@ DECLARE_EVENT_CLASS(xe_sched_job,
TP_ARGS(job),
TP_STRUCT__entry(
+ __string(dev, __dev_name_eq(job->q))
__field(u32, seqno)
__field(u32, lrc_seqno)
__field(u16, guc_id)
@@ -210,6 +220,7 @@ DECLARE_EVENT_CLASS(xe_sched_job,
),
TP_fast_assign(
+ __assign_str(dev, __dev_name_eq(job->q));
__entry->seqno = xe_sched_job_seqno(job);
__entry->lrc_seqno = xe_sched_job_lrc_seqno(job);
__entry->guc_id = job->q->guc->id;
@@ -221,8 +232,8 @@ DECLARE_EVENT_CLASS(xe_sched_job,
__entry->batch_addr = (u64)job->ptrs[0].batch_addr;
),
- TP_printk("fence=%p, seqno=%u, lrc_seqno=%u, guc_id=%d, batch_addr=0x%012llx, guc_state=0x%x, flags=0x%x, error=%d",
- __entry->fence, __entry->seqno,
+ TP_printk("dev=%s, fence=%p, seqno=%u, lrc_seqno=%u, guc_id=%d, batch_addr=0x%012llx, guc_state=0x%x, flags=0x%x, error=%d",
+ __get_str(dev), __entry->fence, __entry->seqno,
__entry->lrc_seqno, __entry->guc_id,
__entry->batch_addr, __entry->guc_state,
__entry->flags, __entry->error)
@@ -268,17 +279,19 @@ DECLARE_EVENT_CLASS(xe_sched_msg,
TP_ARGS(msg),
TP_STRUCT__entry(
+ __string(dev, __dev_name_eq(((struct xe_exec_queue *)msg->private_data)))
__field(u32, opcode)
__field(u16, guc_id)
),
TP_fast_assign(
+ __assign_str(dev, __dev_name_eq(((struct xe_exec_queue *)msg->private_data)));
__entry->opcode = msg->opcode;
__entry->guc_id =
((struct xe_exec_queue *)msg->private_data)->guc->id;
),
- TP_printk("guc_id=%d, opcode=%u", __entry->guc_id,
+ TP_printk("dev=%s, guc_id=%d, opcode=%u", __get_str(dev), __entry->guc_id,
__entry->opcode)
);
@@ -297,19 +310,21 @@ DECLARE_EVENT_CLASS(xe_hw_fence,
TP_ARGS(fence),
TP_STRUCT__entry(
+ __string(dev, __dev_name_gt(fence->ctx->gt))
__field(u64, ctx)
__field(u32, seqno)
__field(struct xe_hw_fence *, fence)
),
TP_fast_assign(
+ __assign_str(dev, __dev_name_gt(fence->ctx->gt));
__entry->ctx = fence->dma.context;
__entry->seqno = fence->dma.seqno;
__entry->fence = fence;
),
- TP_printk("ctx=0x%016llx, fence=%p, seqno=%u",
- __entry->ctx, __entry->fence, __entry->seqno)
+ TP_printk("dev=%s, ctx=0x%016llx, fence=%p, seqno=%u",
+ __get_str(dev), __entry->ctx, __entry->fence, __entry->seqno)
);
DEFINE_EVENT(xe_hw_fence, xe_hw_fence_create,
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v4 6/6] drm/xe: Add reg read/write trace
2024-06-06 0:18 [PATCH v4 0/6] Tracing cleanup and add mmio tracing Radhakrishna Sripada
` (4 preceding siblings ...)
2024-06-06 0:18 ` [PATCH v4 5/6] drm/xe/trace: Print device_id in xe_trace events Radhakrishna Sripada
@ 2024-06-06 0:18 ` Radhakrishna Sripada
2024-06-06 6:39 ` Lucas De Marchi
2024-06-06 0:24 ` ✓ CI.Patch_applied: success for Tracing cleanup and add mmio tracing (rev2) Patchwork
` (2 subsequent siblings)
8 siblings, 1 reply; 11+ messages in thread
From: Radhakrishna Sripada @ 2024-06-06 0:18 UTC (permalink / raw)
To: intel-xe; +Cc: gustavo.sousa, Radhakrishna Sripada
This will help debug register read/writes and provides
a way to trace all the mmio transactions.
v2: Fix kunit error
v3: Print devid to help in multi-gpu setup
v3: rebase and use variable sized variant to display
dev name(Gustavo)
Cc: Gustavo Sousa <gustavo.sousa@intel.com>
Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
---
drivers/gpu/drm/xe/xe_mmio.c | 24 ++++++++++++++++++++----
drivers/gpu/drm/xe/xe_trace.h | 28 ++++++++++++++++++++++++++++
2 files changed, 48 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_mmio.c b/drivers/gpu/drm/xe/xe_mmio.c
index 7962eeb9adb7..feba35ad6a3e 100644
--- a/drivers/gpu/drm/xe/xe_mmio.c
+++ b/drivers/gpu/drm/xe/xe_mmio.c
@@ -21,6 +21,8 @@
#include "xe_gt_sriov_vf.h"
#include "xe_macros.h"
#include "xe_sriov.h"
+#include "xe_tile.h"
+#include "xe_trace.h"
static void tiles_fini(void *arg)
{
@@ -124,16 +126,24 @@ u8 xe_mmio_read8(struct xe_gt *gt, struct xe_reg reg)
{
struct xe_tile *tile = gt_to_tile(gt);
u32 addr = xe_mmio_adjusted_addr(gt, reg.addr);
+ u8 val;
- return readb((reg.ext ? tile->mmio_ext.regs : tile->mmio.regs) + addr);
+ val = readb((reg.ext ? tile->mmio_ext.regs : tile->mmio.regs) + addr);
+ trace_xe_reg_rw(gt, false, addr, val, sizeof(val));
+
+ return val;
}
u16 xe_mmio_read16(struct xe_gt *gt, struct xe_reg reg)
{
struct xe_tile *tile = gt_to_tile(gt);
u32 addr = xe_mmio_adjusted_addr(gt, reg.addr);
+ u16 val;
+
+ val = readw((reg.ext ? tile->mmio_ext.regs : tile->mmio.regs) + addr);
+ trace_xe_reg_rw(gt, false, addr, val, sizeof(val));
- return readw((reg.ext ? tile->mmio_ext.regs : tile->mmio.regs) + addr);
+ return val;
}
void xe_mmio_write32(struct xe_gt *gt, struct xe_reg reg, u32 val)
@@ -141,6 +151,7 @@ void xe_mmio_write32(struct xe_gt *gt, struct xe_reg reg, u32 val)
struct xe_tile *tile = gt_to_tile(gt);
u32 addr = xe_mmio_adjusted_addr(gt, reg.addr);
+ trace_xe_reg_rw(gt, true, addr, val, sizeof(val));
writel(val, (reg.ext ? tile->mmio_ext.regs : tile->mmio.regs) + addr);
}
@@ -148,11 +159,16 @@ u32 xe_mmio_read32(struct xe_gt *gt, struct xe_reg reg)
{
struct xe_tile *tile = gt_to_tile(gt);
u32 addr = xe_mmio_adjusted_addr(gt, reg.addr);
+ u32 val;
if (!reg.vf && IS_SRIOV_VF(gt_to_xe(gt)))
- return xe_gt_sriov_vf_read32(gt, reg);
+ val = xe_gt_sriov_vf_read32(gt, reg);
+ else
+ val = readl((reg.ext ? tile->mmio_ext.regs : tile->mmio.regs) + addr);
+
+ trace_xe_reg_rw(gt, false, addr, val, sizeof(val));
- return readl((reg.ext ? tile->mmio_ext.regs : tile->mmio.regs) + addr);
+ return val;
}
u32 xe_mmio_rmw32(struct xe_gt *gt, struct xe_reg reg, u32 clr, u32 set)
diff --git a/drivers/gpu/drm/xe/xe_trace.h b/drivers/gpu/drm/xe/xe_trace.h
index a22db52e88e3..be0ba5104e58 100644
--- a/drivers/gpu/drm/xe/xe_trace.h
+++ b/drivers/gpu/drm/xe/xe_trace.h
@@ -347,6 +347,34 @@ DEFINE_EVENT(xe_hw_fence, xe_hw_fence_free,
TP_ARGS(fence)
);
+TRACE_EVENT(xe_reg_rw,
+ TP_PROTO(struct xe_gt *gt, bool write, u32 reg, u64 val, int len),
+
+ TP_ARGS(gt, write, reg, val, len),
+
+ TP_STRUCT__entry(
+ __string(dev, __dev_name_gt(gt))
+ __field(u64, val)
+ __field(u32, reg)
+ __field(u16, write)
+ __field(u16, len)
+ ),
+
+ TP_fast_assign(
+ __assign_str(dev, __dev_name_gt(gt));
+ __entry->val = (u64)val;
+ __entry->reg = reg;
+ __entry->write = write;
+ __entry->len = len;
+ ),
+
+ TP_printk("dev=%s, %s reg=0x%x, len=%d, val=(0x%x, 0x%x)",
+ __get_str(dev), __entry->write ? "write" : "read",
+ __entry->reg, __entry->len,
+ (u32)(__entry->val & 0xffffffff),
+ (u32)(__entry->val >> 32))
+);
+
#endif
/* This part must be outside protection */
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* ✓ CI.Patch_applied: success for Tracing cleanup and add mmio tracing (rev2)
2024-06-06 0:18 [PATCH v4 0/6] Tracing cleanup and add mmio tracing Radhakrishna Sripada
` (5 preceding siblings ...)
2024-06-06 0:18 ` [PATCH v4 6/6] drm/xe: Add reg read/write trace Radhakrishna Sripada
@ 2024-06-06 0:24 ` Patchwork
2024-06-06 0:24 ` ✗ CI.checkpatch: warning " Patchwork
2024-06-06 0:25 ` ✗ CI.KUnit: failure " Patchwork
8 siblings, 0 replies; 11+ messages in thread
From: Patchwork @ 2024-06-06 0:24 UTC (permalink / raw)
To: Radhakrishna Sripada; +Cc: intel-xe
== Series Details ==
Series: Tracing cleanup and add mmio tracing (rev2)
URL : https://patchwork.freedesktop.org/series/134258/
State : success
== Summary ==
=== Applying kernel patches on branch 'drm-tip' with base: ===
Base commit: a49454548363 drm-tip: 2024y-06m-05d-12h-34m-40s UTC integration manifest
=== git am output follows ===
Applying: drm/xe/trace: Extract bo, vm, vma traces
Applying: drm/xe/trace: Extract guc related traces
Applying: drm/xe/trace: Print device_id in xe_trace_bo events
Applying: drm/xe/trace: Print device_id in xe_trace_guc events
Applying: drm/xe/trace: Print device_id in xe_trace events
Applying: drm/xe: Add reg read/write trace
^ permalink raw reply [flat|nested] 11+ messages in thread
* ✗ CI.checkpatch: warning for Tracing cleanup and add mmio tracing (rev2)
2024-06-06 0:18 [PATCH v4 0/6] Tracing cleanup and add mmio tracing Radhakrishna Sripada
` (6 preceding siblings ...)
2024-06-06 0:24 ` ✓ CI.Patch_applied: success for Tracing cleanup and add mmio tracing (rev2) Patchwork
@ 2024-06-06 0:24 ` Patchwork
2024-06-06 0:25 ` ✗ CI.KUnit: failure " Patchwork
8 siblings, 0 replies; 11+ messages in thread
From: Patchwork @ 2024-06-06 0:24 UTC (permalink / raw)
To: Radhakrishna Sripada; +Cc: intel-xe
== Series Details ==
Series: Tracing cleanup and add mmio tracing (rev2)
URL : https://patchwork.freedesktop.org/series/134258/
State : warning
== Summary ==
+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt
Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master
51ce9f6cd981d42d7467409d7dbc559a450abc1e
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 3cff5385b720d876cec8cf9919abff28396842be
Author: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
Date: Wed Jun 5 17:18:14 2024 -0700
drm/xe: Add reg read/write trace
This will help debug register read/writes and provides
a way to trace all the mmio transactions.
v2: Fix kunit error
v3: Print devid to help in multi-gpu setup
v3: rebase and use variable sized variant to display
dev name(Gustavo)
Cc: Gustavo Sousa <gustavo.sousa@intel.com>
Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
+ /mt/dim checkpatch a494545483635d3d93d19e8f483f61e7d4198383 drm-intel
32ce818ed2c3 drm/xe/trace: Extract bo, vm, vma traces
Traceback (most recent call last):
File "scripts/spdxcheck.py", line 6, in <module>
from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
Traceback (most recent call last):
File "scripts/spdxcheck.py", line 6, in <module>
from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
-:305: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#305:
new file mode 100644
-:347: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#347: FILE: drivers/gpu/drm/xe/xe_trace_bo.h:23:
+ TP_STRUCT__entry(
-:353: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#353: FILE: drivers/gpu/drm/xe/xe_trace_bo.h:29:
+ TP_fast_assign(
-:372: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#372: FILE: drivers/gpu/drm/xe/xe_trace_bo.h:48:
+ TP_STRUCT__entry(
-:381: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#381: FILE: drivers/gpu/drm/xe/xe_trace_bo.h:57:
+ TP_fast_assign(
-:399: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#399: FILE: drivers/gpu/drm/xe/xe_trace_bo.h:75:
+ TP_STRUCT__entry(
-:407: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#407: FILE: drivers/gpu/drm/xe/xe_trace_bo.h:83:
+ TP_fast_assign(
-:499: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#499: FILE: drivers/gpu/drm/xe/xe_trace_bo.h:175:
+ TP_STRUCT__entry(
-:504: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#504: FILE: drivers/gpu/drm/xe/xe_trace_bo.h:180:
+ TP_fast_assign(
-:558: CHECK:SPACING: spaces preferred around that '/' (ctx:VxV)
#558: FILE: drivers/gpu/drm/xe/xe_trace_bo.h:234:
+#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/xe
^
-:558: CHECK:SPACING: spaces preferred around that '/' (ctx:VxV)
#558: FILE: drivers/gpu/drm/xe/xe_trace_bo.h:234:
+#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/xe
^
-:558: CHECK:SPACING: spaces preferred around that '/' (ctx:VxV)
#558: FILE: drivers/gpu/drm/xe/xe_trace_bo.h:234:
+#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/xe
^
-:558: CHECK:SPACING: spaces preferred around that '/' (ctx:VxV)
#558: FILE: drivers/gpu/drm/xe/xe_trace_bo.h:234:
+#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/xe
^
-:558: CHECK:SPACING: spaces preferred around that '/' (ctx:VxV)
#558: FILE: drivers/gpu/drm/xe/xe_trace_bo.h:234:
+#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/xe
^
total: 0 errors, 1 warnings, 13 checks, 514 lines checked
9263ef6c559c drm/xe/trace: Extract guc related traces
Traceback (most recent call last):
File "scripts/spdxcheck.py", line 6, in <module>
from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
Traceback (most recent call last):
File "scripts/spdxcheck.py", line 6, in <module>
from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
-:133: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#133:
new file mode 100644
-:173: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#173: FILE: drivers/gpu/drm/xe/xe_trace_guc.h:21:
+ TP_STRUCT__entry(
-:181: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#181: FILE: drivers/gpu/drm/xe/xe_trace_guc.h:29:
+ TP_fast_assign(
-:212: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#212: FILE: drivers/gpu/drm/xe/xe_trace_guc.h:60:
+ TP_STRUCT__entry(
-:220: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#220: FILE: drivers/gpu/drm/xe/xe_trace_guc.h:68:
+ TP_fast_assign(
-:253: CHECK:SPACING: spaces preferred around that '/' (ctx:VxV)
#253: FILE: drivers/gpu/drm/xe/xe_trace_guc.h:101:
+#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/xe
^
-:253: CHECK:SPACING: spaces preferred around that '/' (ctx:VxV)
#253: FILE: drivers/gpu/drm/xe/xe_trace_guc.h:101:
+#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/xe
^
-:253: CHECK:SPACING: spaces preferred around that '/' (ctx:VxV)
#253: FILE: drivers/gpu/drm/xe/xe_trace_guc.h:101:
+#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/xe
^
-:253: CHECK:SPACING: spaces preferred around that '/' (ctx:VxV)
#253: FILE: drivers/gpu/drm/xe/xe_trace_guc.h:101:
+#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/xe
^
-:253: CHECK:SPACING: spaces preferred around that '/' (ctx:VxV)
#253: FILE: drivers/gpu/drm/xe/xe_trace_guc.h:101:
+#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/xe
^
total: 0 errors, 1 warnings, 9 checks, 213 lines checked
10e06e0bd34f drm/xe/trace: Print device_id in xe_trace_bo events
d47381bed5f9 drm/xe/trace: Print device_id in xe_trace_guc events
-:90: WARNING:LONG_LINE: line length of 103 exceeds 100 columns
#90: FILE: drivers/gpu/drm/xe/xe_trace_guc.h:22:
+ TP_PROTO(struct xe_device *xe, u32 _head, u32 _tail, u32 size, u32 space, u32 len),
-:127: WARNING:LONG_LINE: line length of 102 exceeds 100 columns
#127: FILE: drivers/gpu/drm/xe/xe_trace_guc.h:54:
+ TP_PROTO(struct xe_device *xe, u32 _head, u32 _tail, u32 size, u32 space, u32 len),
-:140: WARNING:LONG_LINE: line length of 103 exceeds 100 columns
#140: FILE: drivers/gpu/drm/xe/xe_trace_guc.h:63:
+ TP_PROTO(struct xe_device *xe, u8 gt_id, u32 action, u32 len, u32 _head, u32 tail),
-:177: WARNING:LONG_LINE: line length of 102 exceeds 100 columns
#177: FILE: drivers/gpu/drm/xe/xe_trace_guc.h:95:
+ TP_PROTO(struct xe_device *xe, u8 gt_id, u32 action, u32 len, u32 _head, u32 tail),
total: 0 errors, 4 warnings, 0 checks, 149 lines checked
599c07ecda36 drm/xe/trace: Print device_id in xe_trace events
-:328: WARNING:LONG_LINE: line length of 102 exceeds 100 columns
#328: FILE: drivers/gpu/drm/xe/xe_trace.h:282:
+ __string(dev, __dev_name_eq(((struct xe_exec_queue *)msg->private_data)))
-:334: WARNING:LONG_LINE: line length of 106 exceeds 100 columns
#334: FILE: drivers/gpu/drm/xe/xe_trace.h:288:
+ __assign_str(dev, __dev_name_eq(((struct xe_exec_queue *)msg->private_data)));
total: 0 errors, 2 warnings, 0 checks, 313 lines checked
3cff5385b720 drm/xe: Add reg read/write trace
-:93: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#93: FILE: drivers/gpu/drm/xe/xe_trace.h:351:
+TRACE_EVENT(xe_reg_rw,
+ TP_PROTO(struct xe_gt *gt, bool write, u32 reg, u64 val, int len),
-:97: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#97: FILE: drivers/gpu/drm/xe/xe_trace.h:355:
+ TP_STRUCT__entry(
-:105: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#105: FILE: drivers/gpu/drm/xe/xe_trace.h:363:
+ TP_fast_assign(
total: 0 errors, 0 warnings, 3 checks, 93 lines checked
^ permalink raw reply [flat|nested] 11+ messages in thread
* ✗ CI.KUnit: failure for Tracing cleanup and add mmio tracing (rev2)
2024-06-06 0:18 [PATCH v4 0/6] Tracing cleanup and add mmio tracing Radhakrishna Sripada
` (7 preceding siblings ...)
2024-06-06 0:24 ` ✗ CI.checkpatch: warning " Patchwork
@ 2024-06-06 0:25 ` Patchwork
8 siblings, 0 replies; 11+ messages in thread
From: Patchwork @ 2024-06-06 0:25 UTC (permalink / raw)
To: Radhakrishna Sripada; +Cc: intel-xe
== Series Details ==
Series: Tracing cleanup and add mmio tracing (rev2)
URL : https://patchwork.freedesktop.org/series/134258/
State : failure
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
ERROR:root:../lib/iomap.c:156:5: warning: no previous prototype for ‘ioread64_lo_hi’ [-Wmissing-prototypes]
156 | u64 ioread64_lo_hi(const void __iomem *addr)
| ^~~~~~~~~~~~~~
../lib/iomap.c:163:5: warning: no previous prototype for ‘ioread64_hi_lo’ [-Wmissing-prototypes]
163 | u64 ioread64_hi_lo(const void __iomem *addr)
| ^~~~~~~~~~~~~~
../lib/iomap.c:170:5: warning: no previous prototype for ‘ioread64be_lo_hi’ [-Wmissing-prototypes]
170 | u64 ioread64be_lo_hi(const void __iomem *addr)
| ^~~~~~~~~~~~~~~~
../lib/iomap.c:178:5: warning: no previous prototype for ‘ioread64be_hi_lo’ [-Wmissing-prototypes]
178 | u64 ioread64be_hi_lo(const void __iomem *addr)
| ^~~~~~~~~~~~~~~~
../lib/iomap.c:264:6: warning: no previous prototype for ‘iowrite64_lo_hi’ [-Wmissing-prototypes]
264 | void iowrite64_lo_hi(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~
../lib/iomap.c:272:6: warning: no previous prototype for ‘iowrite64_hi_lo’ [-Wmissing-prototypes]
272 | void iowrite64_hi_lo(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~
../lib/iomap.c:280:6: warning: no previous prototype for ‘iowrite64be_lo_hi’ [-Wmissing-prototypes]
280 | void iowrite64be_lo_hi(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~~~
../lib/iomap.c:288:6: warning: no previous prototype for ‘iowrite64be_hi_lo’ [-Wmissing-prototypes]
288 | void iowrite64be_hi_lo(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~~~
In file included from ../include/trace/trace_events.h:419,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace_guc.h:111,
from ../drivers/gpu/drm/xe/xe_trace_guc.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_guc.h:46:1: error: macro "__assign_str" passed 2 arguments, but takes just 1
46 | );
| ^~
In file included from ../include/trace/trace_events.h:375,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace_guc.h:111,
from ../drivers/gpu/drm/xe/xe_trace_guc.c:8:
../include/trace/stages/stage6_event_callback.h:34: note: macro "__assign_str" defined here
34 | #define __assign_str(dst) \
|
In file included from ../include/trace/trace_events.h:419,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace.h:385,
from ../drivers/gpu/drm/xe/xe_trace.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:46:1: error: macro "__assign_str" passed 2 arguments, but takes just 1
46 | );
| ^~
In file included from ../include/trace/trace_events.h:375,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace.h:385,
from ../drivers/gpu/drm/xe/xe_trace.c:8:
../include/trace/stages/stage6_event_callback.h:34: note: macro "__assign_str" defined here
34 | #define __assign_str(dst) \
|
In file included from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace_guc.h:111,
from ../drivers/gpu/drm/xe/xe_trace_guc.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_guc.h: In function ‘trace_event_raw_event_xe_guc_ct_flow_control’:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_guc.h:35:7: error: ‘__assign_str’ undeclared (first use in this function)
35 | __assign_str(dev, __dev_name_xe(xe));
| ^~~~~~~~~~~~
../include/trace/trace_events.h:402:4: note: in definition of macro ‘DECLARE_EVENT_CLASS’
402 | { assign; } \
| ^~~~~~
../include/trace/../../drivers/gpu/drm/xe/xe_trace_guc.h:34:7: note: in expansion of macro ‘TP_fast_assign’
34 | TP_fast_assign(
| ^~~~~~~~~~~~~~
../include/trace/../../drivers/gpu/drm/xe/xe_trace_guc.h:35:7: note: each undeclared identifier is reported only once for each function it appears in
35 | __assign_str(dev, __dev_name_xe(xe));
| ^~~~~~~~~~~~
../include/trace/trace_events.h:402:4: note: in definition of macro ‘DECLARE_EVENT_CLASS’
402 | { assign; } \
| ^~~~~~
../include/trace/../../drivers/gpu/drm/xe/xe_trace_guc.h:34:7: note: in expansion of macro ‘TP_fast_assign’
34 | TP_fast_assign(
| ^~~~~~~~~~~~~~
In file included from ../include/trace/trace_events.h:419,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace_guc.h:111,
from ../drivers/gpu/drm/xe/xe_trace_guc.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_guc.h: At top level:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_guc.h:87:1: error: macro "__assign_str" passed 2 arguments, but takes just 1
87 | );
| ^~
In file included from ../include/trace/trace_events.h:375,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace_guc.h:111,
from ../drivers/gpu/drm/xe/xe_trace_guc.c:8:
../include/trace/stages/stage6_event_callback.h:34: note: macro "__assign_str" defined here
34 | #define __assign_str(dst) \
|
In file included from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace.h:385,
from ../drivers/gpu/drm/xe/xe_trace.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h: In function ‘trace_event_raw_event_xe_gt_tlb_invalidation_fence’:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:39:7: error: ‘__assign_str’ undeclared (first use in this function)
39 | __assign_str(dev, __dev_name_xe(xe));
| ^~~~~~~~~~~~
../include/trace/trace_events.h:402:4: note: in definition of macro ‘DECLARE_EVENT_CLASS’
402 | { assign; } \
| ^~~~~~
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:38:7: note: in expansion of macro ‘TP_fast_assign’
38 | TP_fast_assign(
| ^~~~~~~~~~~~~~
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:39:7: note: each undeclared identifier is reported only once for each function it appears in
39 | __assign_str(dev, __dev_name_xe(xe));
| ^~~~~~~~~~~~
../include/trace/trace_events.h:402:4: note: in definition of macro ‘DECLARE_EVENT_CLASS’
402 | { assign; } \
| ^~~~~~
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:38:7: note: in expansion of macro ‘TP_fast_assign’
38 | TP_fast_assign(
| ^~~~~~~~~~~~~~
In file included from ../include/trace/trace_events.h:419,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace.h:385,
from ../drivers/gpu/drm/xe/xe_trace.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h: At top level:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:114:1: error: macro "__assign_str" passed 2 arguments, but takes just 1
114 | );
| ^~
In file included from ../include/trace/trace_events.h:375,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace.h:385,
from ../drivers/gpu/drm/xe/xe_trace.c:8:
../include/trace/stages/stage6_event_callback.h:34: note: macro "__assign_str" defined here
34 | #define __assign_str(dst) \
|
In file included from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace_guc.h:111,
from ../drivers/gpu/drm/xe/xe_trace_guc.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_guc.h: In function ‘trace_event_raw_event_xe_guc_ctb’:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_guc.h:76:8: error: ‘__assign_str’ undeclared (first use in this function)
76 | __assign_str(dev, __dev_name_xe(xe));
| ^~~~~~~~~~~~
../include/trace/trace_events.h:402:4: note: in definition of macro ‘DECLARE_EVENT_CLASS’
402 | { assign; } \
| ^~~~~~
../include/trace/../../drivers/gpu/drm/xe/xe_trace_guc.h:75:7: note: in expansion of macro ‘TP_fast_assign’
75 | TP_fast_assign(
| ^~~~~~~~~~~~~~
In file included from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace.h:385,
from ../drivers/gpu/drm/xe/xe_trace.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h: In function ‘trace_event_raw_event_xe_exec_queue’:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:100:7: error: ‘__assign_str’ undeclared (first use in this function)
100 | __assign_str(dev, __dev_name_eq(q));
| ^~~~~~~~~~~~
../include/trace/trace_events.h:402:4: note: in definition of macro ‘DECLARE_EVENT_CLASS’
402 | { assign; } \
| ^~~~~~
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:99:7: note: in expansion of macro ‘TP_fast_assign’
99 | TP_fast_assign(
| ^~~~~~~~~~~~~~
In file included from ../include/trace/trace_events.h:419,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace.h:385,
from ../drivers/gpu/drm/xe/xe_trace.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h: At top level:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:240:1: error: macro "__assign_str" passed 2 arguments, but takes just 1
240 | );
| ^~
In file included from ../include/trace/trace_events.h:375,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace.h:385,
from ../drivers/gpu/drm/xe/xe_trace.c:8:
../include/trace/stages/stage6_event_callback.h:34: note: macro "__assign_str" defined here
34 | #define __assign_str(dst) \
|
make[7]: *** [../scripts/Makefile.build:244: drivers/gpu/drm/xe/xe_trace_guc.o] Error 1
make[7]: *** Waiting for unfinished jobs....
In file included from ../include/trace/trace_events.h:419,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace_bo.h:248,
from ../drivers/gpu/drm/xe/xe_trace_bo.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h:45:1: error: macro "__assign_str" passed 2 arguments, but takes just 1
45 | );
| ^~
In file included from ../include/trace/trace_events.h:375,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace_bo.h:248,
from ../drivers/gpu/drm/xe/xe_trace_bo.c:8:
../include/trace/stages/stage6_event_callback.h:34: note: macro "__assign_str" defined here
34 | #define __assign_str(dst) \
|
In file included from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace.h:385,
from ../drivers/gpu/drm/xe/xe_trace.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h: In function ‘trace_event_raw_event_xe_sched_job’:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:223:7: error: ‘__assign_str’ undeclared (first use in this function)
223 | __assign_str(dev, __dev_name_eq(job->q));
| ^~~~~~~~~~~~
../include/trace/trace_events.h:402:4: note: in definition of macro ‘DECLARE_EVENT_CLASS’
402 | { assign; } \
| ^~~~~~
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:222:7: note: in expansion of macro ‘TP_fast_assign’
222 | TP_fast_assign(
| ^~~~~~~~~~~~~~
In file included from ../include/trace/trace_events.h:419,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace.h:385,
from ../drivers/gpu/drm/xe/xe_trace.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h: At top level:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:296:1: error: macro "__assign_str" passed 2 arguments, but takes just 1
296 | );
| ^~
In file included from ../include/trace/trace_events.h:375,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace.h:385,
from ../drivers/gpu/drm/xe/xe_trace.c:8:
../include/trace/stages/stage6_event_callback.h:34: note: macro "__assign_str" defined here
34 | #define __assign_str(dst) \
|
In file included from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace_bo.h:248,
from ../drivers/gpu/drm/xe/xe_trace_bo.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h: In function ‘trace_event_raw_event_xe_bo’:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h:36:7: error: ‘__assign_str’ undeclared (first use in this function)
36 | __assign_str(dev, __dev_name_bo(bo));
| ^~~~~~~~~~~~
../include/trace/trace_events.h:402:4: note: in definition of macro ‘DECLARE_EVENT_CLASS’
402 | { assign; } \
| ^~~~~~
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h:35:7: note: in expansion of macro ‘TP_fast_assign’
35 | TP_fast_assign(
| ^~~~~~~~~~~~~~
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h:36:7: note: each undeclared identifier is reported only once for each function it appears in
36 | __assign_str(dev, __dev_name_bo(bo));
| ^~~~~~~~~~~~
../include/trace/trace_events.h:402:4: note: in definition of macro ‘DECLARE_EVENT_CLASS’
402 | { assign; } \
| ^~~~~~
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h:35:7: note: in expansion of macro ‘TP_fast_assign’
35 | TP_fast_assign(
| ^~~~~~~~~~~~~~
In file included from ../include/trace/trace_events.h:419,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace_bo.h:248,
from ../drivers/gpu/drm/xe/xe_trace_bo.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h: At top level:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h:77:1: error: macro "__assign_str" passed 2 arguments, but takes just 1
77 | );
| ^~
In file included from ../include/trace/trace_events.h:375,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace_bo.h:248,
from ../drivers/gpu/drm/xe/xe_trace_bo.c:8:
../include/trace/stages/stage6_event_callback.h:34: note: macro "__assign_str" defined here
34 | #define __assign_str(dst) \
|
In file included from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace.h:385,
from ../drivers/gpu/drm/xe/xe_trace.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h: In function ‘trace_event_raw_event_xe_sched_msg’:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:288:8: error: ‘__assign_str’ undeclared (first use in this function)
288 | __assign_str(dev, __dev_name_eq(((struct xe_exec_queue *)msg->private_data)));
| ^~~~~~~~~~~~
../include/trace/trace_events.h:402:4: note: in definition of macro ‘DECLARE_EVENT_CLASS’
402 | { assign; } \
| ^~~~~~
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:287:7: note: in expansion of macro ‘TP_fast_assign’
287 | TP_fast_assign(
| ^~~~~~~~~~~~~~
In file included from ../include/trace/trace_events.h:419,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace.h:385,
from ../drivers/gpu/drm/xe/xe_trace.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h: At top level:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:328:1: error: macro "__assign_str" passed 2 arguments, but takes just 1
328 | );
| ^~
In file included from ../include/trace/trace_events.h:375,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace.h:385,
from ../drivers/gpu/drm/xe/xe_trace.c:8:
../include/trace/stages/stage6_event_callback.h:34: note: macro "__assign_str" defined here
34 | #define __assign_str(dst) \
|
In file included from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace_bo.h:248,
from ../drivers/gpu/drm/xe/xe_trace_bo.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h: In function ‘trace_event_raw_event_xe_bo_move’:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h:70:6: error: ‘__assign_str’ undeclared (first use in this function)
70 | __assign_str(device_id, __dev_name_bo(bo));
| ^~~~~~~~~~~~
../include/trace/trace_events.h:402:4: note: in definition of macro ‘DECLARE_EVENT_CLASS’
402 | { assign; } \
| ^~~~~~
../include/trace/trace_events.h:44:9: note: in expansion of macro ‘PARAMS’
44 | PARAMS(assign), \
| ^~~~~~
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h:52:1: note: in expansion of macro ‘TRACE_EVENT’
52 | TRACE_EVENT(xe_bo_move,
| ^~~~~~~~~~~
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h:65:6: note: in expansion of macro ‘TP_fast_assign’
65 | TP_fast_assign(
| ^~~~~~~~~~~~~~
In file included from ../include/trace/trace_events.h:419,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace_bo.h:248,
from ../drivers/gpu/drm/xe/xe_trace_bo.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h: At top level:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h:104:1: error: macro "__assign_str" passed 2 arguments, but takes just 1
104 | )
| ^
In file included from ../include/trace/trace_events.h:375,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace_bo.h:248,
from ../drivers/gpu/drm/xe/xe_trace_bo.c:8:
../include/trace/stages/stage6_event_callback.h:34: note: macro "__assign_str" defined here
34 | #define __assign_str(dst) \
|
In file included from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace.h:385,
from ../drivers/gpu/drm/xe/xe_trace.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h: In function ‘trace_event_raw_event_xe_hw_fence’:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:320:7: error: ‘__assign_str’ undeclared (first use in this function)
320 | __assign_str(dev, __dev_name_gt(fence->ctx->gt));
| ^~~~~~~~~~~~
../include/trace/trace_events.h:402:4: note: in definition of macro ‘DECLARE_EVENT_CLASS’
402 | { assign; } \
| ^~~~~~
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:319:7: note: in expansion of macro ‘TP_fast_assign’
319 | TP_fast_assign(
| ^~~~~~~~~~~~~~
In file included from ../include/trace/trace_events.h:419,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace.h:385,
from ../drivers/gpu/drm/xe/xe_trace.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h: At top level:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:376:1: error: macro "__assign_str" passed 2 arguments, but takes just 1
376 | );
| ^~
In file included from ../include/trace/trace_events.h:375,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace.h:385,
from ../drivers/gpu/drm/xe/xe_trace.c:8:
../include/trace/stages/stage6_event_callback.h:34: note: macro "__assign_str" defined here
34 | #define __assign_str(dst) \
|
In file included from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace_bo.h:248,
from ../drivers/gpu/drm/xe/xe_trace_bo.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h: In function ‘trace_event_raw_event_xe_vma’:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h:93:7: error: ‘__assign_str’ undeclared (first use in this function)
93 | __assign_str(dev, __dev_name_vma(vma));
| ^~~~~~~~~~~~
../include/trace/trace_events.h:402:4: note: in definition of macro ‘DECLARE_EVENT_CLASS’
402 | { assign; } \
| ^~~~~~
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h:92:7: note: in expansion of macro ‘TP_fast_assign’
92 | TP_fast_assign(
| ^~~~~~~~~~~~~~
In file included from ../include/trace/trace_events.h:419,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace_bo.h:248,
from ../drivers/gpu/drm/xe/xe_trace_bo.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h: At top level:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h:199:1: error: macro "__assign_str" passed 2 arguments, but takes just 1
199 | );
| ^~
In file included from ../include/trace/trace_events.h:375,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace_bo.h:248,
from ../drivers/gpu/drm/xe/xe_trace_bo.c:8:
../include/trace/stages/stage6_event_callback.h:34: note: macro "__assign_str" defined here
34 | #define __assign_str(dst) \
|
In file included from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace.h:385,
from ../drivers/gpu/drm/xe/xe_trace.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h: In function ‘trace_event_raw_event_xe_reg_rw’:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:364:3: error: ‘__assign_str’ undeclared (first use in this function)
364 | __assign_str(dev, __dev_name_gt(gt));
| ^~~~~~~~~~~~
../include/trace/trace_events.h:402:4: note: in definition of macro ‘DECLARE_EVENT_CLASS’
402 | { assign; } \
| ^~~~~~
../include/trace/trace_events.h:44:9: note: in expansion of macro ‘PARAMS’
44 | PARAMS(assign), \
| ^~~~~~
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:350:1: note: in expansion of macro ‘TRACE_EVENT’
350 | TRACE_EVENT(xe_reg_rw,
| ^~~~~~~~~~~
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:363:2: note: in expansion of macro ‘TP_fast_assign’
363 | TP_fast_assign(
| ^~~~~~~~~~~~~~
In file included from ../include/trace/trace_events.h:469,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace.h:385,
from ../drivers/gpu/drm/xe/xe_trace.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h: At top level:
../include/trace/../../drivers/gpu/drm/xe/xe_trace.h:376:1: error: macro "__assign_str" passed 2 arguments, but takes just 1
376 | );
| ^~
In file included from ../include/trace/trace_events.h:375,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace.h:385,
from ../drivers/gpu/drm/xe/xe_trace.c:8:
../include/trace/stages/stage6_event_callback.h:34: note: macro "__assign_str" defined here
34 | #define __assign_str(dst) \
|
In file included from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace_bo.h:248,
from ../drivers/gpu/drm/xe/xe_trace_bo.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h: In function ‘trace_event_raw_event_xe_vm’:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h:192:7: error: ‘__assign_str’ undeclared (first use in this function)
192 | __assign_str(dev, __dev_name_vm(vm));
| ^~~~~~~~~~~~
../include/trace/trace_events.h:402:4: note: in definition of macro ‘DECLARE_EVENT_CLASS’
402 | { assign; } \
| ^~~~~~
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h:191:7: note: in expansion of macro ‘TP_fast_assign’
191 | TP_fast_assign(
| ^~~~~~~~~~~~~~
In file included from ../include/trace/trace_events.h:469,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace_bo.h:248,
from ../drivers/gpu/drm/xe/xe_trace_bo.c:8:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h: At top level:
../include/trace/../../drivers/gpu/drm/xe/xe_trace_bo.h:77:1: error: macro "__assign_str" passed 2 arguments, but takes just 1
77 | );
| ^~
In file included from ../include/trace/trace_events.h:375,
from ../include/trace/define_trace.h:102,
from ../drivers/gpu/drm/xe/xe_trace_bo.h:248,
from ../drivers/gpu/drm/xe/xe_trace_bo.c:8:
../include/trace/stages/stage6_event_callback.h:34: note: macro "__assign_str" defined here
34 | #define __assign_str(dst) \
|
make[7]: *** [../scripts/Makefile.build:244: drivers/gpu/drm/xe/xe_trace.o] Error 1
make[7]: *** [../scripts/Makefile.build:244: drivers/gpu/drm/xe/xe_trace_bo.o] Error 1
make[6]: *** [../scripts/Makefile.build:485: drivers/gpu/drm/xe] Error 2
make[5]: *** [../scripts/Makefile.build:485: drivers/gpu/drm] Error 2
make[4]: *** [../scripts/Makefile.build:485: drivers/gpu] Error 2
make[3]: *** [../scripts/Makefile.build:485: drivers] Error 2
make[2]: *** [/kernel/Makefile:1934: .] Error 2
make[1]: *** [/kernel/Makefile:240: __sub-make] Error 2
make: *** [Makefile:240: __sub-make] Error 2
[00:24:39] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[00:24:44] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v4 6/6] drm/xe: Add reg read/write trace
2024-06-06 0:18 ` [PATCH v4 6/6] drm/xe: Add reg read/write trace Radhakrishna Sripada
@ 2024-06-06 6:39 ` Lucas De Marchi
0 siblings, 0 replies; 11+ messages in thread
From: Lucas De Marchi @ 2024-06-06 6:39 UTC (permalink / raw)
To: Radhakrishna Sripada; +Cc: intel-xe, gustavo.sousa
On Wed, Jun 05, 2024 at 05:18:14PM GMT, Radhakrishna Sripada wrote:
>This will help debug register read/writes and provides
>a way to trace all the mmio transactions.
>
>v2: Fix kunit error
>v3: Print devid to help in multi-gpu setup
>v3: rebase and use variable sized variant to display
> dev name(Gustavo)
>
>Cc: Gustavo Sousa <gustavo.sousa@intel.com>
>Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
>---
> drivers/gpu/drm/xe/xe_mmio.c | 24 ++++++++++++++++++++----
> drivers/gpu/drm/xe/xe_trace.h | 28 ++++++++++++++++++++++++++++
> 2 files changed, 48 insertions(+), 4 deletions(-)
>
>diff --git a/drivers/gpu/drm/xe/xe_mmio.c b/drivers/gpu/drm/xe/xe_mmio.c
>index 7962eeb9adb7..feba35ad6a3e 100644
>--- a/drivers/gpu/drm/xe/xe_mmio.c
>+++ b/drivers/gpu/drm/xe/xe_mmio.c
>@@ -21,6 +21,8 @@
> #include "xe_gt_sriov_vf.h"
> #include "xe_macros.h"
> #include "xe_sriov.h"
>+#include "xe_tile.h"
>+#include "xe_trace.h"
>
> static void tiles_fini(void *arg)
> {
>@@ -124,16 +126,24 @@ u8 xe_mmio_read8(struct xe_gt *gt, struct xe_reg reg)
> {
> struct xe_tile *tile = gt_to_tile(gt);
> u32 addr = xe_mmio_adjusted_addr(gt, reg.addr);
>+ u8 val;
>
>- return readb((reg.ext ? tile->mmio_ext.regs : tile->mmio.regs) + addr);
>+ val = readb((reg.ext ? tile->mmio_ext.regs : tile->mmio.regs) + addr);
>+ trace_xe_reg_rw(gt, false, addr, val, sizeof(val));
>+
>+ return val;
> }
>
> u16 xe_mmio_read16(struct xe_gt *gt, struct xe_reg reg)
> {
> struct xe_tile *tile = gt_to_tile(gt);
> u32 addr = xe_mmio_adjusted_addr(gt, reg.addr);
>+ u16 val;
>+
>+ val = readw((reg.ext ? tile->mmio_ext.regs : tile->mmio.regs) + addr);
>+ trace_xe_reg_rw(gt, false, addr, val, sizeof(val));
>
>- return readw((reg.ext ? tile->mmio_ext.regs : tile->mmio.regs) + addr);
>+ return val;
> }
>
> void xe_mmio_write32(struct xe_gt *gt, struct xe_reg reg, u32 val)
>@@ -141,6 +151,7 @@ void xe_mmio_write32(struct xe_gt *gt, struct xe_reg reg, u32 val)
> struct xe_tile *tile = gt_to_tile(gt);
> u32 addr = xe_mmio_adjusted_addr(gt, reg.addr);
>
>+ trace_xe_reg_rw(gt, true, addr, val, sizeof(val));
> writel(val, (reg.ext ? tile->mmio_ext.regs : tile->mmio.regs) + addr);
> }
>
>@@ -148,11 +159,16 @@ u32 xe_mmio_read32(struct xe_gt *gt, struct xe_reg reg)
> {
> struct xe_tile *tile = gt_to_tile(gt);
> u32 addr = xe_mmio_adjusted_addr(gt, reg.addr);
>+ u32 val;
>
> if (!reg.vf && IS_SRIOV_VF(gt_to_xe(gt)))
>- return xe_gt_sriov_vf_read32(gt, reg);
>+ val = xe_gt_sriov_vf_read32(gt, reg);
>+ else
>+ val = readl((reg.ext ? tile->mmio_ext.regs : tile->mmio.regs) + addr);
>+
>+ trace_xe_reg_rw(gt, false, addr, val, sizeof(val));
>
>- return readl((reg.ext ? tile->mmio_ext.regs : tile->mmio.regs) + addr);
>+ return val;
> }
>
> u32 xe_mmio_rmw32(struct xe_gt *gt, struct xe_reg reg, u32 clr, u32 set)
>diff --git a/drivers/gpu/drm/xe/xe_trace.h b/drivers/gpu/drm/xe/xe_trace.h
>index a22db52e88e3..be0ba5104e58 100644
>--- a/drivers/gpu/drm/xe/xe_trace.h
>+++ b/drivers/gpu/drm/xe/xe_trace.h
>@@ -347,6 +347,34 @@ DEFINE_EVENT(xe_hw_fence, xe_hw_fence_free,
> TP_ARGS(fence)
> );
>
>+TRACE_EVENT(xe_reg_rw,
>+ TP_PROTO(struct xe_gt *gt, bool write, u32 reg, u64 val, int len),
>+
>+ TP_ARGS(gt, write, reg, val, len),
>+
>+ TP_STRUCT__entry(
>+ __string(dev, __dev_name_gt(gt))
>+ __field(u64, val)
>+ __field(u32, reg)
>+ __field(u16, write)
>+ __field(u16, len)
>+ ),
>+
>+ TP_fast_assign(
>+ __assign_str(dev, __dev_name_gt(gt));
after commit 2c92ca849fcc6ee7d0c358e9959abc9f58661aea, __assign_str()
has only 1 param.
Lucas De Marchi
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2024-06-06 6:40 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-06 0:18 [PATCH v4 0/6] Tracing cleanup and add mmio tracing Radhakrishna Sripada
2024-06-06 0:18 ` [PATCH v4 1/6] drm/xe/trace: Extract bo, vm, vma traces Radhakrishna Sripada
2024-06-06 0:18 ` [PATCH v4 2/6] drm/xe/trace: Extract guc related traces Radhakrishna Sripada
2024-06-06 0:18 ` [PATCH v4 3/6] drm/xe/trace: Print device_id in xe_trace_bo events Radhakrishna Sripada
2024-06-06 0:18 ` [PATCH v4 4/6] drm/xe/trace: Print device_id in xe_trace_guc events Radhakrishna Sripada
2024-06-06 0:18 ` [PATCH v4 5/6] drm/xe/trace: Print device_id in xe_trace events Radhakrishna Sripada
2024-06-06 0:18 ` [PATCH v4 6/6] drm/xe: Add reg read/write trace Radhakrishna Sripada
2024-06-06 6:39 ` Lucas De Marchi
2024-06-06 0:24 ` ✓ CI.Patch_applied: success for Tracing cleanup and add mmio tracing (rev2) Patchwork
2024-06-06 0:24 ` ✗ CI.checkpatch: warning " Patchwork
2024-06-06 0:25 ` ✗ CI.KUnit: failure " Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox