]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe/multi_queue: Add multi queue information to guc_info dump
authorNiranjana Vishwanathapura <niranjana.vishwanathapura@intel.com>
Thu, 11 Dec 2025 01:02:56 +0000 (17:02 -0800)
committerNiranjana Vishwanathapura <niranjana.vishwanathapura@intel.com>
Fri, 12 Dec 2025 03:21:20 +0000 (19:21 -0800)
Dump multi queue specific information in the guc exec queue
dump.

v2: Move multi queue related fields inside the multi_queue
    sub-structure (Matt Brost)

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

index 2f467cc1929f1e68827220cf30536bbdbd58e4c0..d52b7b9bcedfc28b64375c6bfeb5608fe507a793 100644 (file)
@@ -3100,6 +3100,11 @@ xe_guc_exec_queue_snapshot_capture(struct xe_exec_queue *q)
        if (snapshot->parallel_execution)
                guc_exec_queue_wq_snapshot_capture(q, snapshot);
 
+       if (xe_exec_queue_is_multi_queue(q)) {
+               snapshot->multi_queue.valid = true;
+               snapshot->multi_queue.primary = xe_exec_queue_multi_queue_primary(q)->guc->id;
+               snapshot->multi_queue.pos = q->multi_queue.pos;
+       }
        spin_lock(&sched->base.job_list_lock);
        snapshot->pending_list_size = list_count_nodes(&sched->base.pending_list);
        snapshot->pending_list = kmalloc_array(snapshot->pending_list_size,
@@ -3182,6 +3187,11 @@ xe_guc_exec_queue_snapshot_print(struct xe_guc_submit_exec_queue_snapshot *snaps
        if (snapshot->parallel_execution)
                guc_exec_queue_wq_snapshot_print(snapshot, p);
 
+       if (snapshot->multi_queue.valid) {
+               drm_printf(p, "\tMulti queue primary GuC ID: %d\n", snapshot->multi_queue.primary);
+               drm_printf(p, "\tMulti queue position: %d\n", snapshot->multi_queue.pos);
+       }
+
        for (i = 0; snapshot->pending_list && i < snapshot->pending_list_size;
             i++)
                drm_printf(p, "\tJob: seqno=%d, fence=%d, finished=%d\n",
index dc7456c345836fa525196fa432bd286f6a5ab4bc..25e29e85502cbc3fd1ebe93e41314133567bf56a 100644 (file)
@@ -135,6 +135,19 @@ struct xe_guc_submit_exec_queue_snapshot {
                u32 wq[WQ_SIZE / sizeof(u32)];
        } parallel;
 
+       /** @multi_queue: snapshot of the multi queue information */
+       struct {
+               /**
+                * @multi_queue.primary: GuC id of the primary exec queue
+                * of the multi queue group.
+                */
+               u32 primary;
+               /** @multi_queue.pos: Position of the exec queue within the multi queue group */
+               u8 pos;
+               /** @valid: The exec queue is part of a multi queue group */
+               bool valid;
+       } multi_queue;
+
        /** @pending_list_size: Size of the pending list snapshot array */
        int pending_list_size;
        /** @pending_list: snapshot of the pending list info */