]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe/multi_queue: Tracepoint support
authorNiranjana Vishwanathapura <niranjana.vishwanathapura@intel.com>
Thu, 11 Dec 2025 01:03:02 +0000 (17:03 -0800)
committerNiranjana Vishwanathapura <niranjana.vishwanathapura@intel.com>
Fri, 12 Dec 2025 03:21:58 +0000 (19:21 -0800)
Add xe_exec_queue_create_multi_queue event with
multi-queue information.

Signed-off-by: Niranjana Vishwanathapura <niranjana.vishwanathapura@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Link: https://patch.msgid.link/20251211010249.1647839-33-niranjana.vishwanathapura@intel.com
drivers/gpu/drm/xe/xe_guc_submit.c
drivers/gpu/drm/xe/xe_trace.h

index f678b806acaafc77425ad46dfb3500a294b982d5..778cab377f848692eb8112aacde76df087c3689c 100644 (file)
@@ -2024,7 +2024,10 @@ static int guc_exec_queue_init(struct xe_exec_queue *q)
                mutex_unlock(&group->list_lock);
        }
 
-       trace_xe_exec_queue_create(q);
+       if (xe_exec_queue_is_multi_queue(q))
+               trace_xe_exec_queue_create_multi_queue(q);
+       else
+               trace_xe_exec_queue_create(q);
 
        return 0;
 
index c9d0748dae9db0fe60f8a4e07c61b2a63f814d51..6d12fcc13f43f085f7b8b4c0ca4e5d155761a895 100644 (file)
@@ -13,6 +13,7 @@
 #include <linux/types.h>
 
 #include "xe_exec_queue_types.h"
+#include "xe_exec_queue.h"
 #include "xe_gpu_scheduler_types.h"
 #include "xe_gt_types.h"
 #include "xe_guc_exec_queue_types.h"
@@ -97,11 +98,51 @@ DECLARE_EVENT_CLASS(xe_exec_queue,
                              __entry->guc_state, __entry->flags)
 );
 
+DECLARE_EVENT_CLASS(xe_exec_queue_multi_queue,
+                   TP_PROTO(struct xe_exec_queue *q),
+                   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)
+                            __field(u16, width)
+                            __field(u32, guc_id)
+                            __field(u32, guc_state)
+                            __field(u32, flags)
+                            __field(u32, primary)
+                            ),
+
+                   TP_fast_assign(
+                          __assign_str(dev);
+                          __entry->class = q->class;
+                          __entry->logical_mask = q->logical_mask;
+                          __entry->gt_id = q->gt->info.id;
+                          __entry->width = q->width;
+                          __entry->guc_id = q->guc->id;
+                          __entry->guc_state = atomic_read(&q->guc->state);
+                          __entry->flags = q->flags;
+                          __entry->primary = xe_exec_queue_multi_queue_primary(q)->guc->id;
+                          ),
+
+                   TP_printk("dev=%s, %d:0x%x, gt=%d, width=%d guc_id=%d, guc_state=0x%x, flags=0x%x, primary=%d",
+                             __get_str(dev), __entry->class, __entry->logical_mask,
+                             __entry->gt_id, __entry->width, __entry->guc_id,
+                             __entry->guc_state, __entry->flags,
+                             __entry->primary)
+);
+
 DEFINE_EVENT(xe_exec_queue, xe_exec_queue_create,
             TP_PROTO(struct xe_exec_queue *q),
             TP_ARGS(q)
 );
 
+DEFINE_EVENT(xe_exec_queue_multi_queue, xe_exec_queue_create_multi_queue,
+            TP_PROTO(struct xe_exec_queue *q),
+            TP_ARGS(q)
+);
+
 DEFINE_EVENT(xe_exec_queue, xe_exec_queue_supress_resume,
             TP_PROTO(struct xe_exec_queue *q),
             TP_ARGS(q)