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,
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",
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 */