Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/1] Maintenence of devcoredump <-> GuC-Err-Capture plumbing
@ 2024-11-17 18:43 Alan Previn
  2024-11-17 18:44 ` [PATCH 1/1] drm/xe/guc/capture: " Alan Previn
                   ` (8 more replies)
  0 siblings, 9 replies; 12+ messages in thread
From: Alan Previn @ 2024-11-17 18:43 UTC (permalink / raw)
  To: intel-xe
  Cc: Alan Previn, dri-devel, Daniele Ceraolo Spurio, John Harrison,
	Matthew Brost, Zhanjun Dong

The GuC-Error-Capture is currently reaching into xe_devcoredump
structure to store its own place-holder snaphot to workaround
the race between G2H-Error-Capture-Notification vs Drm-Scheduler
triggering GuC-Submission-exec-queue-timeout/kill.

Part of that race workaround design included GuC-Error-Capture taking
on some of the front-end functions for xe_hw_engine_snapshot
generation because of the orthogonal debugfs for raw dumps of engine
registers without any job association. We want this to also be handled,
even if indirectly, by GuC-Error-Capture since there is a lot to manage
when it comes to reading and printing the register lists.

However, logically speaking, GuC-Error-Capture node management,
despite being the majority of an engine-snapshot work, is still
a subset of xe_hw_engine_snapshot.

This series intends to re-design the plumbing for future
maintenence and scalability, rearranging the layering
back to what its should be (xe_devcoredump_snapshot owns
xe_hw_engine_snapshot owns xe_guc_capture_snapshot)..

Alan Previn (1):
  drm/xe/guc/capture: Maintenence of devcoredump <-> GuC-Err-Capture
    plumbing

 drivers/gpu/drm/xe/xe_devcoredump.c           |   3 -
 drivers/gpu/drm/xe/xe_devcoredump_types.h     |   6 -
 drivers/gpu/drm/xe/xe_guc_capture.c           | 397 ++++++++----------
 drivers/gpu/drm/xe/xe_guc_capture.h           |  10 +-
 .../drm/xe/xe_guc_capture_snapshot_types.h    |  68 +++
 drivers/gpu/drm/xe/xe_guc_submit.c            |  21 +-
 drivers/gpu/drm/xe/xe_hw_engine.c             | 117 ++++--
 drivers/gpu/drm/xe/xe_hw_engine.h             |   4 +-
 drivers/gpu/drm/xe/xe_hw_engine_types.h       |  13 +-
 9 files changed, 353 insertions(+), 286 deletions(-)
 create mode 100644 drivers/gpu/drm/xe/xe_guc_capture_snapshot_types.h


base-commit: 2d4993e163401c81e138c6e0e6223752c2e90402
-- 
2.34.1


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 1/1] drm/xe/guc/capture: Maintenence of devcoredump <-> GuC-Err-Capture plumbing
  2024-11-17 18:43 [PATCH 0/1] Maintenence of devcoredump <-> GuC-Err-Capture plumbing Alan Previn
@ 2024-11-17 18:44 ` Alan Previn
  2024-11-26 17:09   ` Dong, Zhanjun
  2024-11-18  2:22 ` ✓ CI.Patch_applied: success for " Patchwork
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 12+ messages in thread
From: Alan Previn @ 2024-11-17 18:44 UTC (permalink / raw)
  To: intel-xe
  Cc: Alan Previn, dri-devel, Daniele Ceraolo Spurio, John Harrison,
	Matthew Brost, Zhanjun Dong

The order of the devcoredump event flow is:
drm-scheduler -> guc-submission-execq-timed-out-job ->
guc-submission-kill-job -> xe-devcoredump (once the work
is confirmed to have been killed).

As we are aware, the GuC-FW IRQ for error-capture delivery
and extraction could have happenned before the start of
guc-execq-timed-out-job or the middle of it (before or
during the explicit kill) or not at all. Thus, today, the
above flow takes a manual capture first before triggering
the kill-job just in case we need it.

The structure layering of devcoredump internals are:
xe_devcoredump_snapshot -> xe_foo_snapshot (where foo
can be any data dump associated to the job was killed).
Foo includes the xe_hw_engine_snapshot. Since GuC-Error-Capture
provides just the register dump of an engine, GuC-Err-Capture
snapshots should be managed by the xe_hw_engine_snapshot.
That isn't the case today.

Furthermode, neither xe_devcoredump_snapshot nor
xe_hw_engine_snapshot even exists at the start of
guc-submission-execq-timed-out-job. Thus, the first
manual capture node has no home. However, today,
GuC-Error-Capture stores capture snapshots off the
top-level xe_devcoredump_snapshot's matched_node.
GuC-Error-Capture also had absorbed the function for
xe_hw_engine_snapshot generation.
     NOTE: Existing code isn't broken because xe_devcoredump
     is not dynamically allocated and designed to hold a
     single event at a time (i.e. single engine dump).
     But it's not scalable for future improvement.

Thus this patch:
1. Moves "matched_node" from xe_devcoredump_snapshot to
   xe_hw_engine_snapshot.
2. Relocates the functions for xe_hw_engine_snapshot generation
   and printing back to xe_hw_engine.c. However, split out the
   register dump printing so it stays within GuC-Error-Capture
   (so we don't need to maintain two sets of register lists).
3. Keep both the manual and firmware capture nodes within
   GuC-Error-Capture subsystem's linked list until
   xe_hw_engine_snapshot gets and puts them later.
4. Give xe_hw_engine_snapshot the control and ability to
   query GuC-Error-Capture for matching snapshots while choosing
   between manual vs firmware capture getting/putting node.
5. While at it, relocate (and rename) key structures, enums
   and function protos to xe_guc_capture_snapshot_types.h
   (as an inter-module header) for xe_hw_engine_snapshot to use.
6. Since xe_hw_engine_snapshot can also be called by via debugfs
   without a job, create a new function that does a manual capture
   of engine registers without any associated job.

Signed-off-by: Alan Previn <alan.previn.teres.alexis@intel.com>
---
 drivers/gpu/drm/xe/xe_devcoredump.c           |   3 -
 drivers/gpu/drm/xe/xe_devcoredump_types.h     |   6 -
 drivers/gpu/drm/xe/xe_guc_capture.c           | 397 ++++++++----------
 drivers/gpu/drm/xe/xe_guc_capture.h           |  10 +-
 .../drm/xe/xe_guc_capture_snapshot_types.h    |  68 +++
 drivers/gpu/drm/xe/xe_guc_submit.c            |  21 +-
 drivers/gpu/drm/xe/xe_hw_engine.c             | 117 ++++--
 drivers/gpu/drm/xe/xe_hw_engine.h             |   4 +-
 drivers/gpu/drm/xe/xe_hw_engine_types.h       |  13 +-
 9 files changed, 353 insertions(+), 286 deletions(-)
 create mode 100644 drivers/gpu/drm/xe/xe_guc_capture_snapshot_types.h

diff --git a/drivers/gpu/drm/xe/xe_devcoredump.c b/drivers/gpu/drm/xe/xe_devcoredump.c
index 0e5edf14a241..b98d71e670ca 100644
--- a/drivers/gpu/drm/xe/xe_devcoredump.c
+++ b/drivers/gpu/drm/xe/xe_devcoredump.c
@@ -144,9 +144,6 @@ static void xe_devcoredump_snapshot_free(struct xe_devcoredump_snapshot *ss)
 	xe_guc_ct_snapshot_free(ss->guc.ct);
 	ss->guc.ct = NULL;
 
-	xe_guc_capture_put_matched_nodes(&ss->gt->uc.guc);
-	ss->matched_node = NULL;
-
 	xe_guc_exec_queue_snapshot_free(ss->ge);
 	ss->ge = NULL;
 
diff --git a/drivers/gpu/drm/xe/xe_devcoredump_types.h b/drivers/gpu/drm/xe/xe_devcoredump_types.h
index be4d59ea9ac8..06ac75ce63dd 100644
--- a/drivers/gpu/drm/xe/xe_devcoredump_types.h
+++ b/drivers/gpu/drm/xe/xe_devcoredump_types.h
@@ -49,12 +49,6 @@ struct xe_devcoredump_snapshot {
 	struct xe_hw_engine_snapshot *hwe[XE_NUM_HW_ENGINES];
 	/** @job: Snapshot of job state */
 	struct xe_sched_job_snapshot *job;
-	/**
-	 * @matched_node: The matched capture node for timedout job
-	 * this single-node tracker works because devcoredump will always only
-	 * produce one hw-engine capture per devcoredump event
-	 */
-	struct __guc_capture_parsed_output *matched_node;
 	/** @vm: Snapshot of VM state */
 	struct xe_vm_snapshot *vm;
 
diff --git a/drivers/gpu/drm/xe/xe_guc_capture.c b/drivers/gpu/drm/xe/xe_guc_capture.c
index f87755af545f..691fc72a5c9e 100644
--- a/drivers/gpu/drm/xe/xe_guc_capture.c
+++ b/drivers/gpu/drm/xe/xe_guc_capture.c
@@ -26,6 +26,7 @@
 #include "xe_guc_ads.h"
 #include "xe_guc_capture.h"
 #include "xe_guc_capture_types.h"
+#include "xe_guc_capture_snapshot_types.h"
 #include "xe_guc_ct.h"
 #include "xe_guc_exec_queue_types.h"
 #include "xe_guc_log.h"
@@ -53,40 +54,6 @@ struct __guc_capture_bufstate {
 	u32 wr;
 };
 
-/*
- * struct __guc_capture_parsed_output - extracted error capture node
- *
- * A single unit of extracted error-capture output data grouped together
- * at an engine-instance level. We keep these nodes in a linked list.
- * See cachelist and outlist below.
- */
-struct __guc_capture_parsed_output {
-	/*
-	 * A single set of 3 capture lists: a global-list
-	 * an engine-class-list and an engine-instance list.
-	 * outlist in __guc_capture_parsed_output will keep
-	 * a linked list of these nodes that will eventually
-	 * be detached from outlist and attached into to
-	 * xe_codedump in response to a context reset
-	 */
-	struct list_head link;
-	bool is_partial;
-	u32 eng_class;
-	u32 eng_inst;
-	u32 guc_id;
-	u32 lrca;
-	u32 type;
-	bool locked;
-	enum xe_hw_engine_snapshot_source_id source;
-	struct gcap_reg_list_info {
-		u32 vfid;
-		u32 num_regs;
-		struct guc_mmio_reg *regs;
-	} reginfo[GUC_STATE_CAPTURE_TYPE_MAX];
-#define GCAP_PARSED_REGLIST_INDEX_GLOBAL   BIT(GUC_STATE_CAPTURE_TYPE_GLOBAL)
-#define GCAP_PARSED_REGLIST_INDEX_ENGCLASS BIT(GUC_STATE_CAPTURE_TYPE_ENGINE_CLASS)
-};
-
 /*
  * Define all device tables of GuC error capture register lists
  * NOTE:
@@ -286,7 +253,7 @@ struct xe_guc_state_capture {
 
 static void
 guc_capture_remove_stale_matches_from_list(struct xe_guc_state_capture *gc,
-					   struct __guc_capture_parsed_output *node);
+					   struct xe_guc_capture_snapshot *node);
 
 static const struct __guc_mmio_reg_descr_group *
 guc_capture_get_device_reglist(struct xe_device *xe)
@@ -840,7 +807,7 @@ static void check_guc_capture_size(struct xe_guc *guc)
 }
 
 static void
-guc_capture_add_node_to_list(struct __guc_capture_parsed_output *node,
+guc_capture_add_node_to_list(struct xe_guc_capture_snapshot *node,
 			     struct list_head *list)
 {
 	list_add(&node->link, list);
@@ -848,7 +815,7 @@ guc_capture_add_node_to_list(struct __guc_capture_parsed_output *node,
 
 static void
 guc_capture_add_node_to_outlist(struct xe_guc_state_capture *gc,
-				struct __guc_capture_parsed_output *node)
+				struct xe_guc_capture_snapshot *node)
 {
 	guc_capture_remove_stale_matches_from_list(gc, node);
 	guc_capture_add_node_to_list(node, &gc->outlist);
@@ -856,17 +823,17 @@ guc_capture_add_node_to_outlist(struct xe_guc_state_capture *gc,
 
 static void
 guc_capture_add_node_to_cachelist(struct xe_guc_state_capture *gc,
-				  struct __guc_capture_parsed_output *node)
+				  struct xe_guc_capture_snapshot *node)
 {
 	guc_capture_add_node_to_list(node, &gc->cachelist);
 }
 
 static void
 guc_capture_free_outlist_node(struct xe_guc_state_capture *gc,
-			      struct __guc_capture_parsed_output *n)
+			      struct xe_guc_capture_snapshot *n)
 {
 	if (n) {
-		n->locked = 0;
+		n->locked = false;
 		list_del(&n->link);
 		/* put node back to cache list */
 		guc_capture_add_node_to_cachelist(gc, n);
@@ -875,9 +842,9 @@ guc_capture_free_outlist_node(struct xe_guc_state_capture *gc,
 
 static void
 guc_capture_remove_stale_matches_from_list(struct xe_guc_state_capture *gc,
-					   struct __guc_capture_parsed_output *node)
+					   struct xe_guc_capture_snapshot *node)
 {
-	struct __guc_capture_parsed_output *n, *ntmp;
+	struct xe_guc_capture_snapshot *n, *ntmp;
 	int guc_id = node->guc_id;
 
 	list_for_each_entry_safe(n, ntmp, &gc->outlist, link) {
@@ -887,7 +854,7 @@ guc_capture_remove_stale_matches_from_list(struct xe_guc_state_capture *gc,
 }
 
 static void
-guc_capture_init_node(struct xe_guc *guc, struct __guc_capture_parsed_output *node)
+guc_capture_init_node(struct xe_guc *guc, struct xe_guc_capture_snapshot *node)
 {
 	struct guc_mmio_reg *tmp[GUC_STATE_CAPTURE_TYPE_MAX];
 	int i;
@@ -934,24 +901,31 @@ guc_capture_init_node(struct xe_guc *guc, struct __guc_capture_parsed_output *no
  *                   This node is created from a pre-allocated list of blank nodes in
  *                   guc->capture->cachelist and populated with the error-capture
  *                   data from GuC and then it's added into guc->capture->outlist linked
- *                   list. This list is used for matchup and printout by xe_devcoredump_read
- *                   and xe_engine_snapshot_print, (when user invokes the devcoredump sysfs).
+ *                   list. This node (dumped-register-lists) will be requested later by
+ *                   xe_hwe_engine_snapshot creation.
  *
- * GUC --> notify context reset:
- * -----------------------------
+ * DRM Scheduler job-timeout OR GuC-notify guc-id reset:
+ * -----------------------------------------------------
  *     --> guc_exec_queue_timedout_job
- *                   L--> xe_devcoredump
- *                          L--> devcoredump_snapshot
- *                               --> xe_hw_engine_snapshot_capture
- *                               --> xe_engine_manual_capture(For manual capture)
+ *             L--> alloc D: xe_guc_capture_snapshot_store_manual_job
+ *                           (only if "alloc C" above didn't happen)
+ *             L--> devcoredump_snapshot
+ *                      --> xe_engine_snapshot_capture_for_queue(q) ..
+ *                               --> xe_guc_capture_snapshot_get(q)
+ *                                   use "alloc C" or else "alloc D"
+ *                               --> store in xe_hw_engine_snapshot->matched_node
  *
- * User Sysfs / Debugfs
- * --------------------
- *      --> xe_devcoredump_read->
+ * User Devcoredump Sysfs
+ * ----------------------
+ *      --> xe_devcoredump_read-> (user cats devcoredump)
  *             L--> xxx_snapshot_print
  *                    L--> xe_engine_snapshot_print
- *                         Print register lists values saved at
- *                         guc->capture->outlist
+ *                           L --> xe_guc_capture_snapshot_print (for printing register
+ *                                 lists values of xe_hw_engine_snapshot->matched_node)
+ *      --> xe_devcoredump_free (user clears devcoredump)
+ *             L--> xe_devcoredump_free -> xe_devcoredump_snapshot_free
+ *                    L--> xe_hw_engine_snapshot_free
+ *                           L--> xe_guc_capture_snapshot_put(matched_node)
  *
  */
 
@@ -1066,13 +1040,13 @@ guc_capture_log_get_register(struct xe_guc *guc, struct __guc_capture_bufstate *
 	return 0;
 }
 
-static struct __guc_capture_parsed_output *
+static struct xe_guc_capture_snapshot *
 guc_capture_get_prealloc_node(struct xe_guc *guc)
 {
-	struct __guc_capture_parsed_output *found = NULL;
+	struct xe_guc_capture_snapshot *found = NULL;
 
 	if (!list_empty(&guc->capture->cachelist)) {
-		struct __guc_capture_parsed_output *n, *ntmp;
+		struct xe_guc_capture_snapshot *n, *ntmp;
 
 		/* get first avail node from the cache list */
 		list_for_each_entry_safe(n, ntmp, &guc->capture->cachelist, link) {
@@ -1080,7 +1054,7 @@ guc_capture_get_prealloc_node(struct xe_guc *guc)
 			break;
 		}
 	} else {
-		struct __guc_capture_parsed_output *n, *ntmp;
+		struct xe_guc_capture_snapshot *n, *ntmp;
 
 		/*
 		 * traverse reversed and steal back the oldest node already
@@ -1099,11 +1073,11 @@ guc_capture_get_prealloc_node(struct xe_guc *guc)
 	return found;
 }
 
-static struct __guc_capture_parsed_output *
-guc_capture_clone_node(struct xe_guc *guc, struct __guc_capture_parsed_output *original,
+static struct xe_guc_capture_snapshot *
+guc_capture_clone_node(struct xe_guc *guc, struct xe_guc_capture_snapshot *original,
 		       u32 keep_reglist_mask)
 {
-	struct __guc_capture_parsed_output *new;
+	struct xe_guc_capture_snapshot *new;
 	int i;
 
 	new = guc_capture_get_prealloc_node(guc);
@@ -1145,7 +1119,7 @@ guc_capture_extract_reglists(struct xe_guc *guc, struct __guc_capture_bufstate *
 	struct xe_gt *gt = guc_to_gt(guc);
 	struct guc_state_capture_group_header_t ghdr = {0};
 	struct guc_state_capture_header_t hdr = {0};
-	struct __guc_capture_parsed_output *node = NULL;
+	struct xe_guc_capture_snapshot *node = NULL;
 	struct guc_mmio_reg *regs = NULL;
 	int i, numlists, numregs, ret = 0;
 	enum guc_state_capture_type datatype;
@@ -1438,11 +1412,11 @@ void xe_guc_capture_process(struct xe_guc *guc)
 		__guc_capture_process_output(guc);
 }
 
-static struct __guc_capture_parsed_output *
+static struct xe_guc_capture_snapshot *
 guc_capture_alloc_one_node(struct xe_guc *guc)
 {
 	struct drm_device *drm = guc_to_drm(guc);
-	struct __guc_capture_parsed_output *new;
+	struct xe_guc_capture_snapshot *new;
 	int i;
 
 	new = drmm_kzalloc(drm, sizeof(*new), GFP_KERNEL);
@@ -1467,7 +1441,7 @@ guc_capture_alloc_one_node(struct xe_guc *guc)
 static void
 __guc_capture_create_prealloc_nodes(struct xe_guc *guc)
 {
-	struct __guc_capture_parsed_output *node = NULL;
+	struct xe_guc_capture_snapshot *node = NULL;
 	int i;
 
 	for (i = 0; i < PREALLOC_NODES_MAX_COUNT; ++i) {
@@ -1564,35 +1538,18 @@ read_reg_to_node(struct xe_hw_engine *hwe, const struct __guc_mmio_reg_descr_gro
 	}
 }
 
-/**
- * xe_engine_manual_capture - Take a manual engine snapshot from engine.
- * @hwe: Xe HW Engine.
- * @snapshot: The engine snapshot
- *
- * Take engine snapshot from engine read.
- *
- * Returns: None
- */
-void
-xe_engine_manual_capture(struct xe_hw_engine *hwe, struct xe_hw_engine_snapshot *snapshot)
+static struct xe_guc_capture_snapshot *
+guc_capture_get_manual_snapshot(struct xe_guc *guc, struct xe_hw_engine *hwe)
 {
 	struct xe_gt *gt = hwe->gt;
-	struct xe_device *xe = gt_to_xe(gt);
-	struct xe_guc *guc = &gt->uc.guc;
-	struct xe_devcoredump *devcoredump = &xe->devcoredump;
 	enum guc_capture_list_class_type capture_class;
 	const struct __guc_mmio_reg_descr_group *list;
-	struct __guc_capture_parsed_output *new;
+	struct xe_guc_capture_snapshot *new;
 	enum guc_state_capture_type type;
-	u16 guc_id = 0;
-	u32 lrca = 0;
-
-	if (IS_SRIOV_VF(xe))
-		return;
 
 	new = guc_capture_get_prealloc_node(guc);
 	if (!new)
-		return;
+		return NULL;
 
 	capture_class = xe_engine_class_to_guc_capture_class(hwe->class);
 	for (type = GUC_STATE_CAPTURE_TYPE_GLOBAL; type < GUC_STATE_CAPTURE_TYPE_MAX; type++) {
@@ -1626,26 +1583,83 @@ xe_engine_manual_capture(struct xe_hw_engine *hwe, struct xe_hw_engine_snapshot
 		}
 	}
 
-	if (devcoredump && devcoredump->captured) {
-		struct xe_guc_submit_exec_queue_snapshot *ge = devcoredump->snapshot.ge;
+	new->eng_class = xe_engine_class_to_guc_class(hwe->class);
+	new->eng_inst = hwe->instance;
 
-		if (ge) {
-			guc_id = ge->guc.id;
-			if (ge->lrc[0])
-				lrca = ge->lrc[0]->context_desc;
-		}
+	return new;
+}
+
+/**
+ * xe_guc_capture_snapshot_store_and_get_manual_hwe - Generate and get manual engine register dump
+ * @guc: Target GuC for manual capture
+ * @hwe: The engine instance to capture from
+ *
+ * Generate a manual GuC-Error-Capture snapshot of engine instance + engine class registers
+ * without any queue association. This capture node is not stored in outlist or cachelist,
+ * Returns: New capture node and caller must "put"
+ */
+struct xe_guc_capture_snapshot *
+xe_guc_capture_snapshot_store_and_get_manual_hwe(struct xe_guc *guc, struct xe_hw_engine *hwe)
+{
+	struct xe_guc_capture_snapshot *new;
+
+	new = guc_capture_get_manual_snapshot(guc, hwe);
+	if (!new)
+		return NULL;
+
+	new->guc_id = 0;
+	new->lrca = 0;
+	new->is_partial = 0;
+	new->source = XE_ENGINE_CAPTURE_SOURCE_MANUAL;
+
+	return new;
+}
+
+/**
+ * xe_guc_capture_snapshot_store_manual_job - Generate and store a manual engine register dump
+ * @guc: Target GuC for manual capture
+ * @q: Associated xe_exec_queue to simulate a manual capture on its behalf.
+ *
+ * Generate a manual GuC-Error-Capture snapshot of engine instance + engine class registers
+ * for the engine of the given exec queue. Stores this node in internal outlist for future
+ * retrieval with the ability to match up against the same queue.
+ *
+ * Returns: None
+ */
+void
+xe_guc_capture_snapshot_store_manual_job(struct xe_guc *guc, struct xe_exec_queue *q)
+{
+	struct xe_guc_capture_snapshot *new;
+	struct xe_gt *gt = guc_to_gt(guc);
+	struct xe_hw_engine *hwe;
+	enum xe_hw_engine_id id;
+
+	if (q) {
+		xe_gt_warn(gt, "Manual GuC Error capture requested with invalid job\n");
+		return;
 	}
 
-	new->eng_class = xe_engine_class_to_guc_class(hwe->class);
-	new->eng_inst = hwe->instance;
-	new->guc_id = guc_id;
-	new->lrca = lrca;
+	/* Find hwe for the queue */
+	for_each_hw_engine(hwe, gt, id) {
+		if (hwe != q->hwe)
+			continue;
+		break;
+	}
+
+	new = guc_capture_get_manual_snapshot(guc, hwe);
+	if (!new)
+		return;
+
+	new->guc_id = q->guc->id;
+	new->lrca = xe_lrc_ggtt_addr(q->lrc[0]);
 	new->is_partial = 0;
-	new->locked = 1;
+	/* lock manual captures until devcoredump-engine puts it */
+	new->locked = true;
 	new->source = XE_ENGINE_CAPTURE_SOURCE_MANUAL;
 
 	guc_capture_add_node_to_outlist(guc->capture, new);
-	devcoredump->snapshot.matched_node = new;
+
+	return;
 }
 
 static struct guc_mmio_reg *
@@ -1666,24 +1680,16 @@ guc_capture_find_reg(struct gcap_reg_list_info *reginfo, u32 addr, u32 flags)
 }
 
 static void
-snapshot_print_by_list_order(struct xe_hw_engine_snapshot *snapshot, struct drm_printer *p,
-			     u32 type, const struct __guc_mmio_reg_descr_group *list)
+print_noderegs_by_list_order(struct xe_guc *guc, struct gcap_reg_list_info *reginfo,
+			     const struct __guc_mmio_reg_descr_group *list, struct drm_printer *p)
 {
-	struct xe_gt *gt = snapshot->hwe->gt;
-	struct xe_device *xe = gt_to_xe(gt);
-	struct xe_guc *guc = &gt->uc.guc;
-	struct xe_devcoredump *devcoredump = &xe->devcoredump;
-	struct xe_devcoredump_snapshot *devcore_snapshot = &devcoredump->snapshot;
-	struct gcap_reg_list_info *reginfo = NULL;
 	u32 last_value, i;
 	bool is_ext;
 
 	if (!list || list->num_regs == 0)
 		return;
-	XE_WARN_ON(!devcore_snapshot->matched_node);
 
 	is_ext = list == guc->capture->extlists;
-	reginfo = &devcore_snapshot->matched_node->reginfo[type];
 
 	/*
 	 * loop through descriptor first and find the register in the node
@@ -1717,7 +1723,7 @@ snapshot_print_by_list_order(struct xe_hw_engine_snapshot *snapshot, struct drm_
 
 			group = FIELD_GET(GUC_REGSET_STEERING_GROUP, reg_desc->flags);
 			instance = FIELD_GET(GUC_REGSET_STEERING_INSTANCE, reg_desc->flags);
-			dss = xe_gt_mcr_steering_info_to_dss_id(gt, group, instance);
+			dss = xe_gt_mcr_steering_info_to_dss_id(guc_to_gt(guc), group, instance);
 
 			drm_printf(p, "\t%s[%u]: 0x%08x\n", reg_desc->regname, dss, value);
 		} else {
@@ -1727,74 +1733,65 @@ snapshot_print_by_list_order(struct xe_hw_engine_snapshot *snapshot, struct drm_
 }
 
 /**
- * xe_engine_snapshot_print - Print out a given Xe HW Engine snapshot.
- * @snapshot: Xe HW Engine snapshot object.
+ * xe_guc_capture_snapshot_print - Print out a the contents of a provided Guc-Err-Capture node
+ * @guc : Target GuC for operation.
+ * @node: GuC Error Capture register dump node.
  * @p: drm_printer where it will be printed out.
  *
- * This function prints out a given Xe HW Engine snapshot object.
+ * This function prints out a register dump of a GuC-Err-Capture node that was retrieved
+ * earlier either by GuC-FW reporting or by manual capture depending on how the
+ * caller (typically xe_hw_engine_snapshot) was invoked and used.
  */
-void xe_engine_snapshot_print(struct xe_hw_engine_snapshot *snapshot, struct drm_printer *p)
+
+void xe_guc_capture_snapshot_print(struct xe_guc *guc, struct xe_guc_capture_snapshot *node,
+				   struct drm_printer *p)
 {
 	const char *grptype[GUC_STATE_CAPTURE_GROUP_TYPE_MAX] = {
 		"full-capture",
 		"partial-capture"
 	};
-	int type;
 	const struct __guc_mmio_reg_descr_group *list;
-	enum guc_capture_list_class_type capture_class;
-
 	struct xe_gt *gt;
-	struct xe_device *xe;
-	struct xe_devcoredump *devcoredump;
-	struct xe_devcoredump_snapshot *devcore_snapshot;
+	int type;
 
-	if (!snapshot)
+	if (!guc)
 		return;
-
-	gt = snapshot->hwe->gt;
-	xe = gt_to_xe(gt);
-	devcoredump = &xe->devcoredump;
-	devcore_snapshot = &devcoredump->snapshot;
-
-	if (!devcore_snapshot->matched_node)
+	gt = guc_to_gt(guc);
+	if (!node) {
+		xe_gt_warn(gt, "GuC Capture printing without node!\n");
 		return;
+	}
+	if (!p) {
+		xe_gt_warn(gt, "GuC Capture printing without printer!\n");
+		return;
+	}
 
-	xe_gt_assert(gt, snapshot->hwe);
-
-	capture_class = xe_engine_class_to_guc_capture_class(snapshot->hwe->class);
-
-	drm_printf(p, "%s (physical), logical instance=%d\n",
-		   snapshot->name ? snapshot->name : "",
-		   snapshot->logical_instance);
 	drm_printf(p, "\tCapture_source: %s\n",
-		   devcore_snapshot->matched_node->source == XE_ENGINE_CAPTURE_SOURCE_GUC ?
+		   node->source == XE_ENGINE_CAPTURE_SOURCE_GUC ?
 		   "GuC" : "Manual");
-	drm_printf(p, "\tCoverage: %s\n", grptype[devcore_snapshot->matched_node->is_partial]);
-	drm_printf(p, "\tForcewake: domain 0x%x, ref %d\n",
-		   snapshot->forcewake.domain, snapshot->forcewake.ref);
-	drm_printf(p, "\tReserved: %s\n",
-		   str_yes_no(snapshot->kernel_reserved));
+	drm_printf(p, "\tCoverage: %s\n", grptype[node->is_partial]);
 
 	for (type = GUC_STATE_CAPTURE_TYPE_GLOBAL; type < GUC_STATE_CAPTURE_TYPE_MAX; type++) {
 		list = xe_guc_capture_get_reg_desc_list(gt, GUC_CAPTURE_LIST_INDEX_PF, type,
-							capture_class, false);
-		snapshot_print_by_list_order(snapshot, p, type, list);
+							node->eng_class, false);
+		print_noderegs_by_list_order(guc, &node->reginfo[type], list, p);
 	}
 
-	if (capture_class == GUC_CAPTURE_LIST_CLASS_RENDER_COMPUTE) {
+	if (node->eng_class == GUC_CAPTURE_LIST_CLASS_RENDER_COMPUTE) {
+		type = GUC_STATE_CAPTURE_TYPE_ENGINE_CLASS;
 		list = xe_guc_capture_get_reg_desc_list(gt, GUC_CAPTURE_LIST_INDEX_PF,
-							GUC_STATE_CAPTURE_TYPE_ENGINE_CLASS,
-							capture_class, true);
-		snapshot_print_by_list_order(snapshot, p, GUC_STATE_CAPTURE_TYPE_ENGINE_CLASS,
-					     list);
+							type, node->eng_class, true);
+		print_noderegs_by_list_order(guc, &node->reginfo[type], list, p);
 	}
-
 	drm_puts(p, "\n");
 }
 
 /**
- * xe_guc_capture_get_matching_and_lock - Matching GuC capture for the queue.
- * @q: The exec queue object
+ * xe_guc_capture_snapshot_get - Matching GuC capture for the queue.
+ *
+ * @guc: The GuC being searched for a matching guc-error-capture snapshot.
+ * @q: The exec queue object that provides engine, guc-id and lrca to match (can be NULL!)
+ * @src: The source of the GuC-error-Capture snapshot to retrieve;
  *
  * Search within the capture outlist for the queue, could be used for check if
  * GuC capture is ready for the queue.
@@ -1802,28 +1799,31 @@ void xe_engine_snapshot_print(struct xe_hw_engine_snapshot *snapshot, struct drm
  *
  * Returns: found guc-capture node ptr else NULL
  */
-struct __guc_capture_parsed_output *
-xe_guc_capture_get_matching_and_lock(struct xe_exec_queue *q)
+struct xe_guc_capture_snapshot *
+xe_guc_capture_snapshot_get(struct xe_guc *guc, struct xe_exec_queue *q,
+			    enum xe_guc_capture_snapshot_source src)
 {
 	struct xe_hw_engine *hwe;
 	enum xe_hw_engine_id id;
+	struct xe_gt *gt;
 	struct xe_device *xe;
 	u16 guc_class = GUC_LAST_ENGINE_CLASS + 1;
-	struct xe_devcoredump_snapshot *ss;
 
-	if (!q || !q->gt)
+	if (!guc)
 		return NULL;
 
-	xe = gt_to_xe(q->gt);
-	if (xe->wedged.mode >= 2 || !xe_device_uc_enabled(xe) || IS_SRIOV_VF(xe))
+	gt = guc_to_gt(guc);
+	if (q && q->gt != gt) {
+		xe_gt_warn(gt, "Guc-Err-Capture being querried with incorrect queue's GT!");
 		return NULL;
+	}
 
-	ss = &xe->devcoredump.snapshot;
-	if (ss->matched_node && ss->matched_node->source == XE_ENGINE_CAPTURE_SOURCE_GUC)
-		return ss->matched_node;
+	xe = gt_to_xe(gt);
+	if (xe->wedged.mode >= 2 || !xe_device_uc_enabled(xe) || IS_SRIOV_VF(xe))
+		return NULL;
 
 	/* Find hwe for the queue */
-	for_each_hw_engine(hwe, q->gt, id) {
+	for_each_hw_engine(hwe, gt, id) {
 		if (hwe != q->hwe)
 			continue;
 		guc_class = xe_engine_class_to_guc_class(hwe->class);
@@ -1831,8 +1831,7 @@ xe_guc_capture_get_matching_and_lock(struct xe_exec_queue *q)
 	}
 
 	if (guc_class <= GUC_LAST_ENGINE_CLASS) {
-		struct __guc_capture_parsed_output *n, *ntmp;
-		struct xe_guc *guc =  &q->gt->uc.guc;
+		struct xe_guc_capture_snapshot *n, *ntmp;
 		u16 guc_id = q->guc->id;
 		u32 lrca = xe_lrc_ggtt_addr(q->lrc[0]);
 
@@ -1844,8 +1843,8 @@ xe_guc_capture_get_matching_and_lock(struct xe_exec_queue *q)
 		list_for_each_entry_safe(n, ntmp, &guc->capture->outlist, link) {
 			if (n->eng_class == guc_class && n->eng_inst == hwe->instance &&
 			    n->guc_id == guc_id && n->lrca == lrca &&
-			    n->source == XE_ENGINE_CAPTURE_SOURCE_GUC) {
-				n->locked = 1;
+			    n->source == src) {
+				n->locked = true;
 				return n;
 			}
 		}
@@ -1853,77 +1852,19 @@ xe_guc_capture_get_matching_and_lock(struct xe_exec_queue *q)
 	return NULL;
 }
 
-/**
- * xe_engine_snapshot_capture_for_queue - Take snapshot of associated engine
- * @q: The exec queue object
- *
- * Take snapshot of associated HW Engine
- *
- * Returns: None.
- */
-void
-xe_engine_snapshot_capture_for_queue(struct xe_exec_queue *q)
-{
-	struct xe_device *xe = gt_to_xe(q->gt);
-	struct xe_devcoredump *coredump = &xe->devcoredump;
-	struct xe_hw_engine *hwe;
-	enum xe_hw_engine_id id;
-	u32 adj_logical_mask = q->logical_mask;
-
-	if (IS_SRIOV_VF(xe))
-		return;
-
-	for_each_hw_engine(hwe, q->gt, id) {
-		if (hwe->class != q->hwe->class ||
-		    !(BIT(hwe->logical_instance) & adj_logical_mask)) {
-			coredump->snapshot.hwe[id] = NULL;
-			continue;
-		}
-
-		if (!coredump->snapshot.hwe[id]) {
-			coredump->snapshot.hwe[id] =
-				xe_hw_engine_snapshot_capture(hwe, q);
-		} else {
-			struct __guc_capture_parsed_output *new;
-
-			new = xe_guc_capture_get_matching_and_lock(q);
-			if (new) {
-				struct xe_guc *guc =  &q->gt->uc.guc;
-
-				/*
-				 * If we are in here, it means we found a fresh
-				 * GuC-err-capture node for this engine after
-				 * previously failing to find a match in the
-				 * early part of guc_exec_queue_timedout_job.
-				 * Thus we must free the manually captured node
-				 */
-				guc_capture_free_outlist_node(guc->capture,
-							      coredump->snapshot.matched_node);
-				coredump->snapshot.matched_node = new;
-			}
-		}
-
-		break;
-	}
-}
-
 /*
- * xe_guc_capture_put_matched_nodes - Cleanup macthed nodes
+ * xe_guc_capture_snapshot_put - Release GuC Capture matched node from a prior snapshot_get
  * @guc: The GuC object
+ * @node: The node to release back to GuC
  *
  * Free matched node and all nodes with the equal guc_id from
  * GuC captured outlist
  */
-void xe_guc_capture_put_matched_nodes(struct xe_guc *guc)
+void xe_guc_capture_snapshot_put(struct xe_guc *guc, struct xe_guc_capture_snapshot *n)
 {
-	struct xe_device *xe = guc_to_xe(guc);
-	struct xe_devcoredump *devcoredump = &xe->devcoredump;
-	struct __guc_capture_parsed_output *n = devcoredump->snapshot.matched_node;
-
 	if (n) {
 		guc_capture_remove_stale_matches_from_list(guc->capture, n);
 		guc_capture_free_outlist_node(guc->capture, n);
-		devcoredump->snapshot.matched_node = NULL;
 	}
 }
 
diff --git a/drivers/gpu/drm/xe/xe_guc_capture.h b/drivers/gpu/drm/xe/xe_guc_capture.h
index 20a078dc4b85..e85af277be9c 100644
--- a/drivers/gpu/drm/xe/xe_guc_capture.h
+++ b/drivers/gpu/drm/xe/xe_guc_capture.h
@@ -11,10 +11,7 @@
 #include "xe_guc.h"
 #include "xe_guc_fwif.h"
 
-struct xe_exec_queue;
 struct xe_guc;
-struct xe_hw_engine;
-struct xe_hw_engine_snapshot;
 
 static inline enum guc_capture_list_class_type xe_guc_class_to_capture_class(u16 class)
 {
@@ -44,18 +41,13 @@ void xe_guc_capture_process(struct xe_guc *guc);
 int xe_guc_capture_getlist(struct xe_guc *guc, u32 owner, u32 type,
 			   enum guc_capture_list_class_type capture_class, void **outptr);
 int xe_guc_capture_getlistsize(struct xe_guc *guc, u32 owner, u32 type,
-			       enum guc_capture_list_class_type capture_class, size_t *size);
+				   enum guc_capture_list_class_type capture_class, size_t *size);
 int xe_guc_capture_getnullheader(struct xe_guc *guc, void **outptr, size_t *size);
 size_t xe_guc_capture_ads_input_worst_size(struct xe_guc *guc);
 const struct __guc_mmio_reg_descr_group *
 xe_guc_capture_get_reg_desc_list(struct xe_gt *gt, u32 owner, u32 type,
 				 enum guc_capture_list_class_type capture_class, bool is_ext);
-struct __guc_capture_parsed_output *xe_guc_capture_get_matching_and_lock(struct xe_exec_queue *q);
-void xe_engine_manual_capture(struct xe_hw_engine *hwe, struct xe_hw_engine_snapshot *snapshot);
-void xe_engine_snapshot_print(struct xe_hw_engine_snapshot *snapshot, struct drm_printer *p);
-void xe_engine_snapshot_capture_for_queue(struct xe_exec_queue *q);
 void xe_guc_capture_steered_list_init(struct xe_guc *guc);
-void xe_guc_capture_put_matched_nodes(struct xe_guc *guc);
 int xe_guc_capture_init(struct xe_guc *guc);
 
 #endif
diff --git a/drivers/gpu/drm/xe/xe_guc_capture_snapshot_types.h b/drivers/gpu/drm/xe/xe_guc_capture_snapshot_types.h
new file mode 100644
index 000000000000..76159cb8fcab
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_guc_capture_snapshot_types.h
@@ -0,0 +1,68 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2021-2024 Intel Corporation
+ */
+
+#ifndef _XE_GUC_CAPTURE_SNAPSHOT_TYPES_H
+#define _XE_GUC_CAPTURE_SNAPSHOT_TYPES_H
+
+#include <linux/types.h>
+#include <abi/guc_capture_abi.h>
+#include "xe_guc_fwif.h"
+
+struct drm_printer;
+struct guc_mmio_reg;
+struct xe_guc;
+struct xe_exec_queue;
+struct xe_hw_engine;
+
+enum xe_guc_capture_snapshot_source {
+	XE_ENGINE_CAPTURE_SOURCE_MANUAL,
+	XE_ENGINE_CAPTURE_SOURCE_GUC
+};
+
+/*
+ * struct xe_guc_capture_snapshot - extracted error capture node
+ *
+ * A single unit of extracted error-capture output data grouped together
+ * at an engine-instance level. We keep these nodes in a linked list.
+ * See cachelist and outlist below.
+ */
+struct xe_guc_capture_snapshot {
+	/*
+	 * A single set of 3 capture lists: a global-list
+	 * an engine-class-list and an engine-instance list.
+	 * outlist in __guc_capture_parsed_output will keep
+	 * a linked list of these nodes that will eventually
+	 * be detached from outlist and attached into to
+	 * xe_codedump in response to a context reset
+	 */
+	struct list_head link;
+	bool is_partial;
+	u32 eng_class;
+	u32 eng_inst;
+	u32 guc_id;
+	u32 lrca;
+	u32 type;
+	bool locked;
+	enum xe_guc_capture_snapshot_source source;
+	struct gcap_reg_list_info {
+		u32 vfid;
+		u32 num_regs;
+		struct guc_mmio_reg *regs;
+	} reginfo[GUC_STATE_CAPTURE_TYPE_MAX];
+#define GCAP_PARSED_REGLIST_INDEX_GLOBAL   BIT(GUC_STATE_CAPTURE_TYPE_GLOBAL)
+#define GCAP_PARSED_REGLIST_INDEX_ENGCLASS BIT(GUC_STATE_CAPTURE_TYPE_ENGINE_CLASS)
+};
+
+struct xe_guc_capture_snapshot *
+xe_guc_capture_snapshot_get(struct xe_guc *guc, struct xe_exec_queue *q,
+			    enum xe_guc_capture_snapshot_source src);
+void xe_guc_capture_snapshot_print(struct xe_guc *guc, struct xe_guc_capture_snapshot *node,
+				   struct drm_printer *p);
+void xe_guc_capture_snapshot_put(struct xe_guc *guc, struct xe_guc_capture_snapshot *snapshot);
+void xe_guc_capture_snapshot_store_manual_job(struct xe_guc *guc, struct xe_exec_queue *q);
+struct xe_guc_capture_snapshot *
+xe_guc_capture_snapshot_store_and_get_manual_hwe(struct xe_guc *guc, struct xe_hw_engine *hwe);
+
+#endif
diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c
index f9ecee5364d8..30c2bdf51958 100644
--- a/drivers/gpu/drm/xe/xe_guc_submit.c
+++ b/drivers/gpu/drm/xe/xe_guc_submit.c
@@ -28,6 +28,7 @@
 #include "xe_gt_printk.h"
 #include "xe_guc.h"
 #include "xe_guc_capture.h"
+#include "xe_guc_capture_snapshot_types.h"
 #include "xe_guc_ct.h"
 #include "xe_guc_exec_queue_types.h"
 #include "xe_guc_id_mgr.h"
@@ -1033,7 +1034,6 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
 	struct xe_gpu_scheduler *sched = &q->guc->sched;
 	struct xe_guc *guc = exec_queue_to_guc(q);
 	const char *process_name = "no process";
-	struct xe_device *xe = guc_to_xe(guc);
 	unsigned int fw_ref;
 	int err = -ETIME;
 	pid_t pid = -1;
@@ -1062,18 +1062,23 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
 		exec_queue_destroyed(q);
 
 	/*
-	 * If devcoredump not captured and GuC capture for the job is not ready
-	 * do manual capture first and decide later if we need to use it
+	 * If the queue has't been killed yet or we do not have a firmware-reported
+	 * GuC-Error-Capture node for the matching job, request GuC-Error-Capture to
+	 * store a manual capture within its internal list with a job-match.
+	 * xe_hw_engine_snapshot will decide later if it's needed.
 	 */
-	if (!exec_queue_killed(q) && !xe->devcoredump.captured &&
-	    !xe_guc_capture_get_matching_and_lock(q)) {
+	if (!exec_queue_killed(q) ||
+	    !xe_guc_capture_snapshot_get(guc, q, XE_ENGINE_CAPTURE_SOURCE_GUC)) {
 		/* take force wake before engine register manual capture */
 		fw_ref = xe_force_wake_get(gt_to_fw(q->gt), XE_FORCEWAKE_ALL);
 		if (!xe_force_wake_ref_has_domain(fw_ref, XE_FORCEWAKE_ALL))
 			xe_gt_info(q->gt, "failed to get forcewake for coredump capture\n");
-
-		xe_engine_snapshot_capture_for_queue(q);
-
+		/*
+		 * This will generate a manual capture node and store it in
+		 * This GuC Error Capture link-list as if it came from GuC
+		 * but with a source-id == manual-capture
+		 */
+		xe_guc_capture_snapshot_store_manual_job(guc, q);
 		xe_force_wake_put(gt_to_fw(q->gt), fw_ref);
 	}
 
diff --git a/drivers/gpu/drm/xe/xe_hw_engine.c b/drivers/gpu/drm/xe/xe_hw_engine.c
index c4b0dc3be39c..ddd91627e623 100644
--- a/drivers/gpu/drm/xe/xe_hw_engine.c
+++ b/drivers/gpu/drm/xe/xe_hw_engine.c
@@ -24,7 +24,8 @@
 #include "xe_gt_printk.h"
 #include "xe_gt_mcr.h"
 #include "xe_gt_topology.h"
-#include "xe_guc_capture.h"
+//#include "xe_guc_capture.h"
+#include "xe_guc_capture_snapshot_types.h"
 #include "xe_hw_engine_group.h"
 #include "xe_hw_fence.h"
 #include "xe_irq.h"
@@ -827,9 +828,9 @@ void xe_hw_engine_handle_irq(struct xe_hw_engine *hwe, u16 intr_vec)
 }
 
 /**
- * xe_hw_engine_snapshot_capture - Take a quick snapshot of the HW Engine.
+ * hw_engine_snapshot_capture - Take a quick snapshot of the HW Engine.
  * @hwe: Xe HW Engine.
- * @q: The exec queue object.
+ * @q: The exec queue object. (can be NULL for debugfs engine-register dump)
  *
  * This can be printed out in a later stage like during dev_coredump
  * analysis.
@@ -837,11 +838,12 @@ void xe_hw_engine_handle_irq(struct xe_hw_engine *hwe, u16 intr_vec)
  * Returns: a Xe HW Engine snapshot object that must be freed by the
  * caller, using `xe_hw_engine_snapshot_free`.
  */
-struct xe_hw_engine_snapshot *
-xe_hw_engine_snapshot_capture(struct xe_hw_engine *hwe, struct xe_exec_queue *q)
+static struct xe_hw_engine_snapshot *
+hw_engine_snapshot_capture(struct xe_hw_engine *hwe, struct xe_exec_queue *q)
 {
 	struct xe_hw_engine_snapshot *snapshot;
-	struct __guc_capture_parsed_output *node;
+	struct xe_guc_capture_snapshot *manual_node;
+	struct xe_guc *guc;
 
 	if (!xe_hw_engine_is_valid(hwe))
 		return NULL;
@@ -865,25 +867,66 @@ xe_hw_engine_snapshot_capture(struct xe_hw_engine *hwe, struct xe_exec_queue *q)
 		return snapshot;
 
 	if (q) {
-		/* If got guc capture, set source to GuC */
-		node = xe_guc_capture_get_matching_and_lock(q);
-		if (node) {
-			struct xe_device *xe = gt_to_xe(hwe->gt);
-			struct xe_devcoredump *coredump = &xe->devcoredump;
-
-			coredump->snapshot.matched_node = node;
-			xe_gt_dbg(hwe->gt, "Found and locked GuC-err-capture node");
-			return snapshot;
+		guc = &q->gt->uc.guc;
+		/* First find the pre-kill manual GuC-Err-Capture node for this job */
+		manual_node = xe_guc_capture_snapshot_get(guc, q,
+							  XE_ENGINE_CAPTURE_SOURCE_MANUAL);
+
+		/* Next, look for the GuC-Firmware reported node for this job */
+		snapshot->matched_node = xe_guc_capture_snapshot_get(guc, q,
+								     XE_ENGINE_CAPTURE_SOURCE_GUC);
+		if (!snapshot->matched_node) {
+			xe_gt_dbg(hwe->gt, "Can't find GUC-Sourced err-capture node");
+			snapshot->matched_node = manual_node;
+		} else if (manual_node) {
+			/* looks like we don't need the manually-captured node, return it */
+			xe_guc_capture_snapshot_put(guc, manual_node);
 		}
 	}
 
-	/* otherwise, do manual capture */
-	xe_engine_manual_capture(hwe, snapshot);
-	xe_gt_dbg(hwe->gt, "Proceeding with manual engine snapshot");
+	if (!snapshot->matched_node) {
+		guc = &hwe->gt->uc.guc;
+		/*
+		 * Fallback path - do an immediate jobless manual engine capture.
+		 * This will happen when debugfs is triggered to force an engine dump.
+		 */
+		snapshot->matched_node = xe_guc_capture_snapshot_store_and_get_manual_hwe(guc, hwe);
+		xe_gt_dbg(hwe->gt, "Fallback to jobless-manual-err-capture node");
+	}
 
 	return snapshot;
 }
 
+/**
+ * xe_engine_snapshot_capture_for_queue - Take snapshot of associated engine
+ * @q: The exec queue object
+ *
+ * Take snapshot of associated HW Engine
+ *
+ * Returns: None.
+ */
+void
+xe_engine_snapshot_capture_for_queue(struct xe_exec_queue *q)
+{
+	struct xe_device *xe = gt_to_xe(q->gt);
+	struct xe_devcoredump *coredump = &xe->devcoredump;
+	struct xe_hw_engine *hwe;
+	enum xe_hw_engine_id id;
+	u32 adj_logical_mask = q->logical_mask;
+
+	if (IS_SRIOV_VF(xe))
+		return;
+
+	for_each_hw_engine(hwe, q->gt, id) {
+		if (hwe->class != q->hwe->class ||
+		    !(BIT(hwe->logical_instance) & adj_logical_mask)) {
+			coredump->snapshot.hwe[id] = NULL;
+			continue;
+		}
+		coredump->snapshot.hwe[id] = hw_engine_snapshot_capture(hwe, q);
+	}
+}
+
 /**
  * xe_hw_engine_snapshot_free - Free all allocated objects for a given snapshot.
  * @snapshot: Xe HW Engine snapshot object.
@@ -898,17 +941,41 @@ void xe_hw_engine_snapshot_free(struct xe_hw_engine_snapshot *snapshot)
 		return;
 
 	gt = snapshot->hwe->gt;
-	/*
-	 * xe_guc_capture_put_matched_nodes is called here and from
-	 * xe_devcoredump_snapshot_free, to cover the 2 calling paths
-	 * of hw_engines - debugfs and devcoredump free.
-	 */
-	xe_guc_capture_put_matched_nodes(&gt->uc.guc);
+	xe_guc_capture_snapshot_put(&gt->uc.guc, snapshot->matched_node);
+	snapshot->matched_node = NULL;
 
 	kfree(snapshot->name);
 	kfree(snapshot);
 }
 
+/**
+ * xe_engine_snapshot_print - Print out a given Xe HW Engine snapshot.
+ * @snapshot: Xe HW Engine snapshot object.
+ * @p: drm_printer where it will be printed out.
+ *
+ * This function prints out a given Xe HW Engine snapshot object.
+ */
+void xe_engine_snapshot_print(struct xe_hw_engine_snapshot *snapshot, struct drm_printer *p)
+{
+	struct xe_gt *gt;
+
+	if (!snapshot)
+		return;
+
+	gt = snapshot->hwe->gt;
+
+	drm_printf(p, "%s (physical), logical instance=%d\n",
+		   snapshot->name ? snapshot->name : "",
+		   snapshot->logical_instance);
+	drm_printf(p, "\tForcewake: domain 0x%x, ref %d\n",
+		   snapshot->forcewake.domain, snapshot->forcewake.ref);
+	drm_printf(p, "\tReserved: %s\n",
+		   str_yes_no(snapshot->kernel_reserved));
+	drm_puts(p, "\n");
+
+	xe_guc_capture_snapshot_print(&gt->uc.guc, snapshot->matched_node, p);
+}
+
 /**
  * xe_hw_engine_print - Xe HW Engine Print.
  * @hwe: Hardware Engine.
@@ -920,7 +987,7 @@ void xe_hw_engine_print(struct xe_hw_engine *hwe, struct drm_printer *p)
 {
 	struct xe_hw_engine_snapshot *snapshot;
 
-	snapshot = xe_hw_engine_snapshot_capture(hwe, NULL);
+	snapshot = hw_engine_snapshot_capture(hwe, NULL);
 	xe_engine_snapshot_print(snapshot, p);
 	xe_hw_engine_snapshot_free(snapshot);
 }
diff --git a/drivers/gpu/drm/xe/xe_hw_engine.h b/drivers/gpu/drm/xe/xe_hw_engine.h
index 6b5f9fa2a594..845153fbc149 100644
--- a/drivers/gpu/drm/xe/xe_hw_engine.h
+++ b/drivers/gpu/drm/xe/xe_hw_engine.h
@@ -55,9 +55,9 @@ void xe_hw_engine_handle_irq(struct xe_hw_engine *hwe, u16 intr_vec);
 void xe_hw_engine_enable_ring(struct xe_hw_engine *hwe);
 u32 xe_hw_engine_mask_per_class(struct xe_gt *gt,
 				enum xe_engine_class engine_class);
-struct xe_hw_engine_snapshot *
-xe_hw_engine_snapshot_capture(struct xe_hw_engine *hwe, struct xe_exec_queue *q);
+void xe_engine_snapshot_capture_for_queue(struct xe_exec_queue *q);
 void xe_hw_engine_snapshot_free(struct xe_hw_engine_snapshot *snapshot);
+void xe_engine_snapshot_print(struct xe_hw_engine_snapshot *snapshot, struct drm_printer *p);
 void xe_hw_engine_print(struct xe_hw_engine *hwe, struct drm_printer *p);
 void xe_hw_engine_setup_default_lrc_state(struct xe_hw_engine *hwe);
 
diff --git a/drivers/gpu/drm/xe/xe_hw_engine_types.h b/drivers/gpu/drm/xe/xe_hw_engine_types.h
index e14bee95e364..ea6b60c819d4 100644
--- a/drivers/gpu/drm/xe/xe_hw_engine_types.h
+++ b/drivers/gpu/drm/xe/xe_hw_engine_types.h
@@ -152,11 +152,7 @@ struct xe_hw_engine {
 	struct xe_hw_engine_group *hw_engine_group;
 };
 
-enum xe_hw_engine_snapshot_source_id {
-	XE_ENGINE_CAPTURE_SOURCE_MANUAL,
-	XE_ENGINE_CAPTURE_SOURCE_GUC
-};
-
+struct xe_guc_capture_snapshot;
 /**
  * struct xe_hw_engine_snapshot - Hardware engine snapshot
  *
@@ -180,6 +176,13 @@ struct xe_hw_engine_snapshot {
 	u32 mmio_base;
 	/** @kernel_reserved: Engine reserved, can't be used by userspace */
 	bool kernel_reserved;
+	/**
+	 * @matched_node: GuC Capture snapshot:
+	 * The matched capture node for the timedout job
+	 * this single-node tracker works because devcoredump will always only
+	 * produce one hw-engine capture per devcoredump event
+	 */
+	struct xe_guc_capture_snapshot *matched_node;
 };
 
 #endif
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* ✓ CI.Patch_applied: success for Maintenence of devcoredump <-> GuC-Err-Capture plumbing
  2024-11-17 18:43 [PATCH 0/1] Maintenence of devcoredump <-> GuC-Err-Capture plumbing Alan Previn
  2024-11-17 18:44 ` [PATCH 1/1] drm/xe/guc/capture: " Alan Previn
@ 2024-11-18  2:22 ` Patchwork
  2024-11-18  2:22 ` ✗ CI.checkpatch: warning " Patchwork
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2024-11-18  2:22 UTC (permalink / raw)
  To: Alan Previn; +Cc: intel-xe

== Series Details ==

Series: Maintenence of devcoredump <-> GuC-Err-Capture plumbing
URL   : https://patchwork.freedesktop.org/series/141459/
State : success

== Summary ==

=== Applying kernel patches on branch 'drm-tip' with base: ===
Base commit: 5b1f614ccf10 drm-tip: 2024y-11m-18d-00h-28m-21s UTC integration manifest
=== git am output follows ===
Applying: drm/xe/guc/capture: Maintenence of devcoredump <-> GuC-Err-Capture plumbing



^ permalink raw reply	[flat|nested] 12+ messages in thread

* ✗ CI.checkpatch: warning for Maintenence of devcoredump <-> GuC-Err-Capture plumbing
  2024-11-17 18:43 [PATCH 0/1] Maintenence of devcoredump <-> GuC-Err-Capture plumbing Alan Previn
  2024-11-17 18:44 ` [PATCH 1/1] drm/xe/guc/capture: " Alan Previn
  2024-11-18  2:22 ` ✓ CI.Patch_applied: success for " Patchwork
@ 2024-11-18  2:22 ` Patchwork
  2024-11-18  2:23 ` ✓ CI.KUnit: success " Patchwork
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2024-11-18  2:22 UTC (permalink / raw)
  To: Alan Previn; +Cc: intel-xe

== Series Details ==

Series: Maintenence of devcoredump <-> GuC-Err-Capture plumbing
URL   : https://patchwork.freedesktop.org/series/141459/
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
30ab6715fc09baee6cc14cb3c89ad8858688d474
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 2ba721d8f074aae6da1556e90e73acbd668399d8
Author: Alan Previn <alan.previn.teres.alexis@intel.com>
Date:   Sun Nov 17 10:44:00 2024 -0800

    drm/xe/guc/capture: Maintenence of devcoredump <-> GuC-Err-Capture plumbing
    
    The order of the devcoredump event flow is:
    drm-scheduler -> guc-submission-execq-timed-out-job ->
    guc-submission-kill-job -> xe-devcoredump (once the work
    is confirmed to have been killed).
    
    As we are aware, the GuC-FW IRQ for error-capture delivery
    and extraction could have happenned before the start of
    guc-execq-timed-out-job or the middle of it (before or
    during the explicit kill) or not at all. Thus, today, the
    above flow takes a manual capture first before triggering
    the kill-job just in case we need it.
    
    The structure layering of devcoredump internals are:
    xe_devcoredump_snapshot -> xe_foo_snapshot (where foo
    can be any data dump associated to the job was killed).
    Foo includes the xe_hw_engine_snapshot. Since GuC-Error-Capture
    provides just the register dump of an engine, GuC-Err-Capture
    snapshots should be managed by the xe_hw_engine_snapshot.
    That isn't the case today.
    
    Furthermode, neither xe_devcoredump_snapshot nor
    xe_hw_engine_snapshot even exists at the start of
    guc-submission-execq-timed-out-job. Thus, the first
    manual capture node has no home. However, today,
    GuC-Error-Capture stores capture snapshots off the
    top-level xe_devcoredump_snapshot's matched_node.
    GuC-Error-Capture also had absorbed the function for
    xe_hw_engine_snapshot generation.
         NOTE: Existing code isn't broken because xe_devcoredump
         is not dynamically allocated and designed to hold a
         single event at a time (i.e. single engine dump).
         But it's not scalable for future improvement.
    
    Thus this patch:
    1. Moves "matched_node" from xe_devcoredump_snapshot to
       xe_hw_engine_snapshot.
    2. Relocates the functions for xe_hw_engine_snapshot generation
       and printing back to xe_hw_engine.c. However, split out the
       register dump printing so it stays within GuC-Error-Capture
       (so we don't need to maintain two sets of register lists).
    3. Keep both the manual and firmware capture nodes within
       GuC-Error-Capture subsystem's linked list until
       xe_hw_engine_snapshot gets and puts them later.
    4. Give xe_hw_engine_snapshot the control and ability to
       query GuC-Error-Capture for matching snapshots while choosing
       between manual vs firmware capture getting/putting node.
    5. While at it, relocate (and rename) key structures, enums
       and function protos to xe_guc_capture_snapshot_types.h
       (as an inter-module header) for xe_hw_engine_snapshot to use.
    6. Since xe_hw_engine_snapshot can also be called by via debugfs
       without a job, create a new function that does a manual capture
       of engine registers without any associated job.
    
    Signed-off-by: Alan Previn <alan.previn.teres.alexis@intel.com>
+ /mt/dim checkpatch 5b1f614ccf1008e7aee531bf76bb639802e0df88 drm-intel
2ba721d8f074 drm/xe/guc/capture: Maintenence of devcoredump <-> GuC-Err-Capture plumbing
-:793: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#793: 
new file mode 100644

total: 0 errors, 1 warnings, 0 checks, 1002 lines checked



^ permalink raw reply	[flat|nested] 12+ messages in thread

* ✓ CI.KUnit: success for Maintenence of devcoredump <-> GuC-Err-Capture plumbing
  2024-11-17 18:43 [PATCH 0/1] Maintenence of devcoredump <-> GuC-Err-Capture plumbing Alan Previn
                   ` (2 preceding siblings ...)
  2024-11-18  2:22 ` ✗ CI.checkpatch: warning " Patchwork
@ 2024-11-18  2:23 ` Patchwork
  2024-11-18  2:41 ` ✓ CI.Build: " Patchwork
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2024-11-18  2:23 UTC (permalink / raw)
  To: Alan Previn; +Cc: intel-xe

== Series Details ==

Series: Maintenence of devcoredump <-> GuC-Err-Capture plumbing
URL   : https://patchwork.freedesktop.org/series/141459/
State : success

== Summary ==

+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[02:22:45] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[02:22:49] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json ARCH=um O=.kunit --jobs=48
../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)
      |      ^~~~~~~~~~~~~~~~~

[02:23:17] Starting KUnit Kernel (1/1)...
[02:23:17] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[02:23:18] =================== guc_dbm (7 subtests) ===================
[02:23:18] [PASSED] test_empty
[02:23:18] [PASSED] test_default
[02:23:18] ======================== test_size  ========================
[02:23:18] [PASSED] 4
[02:23:18] [PASSED] 8
[02:23:18] [PASSED] 32
[02:23:18] [PASSED] 256
[02:23:18] ==================== [PASSED] test_size ====================
[02:23:18] ======================= test_reuse  ========================
[02:23:18] [PASSED] 4
[02:23:18] [PASSED] 8
[02:23:18] [PASSED] 32
[02:23:18] [PASSED] 256
[02:23:18] =================== [PASSED] test_reuse ====================
[02:23:18] =================== test_range_overlap  ====================
[02:23:18] [PASSED] 4
[02:23:18] [PASSED] 8
[02:23:18] [PASSED] 32
[02:23:18] [PASSED] 256
[02:23:18] =============== [PASSED] test_range_overlap ================
[02:23:18] =================== test_range_compact  ====================
[02:23:18] [PASSED] 4
[02:23:18] [PASSED] 8
[02:23:18] [PASSED] 32
[02:23:18] [PASSED] 256
[02:23:18] =============== [PASSED] test_range_compact ================
[02:23:18] ==================== test_range_spare  =====================
[02:23:18] [PASSED] 4
[02:23:18] [PASSED] 8
[02:23:18] [PASSED] 32
[02:23:18] [PASSED] 256
[02:23:18] ================ [PASSED] test_range_spare =================
[02:23:18] ===================== [PASSED] guc_dbm =====================
[02:23:18] =================== guc_idm (6 subtests) ===================
[02:23:18] [PASSED] bad_init
[02:23:18] [PASSED] no_init
[02:23:18] [PASSED] init_fini
[02:23:18] [PASSED] check_used
[02:23:18] [PASSED] check_quota
[02:23:18] [PASSED] check_all
[02:23:18] ===================== [PASSED] guc_idm =====================
[02:23:18] ================== no_relay (3 subtests) ===================
[02:23:18] [PASSED] xe_drops_guc2pf_if_not_ready
[02:23:18] [PASSED] xe_drops_guc2vf_if_not_ready
[02:23:18] [PASSED] xe_rejects_send_if_not_ready
[02:23:18] ==================== [PASSED] no_relay =====================
[02:23:18] ================== pf_relay (14 subtests) ==================
[02:23:18] [PASSED] pf_rejects_guc2pf_too_short
[02:23:18] [PASSED] pf_rejects_guc2pf_too_long
[02:23:18] [PASSED] pf_rejects_guc2pf_no_payload
[02:23:18] [PASSED] pf_fails_no_payload
[02:23:18] [PASSED] pf_fails_bad_origin
[02:23:18] [PASSED] pf_fails_bad_type
[02:23:18] [PASSED] pf_txn_reports_error
[02:23:18] [PASSED] pf_txn_sends_pf2guc
[02:23:18] [PASSED] pf_sends_pf2guc
[02:23:18] [SKIPPED] pf_loopback_nop
[02:23:18] [SKIPPED] pf_loopback_echo
[02:23:18] [SKIPPED] pf_loopback_fail
[02:23:18] [SKIPPED] pf_loopback_busy
[02:23:18] [SKIPPED] pf_loopback_retry
[02:23:18] ==================== [PASSED] pf_relay =====================
[02:23:18] ================== vf_relay (3 subtests) ===================
[02:23:18] [PASSED] vf_rejects_guc2vf_too_short
[02:23:18] [PASSED] vf_rejects_guc2vf_too_long
[02:23:18] [PASSED] vf_rejects_guc2vf_no_payload
[02:23:18] ==================== [PASSED] vf_relay =====================
[02:23:18] ================= pf_service (11 subtests) =================
[02:23:18] [PASSED] pf_negotiate_any
[02:23:18] [PASSED] pf_negotiate_base_match
[02:23:18] [PASSED] pf_negotiate_base_newer
[02:23:18] [PASSED] pf_negotiate_base_next
[02:23:18] [SKIPPED] pf_negotiate_base_older
[02:23:18] [PASSED] pf_negotiate_base_prev
[02:23:18] [PASSED] pf_negotiate_latest_match
[02:23:18] [PASSED] pf_negotiate_latest_newer
[02:23:18] [PASSED] pf_negotiate_latest_next
[02:23:18] [SKIPPED] pf_negotiate_latest_older
[02:23:18] [SKIPPED] pf_negotiate_latest_prev
[02:23:18] =================== [PASSED] pf_service ====================
[02:23:18] ===================== lmtt (1 subtest) =====================
[02:23:18] ======================== test_ops  =========================
[02:23:18] [PASSED] 2-level
[02:23:18] [PASSED] multi-level
[02:23:18] ==================== [PASSED] test_ops =====================
[02:23:18] ====================== [PASSED] lmtt =======================
[02:23:18] =================== xe_mocs (2 subtests) ===================
[02:23:18] ================ xe_live_mocs_kernel_kunit  ================
[02:23:18] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[02:23:18] ================ xe_live_mocs_reset_kunit  =================
[02:23:18] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[02:23:18] ==================== [SKIPPED] xe_mocs =====================
[02:23:18] ================= xe_migrate (2 subtests) ==================
[02:23:18] ================= xe_migrate_sanity_kunit  =================
[02:23:18] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[02:23:18] ================== xe_validate_ccs_kunit  ==================
[02:23:18] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[02:23:18] =================== [SKIPPED] xe_migrate ===================
[02:23:18] ================== xe_dma_buf (1 subtest) ==================
[02:23:18] ==================== xe_dma_buf_kunit  =====================
[02:23:18] ================ [SKIPPED] xe_dma_buf_kunit ================
[02:23:18] =================== [SKIPPED] xe_dma_buf ===================
[02:23:18] ==================== xe_bo (3 subtests) ====================
[02:23:18] ================== xe_ccs_migrate_kunit  ===================
[02:23:18] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[02:23:18] ==================== xe_bo_evict_kunit  ====================
[02:23:18] =============== [SKIPPED] xe_bo_evict_kunit ================
[02:23:18] =================== xe_bo_shrink_kunit  ====================
[02:23:18] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[02:23:18] ===================== [SKIPPED] xe_bo ======================
[02:23:18] ==================== args (11 subtests) ====================
[02:23:18] [PASSED] count_args_test
[02:23:18] [PASSED] call_args_example
[02:23:18] [PASSED] call_args_test
[02:23:18] [PASSED] drop_first_arg_example
[02:23:18] [PASSED] drop_first_arg_test
[02:23:18] [PASSED] first_arg_example
[02:23:18] [PASSED] first_arg_test
[02:23:18] [PASSED] last_arg_example
[02:23:18] [PASSED] last_arg_test
[02:23:18] [PASSED] pick_arg_example
[02:23:18] [PASSED] sep_comma_examplestty: 'standard input': Inappropriate ioctl for device

[02:23:18] ====================== [PASSED] args =======================
[02:23:18] =================== xe_pci (2 subtests) ====================
[02:23:18] [PASSED] xe_gmdid_graphics_ip
[02:23:18] [PASSED] xe_gmdid_media_ip
[02:23:18] ===================== [PASSED] xe_pci ======================
[02:23:18] =================== xe_rtp (2 subtests) ====================
[02:23:18] =============== xe_rtp_process_to_sr_tests  ================
[02:23:18] [PASSED] coalesce-same-reg
[02:23:18] [PASSED] no-match-no-add
[02:23:18] [PASSED] match-or
[02:23:18] [PASSED] match-or-xfail
[02:23:18] [PASSED] no-match-no-add-multiple-rules
[02:23:18] [PASSED] two-regs-two-entries
[02:23:18] [PASSED] clr-one-set-other
[02:23:18] [PASSED] set-field
[02:23:18] [PASSED] conflict-duplicate
[02:23:18] [PASSED] conflict-not-disjoint
[02:23:18] [PASSED] conflict-reg-type
[02:23:18] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[02:23:18] ================== xe_rtp_process_tests  ===================
[02:23:18] [PASSED] active1
[02:23:18] [PASSED] active2
[02:23:18] [PASSED] active-inactive
[02:23:18] [PASSED] inactive-active
[02:23:18] [PASSED] inactive-1st_or_active-inactive
[02:23:18] [PASSED] inactive-2nd_or_active-inactive
[02:23:18] [PASSED] inactive-last_or_active-inactive
[02:23:18] [PASSED] inactive-no_or_active-inactive
[02:23:18] ============== [PASSED] xe_rtp_process_tests ===============
[02:23:18] ===================== [PASSED] xe_rtp ======================
[02:23:18] ==================== xe_wa (1 subtest) =====================
[02:23:18] ======================== xe_wa_gt  =========================
[02:23:18] [PASSED] TIGERLAKE (B0)
[02:23:18] [PASSED] DG1 (A0)
[02:23:18] [PASSED] DG1 (B0)
[02:23:18] [PASSED] ALDERLAKE_S (A0)
[02:23:18] [PASSED] ALDERLAKE_S (B0)
[02:23:18] [PASSED] ALDERLAKE_S (C0)
[02:23:18] [PASSED] ALDERLAKE_S (D0)
[02:23:18] [PASSED] ALDERLAKE_P (A0)
[02:23:18] [PASSED] ALDERLAKE_P (B0)
[02:23:18] [PASSED] ALDERLAKE_P (C0)
[02:23:18] [PASSED] ALDERLAKE_S_RPLS (D0)
[02:23:18] [PASSED] ALDERLAKE_P_RPLU (E0)
[02:23:18] [PASSED] DG2_G10 (C0)
[02:23:18] [PASSED] DG2_G11 (B1)
[02:23:18] [PASSED] DG2_G12 (A1)
[02:23:18] [PASSED] METEORLAKE (g:A0, m:A0)
[02:23:18] [PASSED] METEORLAKE (g:A0, m:A0)
[02:23:18] [PASSED] METEORLAKE (g:A0, m:A0)
[02:23:18] [PASSED] LUNARLAKE (g:A0, m:A0)
[02:23:18] [PASSED] LUNARLAKE (g:B0, m:A0)
[02:23:18] [PASSED] BATTLEMAGE (g:A0, m:A1)
[02:23:18] ==================== [PASSED] xe_wa_gt =====================
[02:23:18] ====================== [PASSED] xe_wa ======================
[02:23:18] ============================================================
[02:23:18] Testing complete. Ran 122 tests: passed: 106, skipped: 16
[02:23:18] Elapsed time: 32.626s total, 4.425s configuring, 27.985s building, 0.210s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[02:23:18] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[02:23:19] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json ARCH=um O=.kunit --jobs=48
../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)
      |      ^~~~~~~~~~~~~~~~~

[02:23:42] Starting KUnit Kernel (1/1)...
[02:23:42] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[02:23:42] ================== drm_buddy (7 subtests) ==================
[02:23:42] [PASSED] drm_test_buddy_alloc_limit
[02:23:42] [PASSED] drm_test_buddy_alloc_optimistic
[02:23:42] [PASSED] drm_test_buddy_alloc_pessimistic
[02:23:42] [PASSED] drm_test_buddy_alloc_pathological
[02:23:42] [PASSED] drm_test_buddy_alloc_contiguous
[02:23:42] [PASSED] drm_test_buddy_alloc_clear
[02:23:42] [PASSED] drm_test_buddy_alloc_range_bias
[02:23:42] ==================== [PASSED] drm_buddy ====================
[02:23:42] ============= drm_cmdline_parser (40 subtests) =============
[02:23:42] [PASSED] drm_test_cmdline_force_d_only
[02:23:42] [PASSED] drm_test_cmdline_force_D_only_dvi
[02:23:42] [PASSED] drm_test_cmdline_force_D_only_hdmi
[02:23:42] [PASSED] drm_test_cmdline_force_D_only_not_digital
[02:23:42] [PASSED] drm_test_cmdline_force_e_only
[02:23:42] [PASSED] drm_test_cmdline_res
[02:23:42] [PASSED] drm_test_cmdline_res_vesa
[02:23:42] [PASSED] drm_test_cmdline_res_vesa_rblank
[02:23:42] [PASSED] drm_test_cmdline_res_rblank
[02:23:42] [PASSED] drm_test_cmdline_res_bpp
[02:23:42] [PASSED] drm_test_cmdline_res_refresh
[02:23:42] [PASSED] drm_test_cmdline_res_bpp_refresh
[02:23:42] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[02:23:42] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[02:23:42] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[02:23:42] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[02:23:42] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[02:23:42] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[02:23:42] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[02:23:42] [PASSED] drm_test_cmdline_res_margins_force_on
[02:23:42] [PASSED] drm_test_cmdline_res_vesa_margins
[02:23:42] [PASSED] drm_test_cmdline_name
[02:23:42] [PASSED] drm_test_cmdline_name_bpp
[02:23:42] [PASSED] drm_test_cmdline_name_option
[02:23:42] [PASSED] drm_test_cmdline_name_bpp_option
[02:23:42] [PASSED] drm_test_cmdline_rotate_0
[02:23:42] [PASSED] drm_test_cmdline_rotate_90
[02:23:42] [PASSED] drm_test_cmdline_rotate_180
[02:23:42] [PASSED] drm_test_cmdline_rotate_270
[02:23:42] [PASSED] drm_test_cmdline_hmirror
[02:23:42] [PASSED] drm_test_cmdline_vmirror
[02:23:42] [PASSED] drm_test_cmdline_margin_options
[02:23:42] [PASSED] drm_test_cmdline_multiple_options
[02:23:42] [PASSED] drm_test_cmdline_bpp_extra_and_option
[02:23:42] [PASSED] drm_test_cmdline_extra_and_option
[02:23:42] [PASSED] drm_test_cmdline_freestanding_options
[02:23:42] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[02:23:42] [PASSED] drm_test_cmdline_panel_orientation
[02:23:42] ================ drm_test_cmdline_invalid  =================
[02:23:42] [PASSED] margin_only
[02:23:42] [PASSED] interlace_only
[02:23:42] [PASSED] res_missing_x
[02:23:42] [PASSED] res_missing_y
[02:23:42] [PASSED] res_bad_y
[02:23:42] [PASSED] res_missing_y_bpp
[02:23:42] [PASSED] res_bad_bpp
[02:23:42] [PASSED] res_bad_refresh
[02:23:42] [PASSED] res_bpp_refresh_force_on_off
[02:23:42] [PASSED] res_invalid_mode
[02:23:42] [PASSED] res_bpp_wrong_place_mode
[02:23:42] [PASSED] name_bpp_refresh
[02:23:42] [PASSED] name_refresh
[02:23:42] [PASSED] name_refresh_wrong_mode
[02:23:42] [PASSED] name_refresh_invalid_mode
[02:23:42] [PASSED] rotate_multiple
[02:23:42] [PASSED] rotate_invalid_val
[02:23:42] [PASSED] rotate_truncated
[02:23:42] [PASSED] invalid_option
[02:23:42] [PASSED] invalid_tv_option
[02:23:42] [PASSED] truncated_tv_option
[02:23:42] ============ [PASSED] drm_test_cmdline_invalid =============
[02:23:42] =============== drm_test_cmdline_tv_options  ===============
[02:23:42] [PASSED] NTSC
[02:23:42] [PASSED] NTSC_443
[02:23:42] [PASSED] NTSC_J
[02:23:42] [PASSED] PAL
[02:23:42] [PASSED] PAL_M
[02:23:42] [PASSED] PAL_N
[02:23:42] [PASSED] SECAM
[02:23:42] [PASSED] MONO_525
[02:23:42] [PASSED] MONO_625
[02:23:42] =========== [PASSED] drm_test_cmdline_tv_options ===========
[02:23:42] =============== [PASSED] drm_cmdline_parser ================
[02:23:42] ========== drmm_connector_hdmi_init (19 subtests) ==========
[02:23:42] [PASSED] drm_test_connector_hdmi_init_valid
[02:23:42] [PASSED] drm_test_connector_hdmi_init_bpc_8
[02:23:42] [PASSED] drm_test_connector_hdmi_init_bpc_10
[02:23:42] [PASSED] drm_test_connector_hdmi_init_bpc_12
[02:23:42] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[02:23:42] [PASSED] drm_test_connector_hdmi_init_bpc_null
[02:23:42] [PASSED] drm_test_connector_hdmi_init_formats_empty
[02:23:42] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[02:23:42] [PASSED] drm_test_connector_hdmi_init_null_ddc
[02:23:42] [PASSED] drm_test_connector_hdmi_init_null_product
[02:23:42] [PASSED] drm_test_connector_hdmi_init_null_vendor
[02:23:42] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[02:23:42] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[02:23:42] [PASSED] drm_test_connector_hdmi_init_product_valid
[02:23:42] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[02:23:42] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[02:23:42] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[02:23:42] ========= drm_test_connector_hdmi_init_type_valid  =========
[02:23:42] [PASSED] HDMI-A
[02:23:42] [PASSED] HDMI-B
[02:23:42] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[02:23:42] ======== drm_test_connector_hdmi_init_type_invalid  ========
[02:23:42] [PASSED] Unknown
[02:23:42] [PASSED] VGA
[02:23:42] [PASSED] DVI-I
[02:23:42] [PASSED] DVI-D
[02:23:42] [PASSED] DVI-A
[02:23:42] [PASSED] Composite
[02:23:42] [PASSED] SVIDEO
[02:23:42] [PASSED] LVDS
[02:23:42] [PASSED] Component
[02:23:42] [PASSED] DIN
[02:23:42] [PASSED] DP
[02:23:42] [PASSED] TV
[02:23:42] [PASSED] eDP
[02:23:42] [PASSED] Virtual
[02:23:42] [PASSED] DSI
[02:23:42] [PASSED] DPI
[02:23:42] [PASSED] Writeback
[02:23:42] [PASSED] SPI
[02:23:42] [PASSED] USB
[02:23:42] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[02:23:42] ============ [PASSED] drmm_connector_hdmi_init =============
[02:23:42] ============= drmm_connector_init (3 subtests) =============
[02:23:42] [PASSED] drm_test_drmm_connector_init
[02:23:42] [PASSED] drm_test_drmm_connector_init_null_ddc
[02:23:42] ========= drm_test_drmm_connector_init_type_valid  =========
[02:23:42] [PASSED] Unknown
[02:23:42] [PASSED] VGA
[02:23:42] [PASSED] DVI-I
[02:23:42] [PASSED] DVI-D
[02:23:42] [PASSED] DVI-A
[02:23:42] [PASSED] Composite
[02:23:42] [PASSED] SVIDEO
[02:23:42] [PASSED] LVDS
[02:23:42] [PASSED] Component
[02:23:42] [PASSED] DIN
[02:23:42] [PASSED] DP
[02:23:42] [PASSED] HDMI-A
[02:23:42] [PASSED] HDMI-B
[02:23:42] [PASSED] TV
[02:23:42] [PASSED] eDP
[02:23:42] [PASSED] Virtual
[02:23:42] [PASSED] DSI
[02:23:42] [PASSED] DPI
[02:23:42] [PASSED] Writeback
[02:23:42] [PASSED] SPI
[02:23:42] [PASSED] USB
[02:23:42] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[02:23:42] =============== [PASSED] drmm_connector_init ===============
[02:23:42] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[02:23:42] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[02:23:42] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[02:23:42] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[02:23:42] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[02:23:42] ========== drm_test_get_tv_mode_from_name_valid  ===========
[02:23:42] [PASSED] NTSC
[02:23:42] [PASSED] NTSC-443
[02:23:42] [PASSED] NTSC-J
[02:23:42] [PASSED] PAL
[02:23:42] [PASSED] PAL-M
[02:23:42] [PASSED] PAL-N
[02:23:42] [PASSED] SECAM
[02:23:42] [PASSED] Mono
[02:23:42] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[02:23:42] [PASSED] drm_test_get_tv_mode_from_name_truncated
[02:23:42] ============ [PASSED] drm_get_tv_mode_from_name ============
[02:23:42] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[02:23:42] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[02:23:42] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[02:23:42] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[02:23:42] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[02:23:42] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[02:23:42] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[02:23:42] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid  =
[02:23:42] [PASSED] VIC 96
[02:23:42] [PASSED] VIC 97
[02:23:42] [PASSED] VIC 101
[02:23:42] [PASSED] VIC 102
[02:23:42] [PASSED] VIC 106
[02:23:42] [PASSED] VIC 107
[02:23:42] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[02:23:42] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[02:23:42] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[02:23:42] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[02:23:42] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[02:23:42] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[02:23:42] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[02:23:42] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[02:23:42] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name  ====
[02:23:42] [PASSED] Automatic
[02:23:42] [PASSED] Full
[02:23:42] [PASSED] Limited 16:235
[02:23:42] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[02:23:42] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[02:23:42] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[02:23:42] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[02:23:42] === drm_test_drm_hdmi_connector_get_output_format_name  ====
[02:23:42] [PASSED] RGB
[02:23:42] [PASSED] YUV 4:2:0
[02:23:42] [PASSED] YUV 4:2:2
[02:23:42] [PASSED] YUV 4:4:4
[02:23:42] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[02:23:42] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[02:23:42] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[02:23:42] ============= drm_damage_helper (21 subtests) ==============
[02:23:42] [PASSED] drm_test_damage_iter_no_damage
[02:23:42] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[02:23:42] [PASSED] drm_test_damage_iter_no_damage_src_moved
[02:23:42] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[02:23:42] [PASSED] drm_test_damage_iter_no_damage_not_visible
[02:23:42] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[02:23:42] [PASSED] drm_test_damage_iter_no_damage_no_fb
[02:23:42] [PASSED] drm_test_damage_iter_simple_damage
[02:23:42] [PASSED] drm_test_damage_iter_single_damage
[02:23:42] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[02:23:42] [PASSED] drm_test_damage_iter_single_damage_outside_src
[02:23:42] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[02:23:42] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[02:23:42] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[02:23:42] [PASSED] drm_test_damage_iter_single_damage_src_moved
[02:23:42] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[02:23:42] [PASSED] drm_test_damage_iter_damage
[02:23:42] [PASSED] drm_test_damage_iter_damage_one_intersect
[02:23:42] [PASSED] drm_test_damage_iter_damage_one_outside
[02:23:42] [PASSED] drm_test_damage_iter_damage_src_moved
[02:23:42] [PASSED] drm_test_damage_iter_damage_not_visible
[02:23:42] ================ [PASSED] drm_damage_helper ================
[02:23:42] ============== drm_dp_mst_helper (3 subtests) ==============
[02:23:42] ============== drm_test_dp_mst_calc_pbn_mode  ==============
[02:23:42] [PASSED] Clock 154000 BPP 30 DSC disabled
[02:23:42] [PASSED] Clock 234000 BPP 30 DSC disabled
[02:23:42] [PASSED] Clock 297000 BPP 24 DSC disabled
[02:23:42] [PASSED] Clock 332880 BPP 24 DSC enabled
[02:23:42] [PASSED] Clock 324540 BPP 24 DSC enabled
[02:23:42] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[02:23:42] ============== drm_test_dp_mst_calc_pbn_div  ===============
[02:23:42] [PASSED] Link rate 2000000 lane count 4
[02:23:42] [PASSED] Link rate 2000000 lane count 2
[02:23:42] [PASSED] Link rate 2000000 lane count 1
[02:23:42] [PASSED] Link rate 1350000 lane count 4
[02:23:42] [PASSED] Link rate 1350000 lane count 2
[02:23:42] [PASSED] Link rate 1350000 lane count 1
[02:23:42] [PASSED] Link rate 1000000 lane count 4
[02:23:42] [PASSED] Link rate 1000000 lane count 2
[02:23:42] [PASSED] Link rate 1000000 lane count 1
[02:23:42] [PASSED] Link rate 810000 lane count 4
[02:23:42] [PASSED] Link rate 810000 lane count 2
[02:23:42] [PASSED] Link rate 810000 lane count 1
[02:23:42] [PASSED] Link rate 540000 lane count 4
[02:23:42] [PASSED] Link rate 540000 lane count 2
[02:23:42] [PASSED] Link rate 540000 lane count 1
[02:23:42] [PASSED] Link rate 270000 lane count 4
[02:23:42] [PASSED] Link rate 270000 lane count 2
[02:23:42] [PASSED] Link rate 270000 lane count 1
[02:23:42] [PASSED] Link rate 162000 lane count 4
[02:23:42] [PASSED] Link rate 162000 lane count 2
[02:23:42] [PASSED] Link rate 162000 lane count 1
[02:23:42] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[02:23:42] ========= drm_test_dp_mst_sideband_msg_req_decode  =========
[02:23:42] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[02:23:42] [PASSED] DP_POWER_UP_PHY with port number
[02:23:42] [PASSED] DP_POWER_DOWN_PHY with port number
[02:23:42] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[02:23:42] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[02:23:42] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[02:23:42] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[02:23:42] [PASSED] DP_QUERY_PAYLOAD with port number
[02:23:42] [PASSED] DP_QUERY_PAYLOAD with VCPI
[02:23:42] [PASSED] DP_REMOTE_DPCD_READ with port number
[02:23:42] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[02:23:42] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[02:23:42] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[02:23:42] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[02:23:42] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[02:23:42] [PASSED] DP_REMOTE_I2C_READ with port number
[02:23:42] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[02:23:42] [PASSED] DP_REMOTE_I2C_READ with transactions array
[02:23:42] [PASSED] DP_REMOTE_I2C_WRITE with port number
[02:23:42] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[02:23:42] [PASSED] DP_REMOTE_I2C_WRITE with data array
[02:23:42] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[02:23:42] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[02:23:42] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[02:23:42] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[02:23:42] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[02:23:42] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[02:23:42] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[02:23:42] ================ [PASSED] drm_dp_mst_helper ================
[02:23:42] ================== drm_exec (7 subtests) ===================
[02:23:42] [PASSED] sanitycheck
[02:23:42] [PASSED] test_lock
[02:23:42] [PASSED] test_lock_unlock
[02:23:42] [PASSED] test_duplicates
[02:23:42] [PASSED] test_prepare
[02:23:42] [PASSED] test_prepare_array
[02:23:42] [PASSED] test_multiple_loops
[02:23:42] ==================== [PASSED] drm_exec =====================
[02:23:42] =========== drm_format_helper_test (17 subtests) ===========
[02:23:42] ============== drm_test_fb_xrgb8888_to_gray8  ==============
[02:23:42] [PASSED] single_pixel_source_buffer
[02:23:42] [PASSED] single_pixel_clip_rectangle
[02:23:42] [PASSED] well_known_colors
[02:23:42] [PASSED] destination_pitch
[02:23:42] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[02:23:42] ============= drm_test_fb_xrgb8888_to_rgb332  ==============
[02:23:42] [PASSED] single_pixel_source_buffer
[02:23:42] [PASSED] single_pixel_clip_rectangle
[02:23:42] [PASSED] well_known_colors
[02:23:42] [PASSED] destination_pitch
[02:23:42] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[02:23:42] ============= drm_test_fb_xrgb8888_to_rgb565  ==============
[02:23:42] [PASSED] single_pixel_source_buffer
[02:23:42] [PASSED] single_pixel_clip_rectangle
[02:23:42] [PASSED] well_known_colors
[02:23:42] [PASSED] destination_pitch
[02:23:42] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[02:23:42] ============ drm_test_fb_xrgb8888_to_xrgb1555  =============
[02:23:42] [PASSED] single_pixel_source_buffer
[02:23:42] [PASSED] single_pixel_clip_rectangle
[02:23:42] [PASSED] well_known_colors
[02:23:42] [PASSED] destination_pitch
[02:23:42] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[02:23:42] ============ drm_test_fb_xrgb8888_to_argb1555  =============
[02:23:42] [PASSED] single_pixel_source_buffer
[02:23:42] [PASSED] single_pixel_clip_rectangle
[02:23:42] [PASSED] well_known_colors
[02:23:42] [PASSED] destination_pitch
[02:23:42] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[02:23:42] ============ drm_test_fb_xrgb8888_to_rgba5551  =============
[02:23:42] [PASSED] single_pixel_source_buffer
[02:23:42] [PASSED] single_pixel_clip_rectangle
[02:23:42] [PASSED] well_known_colors
[02:23:42] [PASSED] destination_pitch
[02:23:42] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[02:23:42] ============= drm_test_fb_xrgb8888_to_rgb888  ==============
[02:23:42] [PASSED] single_pixel_source_buffer
[02:23:42] [PASSED] single_pixel_clip_rectangle
[02:23:42] [PASSED] well_known_colors
[02:23:42] [PASSED] destination_pitch
[02:23:42] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[02:23:42] ============ drm_test_fb_xrgb8888_to_argb8888  =============
[02:23:42] [PASSED] single_pixel_source_buffer
[02:23:42] [PASSED] single_pixel_clip_rectangle
[02:23:42] [PASSED] well_known_colors
[02:23:42] [PASSED] destination_pitch
[02:23:42] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[02:23:42] =========== drm_test_fb_xrgb8888_to_xrgb2101010  ===========
[02:23:42] [PASSED] single_pixel_source_buffer
[02:23:42] [PASSED] single_pixel_clip_rectangle
[02:23:42] [PASSED] well_known_colors
[02:23:42] [PASSED] destination_pitch
[02:23:42] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[02:23:42] =========== drm_test_fb_xrgb8888_to_argb2101010  ===========
[02:23:42] [PASSED] single_pixel_source_buffer
[02:23:42] [PASSED] single_pixel_clip_rectangle
[02:23:42] [PASSED] well_known_colors
[02:23:42] [PASSED] destination_pitch
[02:23:42] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[02:23:42] ============== drm_test_fb_xrgb8888_to_mono  ===============
[02:23:42] [PASSED] single_pixel_source_buffer
[02:23:42] [PASSED] single_pixel_clip_rectangle
[02:23:42] [PASSED] well_known_colors
[02:23:42] [PASSED] destination_pitch
[02:23:42] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[02:23:42] ==================== drm_test_fb_swab  =====================
[02:23:42] [PASSED] single_pixel_source_buffer
[02:23:42] [PASSED] single_pixel_clip_rectangle
[02:23:42] [PASSED] well_known_colors
[02:23:42] [PASSED] destination_pitch
[02:23:42] ================ [PASSED] drm_test_fb_swab =================
[02:23:42] ============ drm_test_fb_xrgb8888_to_xbgr8888  =============
[02:23:42] [PASSED] single_pixel_source_buffer
[02:23:42] [PASSED] single_pixel_clip_rectangle
[02:23:42] [PASSED] well_known_colors
[02:23:42] [PASSED] destination_pitch
[02:23:42] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[02:23:42] ============ drm_test_fb_xrgb8888_to_abgr8888  =============
[02:23:42] [PASSED] single_pixel_source_buffer
[02:23:42] [PASSED] single_pixel_clip_rectangle
[02:23:42] [PASSED] well_known_colors
[02:23:42] [PASSED] destination_pitch
[02:23:42] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[02:23:42] ================= drm_test_fb_clip_offset  =================
[02:23:42] [PASSED] pass through
[02:23:42] [PASSED] horizontal offset
[02:23:42] [PASSED] vertical offset
[02:23:42] [PASSED] horizontal and vertical offset
[02:23:42] [PASSED] horizontal offset (custom pitch)
[02:23:42] [PASSED] vertical offset (custom pitch)
[02:23:42] [PASSED] horizontal and vertical offset (custom pitch)
[02:23:42] ============= [PASSED] drm_test_fb_clip_offset =============
[02:23:42] ============== drm_test_fb_build_fourcc_list  ==============
[02:23:42] [PASSED] no native formats
[02:23:42] [PASSED] XRGB8888 as native format
[02:23:42] [PASSED] remove duplicates
[02:23:42] [PASSED] convert alpha formats
[02:23:42] [PASSED] random formats
[02:23:42] ========== [PASSED] drm_test_fb_build_fourcc_list ==========
[02:23:42] =================== drm_test_fb_memcpy  ====================
[02:23:42] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[02:23:42] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[02:23:42] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[02:23:42] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[02:23:42] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[02:23:42] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[02:23:42] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[02:23:42] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[02:23:42] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[02:23:42] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[02:23:42] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[02:23:42] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[02:23:42] =============== [PASSED] drm_test_fb_memcpy ================
[02:23:42] ============= [PASSED] drm_format_helper_test ==============
[02:23:42] ================= drm_format (18 subtests) =================
[02:23:42] [PASSED] drm_test_format_block_width_invalid
[02:23:42] [PASSED] drm_test_format_block_width_one_plane
[02:23:42] [PASSED] drm_test_format_block_width_two_plane
[02:23:42] [PASSED] drm_test_format_block_width_three_plane
[02:23:42] [PASSED] drm_test_format_block_width_tiled
[02:23:42] [PASSED] drm_test_format_block_height_invalid
[02:23:42] [PASSED] drm_test_format_block_height_one_plane
[02:23:42] [PASSED] drm_test_format_block_height_two_plane
[02:23:42] [PASSED] drm_test_format_block_height_three_plane
[02:23:42] [PASSED] drm_test_format_block_height_tiled
[02:23:42] [PASSED] drm_test_format_min_pitch_invalid
[02:23:42] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[02:23:42] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[02:23:42] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[02:23:42] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[02:23:42] [PASSED] drm_test_format_min_pitch_two_plane
[02:23:42] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[02:23:42] [PASSED] drm_test_format_min_pitch_tiled
[02:23:42] =================== [PASSED] drm_format ====================
[02:23:42] ============== drm_framebuffer (10 subtests) ===============
[02:23:42] ========== drm_test_framebuffer_check_src_coords  ==========
[02:23:42] [PASSED] Success: source fits into fb
[02:23:42] [PASSED] Fail: overflowing fb with x-axis coordinate
[02:23:42] [PASSED] Fail: overflowing fb with y-axis coordinate
[02:23:42] [PASSED] Fail: overflowing fb with source width
[02:23:42] [PASSED] Fail: overflowing fb with source height
[02:23:42] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[02:23:42] [PASSED] drm_test_framebuffer_cleanup
[02:23:42] =============== drm_test_framebuffer_create  ===============
[02:23:42] [PASSED] ABGR8888 normal sizes
[02:23:42] [PASSED] ABGR8888 max sizes
[02:23:42] [PASSED] ABGR8888 pitch greater than min required
[02:23:42] [PASSED] ABGR8888 pitch less than min required
[02:23:42] [PASSED] ABGR8888 Invalid width
[02:23:42] [PASSED] ABGR8888 Invalid buffer handle
[02:23:42] [PASSED] No pixel format
[02:23:42] [PASSED] ABGR8888 Width 0
[02:23:42] [PASSED] ABGR8888 Height 0
[02:23:42] [PASSED] ABGR8888 Out of bound height * pitch combination
[02:23:42] [PASSED] ABGR8888 Large buffer offset
[02:23:42] [PASSED] ABGR8888 Buffer offset for inexistent plane
[02:23:42] [PASSED] ABGR8888 Invalid flag
[02:23:42] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[02:23:42] [PASSED] ABGR8888 Valid buffer modifier
[02:23:42] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[02:23:42] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[02:23:42] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[02:23:42] [PASSED] NV12 Normal sizes
[02:23:42] [PASSED] NV12 Max sizes
[02:23:42] [PASSED] NV12 Invalid pitch
[02:23:42] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[02:23:42] [PASSED] NV12 different  modifier per-plane
[02:23:42] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[02:23:42] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[02:23:42] [PASSED] NV12 Modifier for inexistent plane
[02:23:42] [PASSED] NV12 Handle for inexistent plane
[02:23:42] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[02:23:42] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[02:23:42] [PASSED] YVU420 Normal sizes
[02:23:42] [PASSED] YVU420 Max sizes
[02:23:42] [PASSED] YVU420 Invalid pitch
[02:23:42] [PASSED] YVU420 Different pitches
[02:23:42] [PASSED] YVU420 Different buffer offsets/pitches
[02:23:42] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[02:23:42] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[02:23:42] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[02:23:42] [PASSED] YVU420 Valid modifier
[02:23:42] [PASSED] YVU420 Different modifiers per plane
[02:23:42] [PASSED] YVU420 Modifier for inexistent plane
[02:23:42] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[02:23:42] [PASSED] X0L2 Normal sizes
[02:23:42] [PASSED] X0L2 Max sizes
[02:23:42] [PASSED] X0L2 Invalid pitch
[02:23:42] [PASSED] X0L2 Pitch greater than minimum required
[02:23:42] [PASSED] X0L2 Handle for inexistent plane
[02:23:42] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[02:23:42] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[02:23:42] [PASSED] X0L2 Valid modifier
[02:23:42] [PASSED] X0L2 Modifier for inexistent plane
[02:23:42] =========== [PASSED] drm_test_framebuffer_create ===========
[02:23:42] [PASSED] drm_test_framebuffer_free
[02:23:42] [PASSED] drm_test_framebuffer_init
[02:23:42] [PASSED] drm_test_framebuffer_init_bad_format
[02:23:42] [PASSED] drm_test_framebuffer_init_dev_mismatch
[02:23:42] [PASSED] drm_test_framebuffer_lookup
[02:23:42] [PASSED] drm_test_framebuffer_lookup_inexistent
[02:23:42] [PASSED] drm_test_framebuffer_modifiers_not_supported
[02:23:42] ================= [PASSED] drm_framebuffer =================
[02:23:42] ================ drm_gem_shmem (8 subtests) ================
[02:23:42] [PASSED] drm_gem_shmem_test_obj_create
[02:23:42] [PASSED] drm_gem_shmem_test_obj_create_private
[02:23:42] [PASSED] drm_gem_shmem_test_pin_pages
[02:23:42] [PASSED] drm_gem_shmem_test_vmap
[02:23:42] [PASSED] drm_gem_shmem_test_get_pages_sgt
[02:23:42] [PASSED] drm_gem_shmem_test_get_sg_table
[02:23:42] [PASSED] drm_gem_shmem_test_madvise
[02:23:42] [PASSED] drm_gem_shmem_test_purge
[02:23:42] ================== [PASSED] drm_gem_shmem ==================
[02:23:42] === drm_atomic_helper_connector_hdmi_check (22 subtests) ===
[02:23:42] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[02:23:42] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[02:23:42] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[02:23:42] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[02:23:42] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[02:23:42] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[02:23:42] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[02:23:42] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[02:23:42] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[02:23:42] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback
[02:23:42] [PASSED] drm_test_check_max_tmds_rate_format_fallback
[02:23:42] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[02:23:42] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[02:23:42] [PASSED] drm_test_check_output_bpc_dvi
[02:23:42] [PASSED] drm_test_check_output_bpc_format_vic_1
[02:23:42] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[02:23:42] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[02:23:42] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[02:23:42] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[02:23:42] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[02:23:42] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[02:23:42] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[02:23:42] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[02:23:42] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[02:23:42] [PASSED] drm_test_check_broadcast_rgb_value
[02:23:42] [PASSED] drm_test_check_bpc_8_value
[02:23:42] [PASSED] drm_test_check_bpc_10_value
[02:23:42] [PASSED] drm_test_check_bpc_12_value
[02:23:42] [PASSED] drm_test_check_format_value
[02:23:42] [PASSED] drm_test_check_tmds_char_value
[02:23:42] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[02:23:42] ================= drm_managed (2 subtests) =================
[02:23:42] [PASSED] drm_test_managed_release_action
[02:23:42] [PASSED] drm_test_managed_run_action
[02:23:42] =================== [PASSED] drm_managed ===================
[02:23:42] =================== drm_mm (6 subtests) ====================
[02:23:42] [PASSED] drm_test_mm_init
[02:23:42] [PASSED] drm_test_mm_debug
[02:23:42] [PASSED] drm_test_mm_align32
[02:23:42] [PASSED] drm_test_mm_align64
[02:23:42] [PASSED] drm_test_mm_lowest
[02:23:42] [PASSED] drm_test_mm_highest
[02:23:42] ===================== [PASSED] drm_mm ======================
[02:23:42] ============= drm_modes_analog_tv (5 subtests) =============
[02:23:42] [PASSED] drm_test_modes_analog_tv_mono_576i
[02:23:42] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[02:23:42] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[02:23:42] [PASSED] drm_test_modes_analog_tv_pal_576i
[02:23:42] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[02:23:42] =============== [PASSED] drm_modes_analog_tv ===============
stty: 'standard input': Inappropriate ioctl for device
[02:23:42] ============== drm_plane_helper (2 subtests) ===============
[02:23:42] =============== drm_test_check_plane_state  ================
[02:23:42] [PASSED] clipping_simple
[02:23:42] [PASSED] clipping_rotate_reflect
[02:23:42] [PASSED] positioning_simple
[02:23:42] [PASSED] upscaling
[02:23:42] [PASSED] downscaling
[02:23:42] [PASSED] rounding1
[02:23:42] [PASSED] rounding2
[02:23:42] [PASSED] rounding3
[02:23:42] [PASSED] rounding4
[02:23:42] =========== [PASSED] drm_test_check_plane_state ============
[02:23:42] =========== drm_test_check_invalid_plane_state  ============
[02:23:42] [PASSED] positioning_invalid
[02:23:42] [PASSED] upscaling_invalid
[02:23:42] [PASSED] downscaling_invalid
[02:23:42] ======= [PASSED] drm_test_check_invalid_plane_state ========
[02:23:42] ================ [PASSED] drm_plane_helper =================
[02:23:42] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[02:23:42] ====== drm_test_connector_helper_tv_get_modes_check  =======
[02:23:42] [PASSED] None
[02:23:42] [PASSED] PAL
[02:23:42] [PASSED] NTSC
[02:23:42] [PASSED] Both, NTSC Default
[02:23:42] [PASSED] Both, PAL Default
[02:23:42] [PASSED] Both, NTSC Default, with PAL on command-line
[02:23:42] [PASSED] Both, PAL Default, with NTSC on command-line
[02:23:42] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[02:23:42] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[02:23:42] ================== drm_rect (9 subtests) ===================
[02:23:42] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[02:23:42] [PASSED] drm_test_rect_clip_scaled_not_clipped
[02:23:42] [PASSED] drm_test_rect_clip_scaled_clipped
[02:23:42] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[02:23:42] ================= drm_test_rect_intersect  =================
[02:23:42] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[02:23:42] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[02:23:42] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[02:23:42] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[02:23:42] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[02:23:42] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[02:23:42] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[02:23:42] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[02:23:42] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[02:23:42] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[02:23:42] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[02:23:42] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[02:23:42] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[02:23:42] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[02:23:42] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[02:23:42] ============= [PASSED] drm_test_rect_intersect =============
[02:23:42] ================ drm_test_rect_calc_hscale  ================
[02:23:42] [PASSED] normal use
[02:23:42] [PASSED] out of max range
[02:23:42] [PASSED] out of min range
[02:23:42] [PASSED] zero dst
[02:23:42] [PASSED] negative src
[02:23:42] [PASSED] negative dst
[02:23:42] ============ [PASSED] drm_test_rect_calc_hscale ============
[02:23:42] ================ drm_test_rect_calc_vscale  ================
[02:23:42] [PASSED] normal use
[02:23:42] [PASSED] out of max range
[02:23:42] [PASSED] out of min range
[02:23:42] [PASSED] zero dst
[02:23:42] [PASSED] negative src
[02:23:42] [PASSED] negative dst
[02:23:42] ============ [PASSED] drm_test_rect_calc_vscale ============
[02:23:42] ================== drm_test_rect_rotate  ===================
[02:23:42] [PASSED] reflect-x
[02:23:42] [PASSED] reflect-y
[02:23:42] [PASSED] rotate-0
[02:23:42] [PASSED] rotate-90
[02:23:42] [PASSED] rotate-180
[02:23:42] [PASSED] rotate-270
[02:23:42] ============== [PASSED] drm_test_rect_rotate ===============
[02:23:42] ================ drm_test_rect_rotate_inv  =================
[02:23:42] [PASSED] reflect-x
[02:23:42] [PASSED] reflect-y
[02:23:42] [PASSED] rotate-0
[02:23:42] [PASSED] rotate-90
[02:23:42] [PASSED] rotate-180
[02:23:42] [PASSED] rotate-270
[02:23:42] ============ [PASSED] drm_test_rect_rotate_inv =============
[02:23:42] ==================== [PASSED] drm_rect =====================
[02:23:42] ============================================================
[02:23:42] Testing complete. Ran 526 tests: passed: 526
[02:23:42] Elapsed time: 24.733s total, 1.636s configuring, 22.923s building, 0.171s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[02:23:43] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[02:23:44] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json ARCH=um O=.kunit --jobs=48
[02:23:52] Starting KUnit Kernel (1/1)...
[02:23:52] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[02:23:52] ================= ttm_device (5 subtests) ==================
[02:23:52] [PASSED] ttm_device_init_basic
[02:23:52] [PASSED] ttm_device_init_multiple
[02:23:52] [PASSED] ttm_device_fini_basic
[02:23:52] [PASSED] ttm_device_init_no_vma_man
[02:23:52] ================== ttm_device_init_pools  ==================
[02:23:52] [PASSED] No DMA allocations, no DMA32 required
[02:23:52] [PASSED] DMA allocations, DMA32 required
[02:23:52] [PASSED] No DMA allocations, DMA32 required
[02:23:52] [PASSED] DMA allocations, no DMA32 required
[02:23:52] ============== [PASSED] ttm_device_init_pools ==============
[02:23:52] =================== [PASSED] ttm_device ====================
[02:23:52] ================== ttm_pool (8 subtests) ===================
[02:23:52] ================== ttm_pool_alloc_basic  ===================
[02:23:52] [PASSED] One page
[02:23:52] [PASSED] More than one page
[02:23:52] [PASSED] Above the allocation limit
[02:23:52] [PASSED] One page, with coherent DMA mappings enabled
[02:23:52] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[02:23:52] ============== [PASSED] ttm_pool_alloc_basic ===============
[02:23:52] ============== ttm_pool_alloc_basic_dma_addr  ==============
[02:23:52] [PASSED] One page
[02:23:52] [PASSED] More than one page
[02:23:52] [PASSED] Above the allocation limit
[02:23:52] [PASSED] One page, with coherent DMA mappings enabled
[02:23:52] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[02:23:52] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[02:23:52] [PASSED] ttm_pool_alloc_order_caching_match
[02:23:52] [PASSED] ttm_pool_alloc_caching_mismatch
[02:23:52] [PASSED] ttm_pool_alloc_order_mismatch
[02:23:52] [PASSED] ttm_pool_free_dma_alloc
[02:23:52] [PASSED] ttm_pool_free_no_dma_alloc
[02:23:52] [PASSED] ttm_pool_fini_basic
[02:23:52] ==================== [PASSED] ttm_pool =====================
[02:23:52] ================ ttm_resource (8 subtests) =================
[02:23:52] ================= ttm_resource_init_basic  =================
[02:23:52] [PASSED] Init resource in TTM_PL_SYSTEM
[02:23:52] [PASSED] Init resource in TTM_PL_VRAM
[02:23:52] [PASSED] Init resource in a private placement
[02:23:52] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[02:23:52] ============= [PASSED] ttm_resource_init_basic =============
[02:23:52] [PASSED] ttm_resource_init_pinned
[02:23:52] [PASSED] ttm_resource_fini_basic
[02:23:52] [PASSED] ttm_resource_manager_init_basic
[02:23:52] [PASSED] ttm_resource_manager_usage_basic
[02:23:52] [PASSED] ttm_resource_manager_set_used_basic
[02:23:52] [PASSED] ttm_sys_man_alloc_basic
[02:23:52] [PASSED] ttm_sys_man_free_basic
[02:23:52] ================== [PASSED] ttm_resource ===================
[02:23:52] =================== ttm_tt (15 subtests) ===================
[02:23:52] ==================== ttm_tt_init_basic  ====================
[02:23:52] [PASSED] Page-aligned size
[02:23:52] [PASSED] Extra pages requested
[02:23:52] ================ [PASSED] ttm_tt_init_basic ================
[02:23:52] [PASSED] ttm_tt_init_misaligned
[02:23:52] [PASSED] ttm_tt_fini_basic
[02:23:52] [PASSED] ttm_tt_fini_sg
[02:23:52] [PASSED] ttm_tt_fini_shmem
[02:23:52] [PASSED] ttm_tt_create_basic
[02:23:52] [PASSED] ttm_tt_create_invalid_bo_type
[02:23:52] [PASSED] ttm_tt_create_ttm_exists
[02:23:52] [PASSED] ttm_tt_create_failed
[02:23:52] [PASSED] ttm_tt_destroy_basic
[02:23:52] [PASSED] ttm_tt_populate_null_ttm
[02:23:52] [PASSED] ttm_tt_populate_populated_ttm
[02:23:52] [PASSED] ttm_tt_unpopulate_basic
[02:23:52] [PASSED] ttm_tt_unpopulate_empty_ttm
[02:23:52] [PASSED] ttm_tt_swapin_basic
[02:23:52] ===================== [PASSED] ttm_tt ======================
[02:23:52] =================== ttm_bo (14 subtests) ===================
[02:23:52] =========== ttm_bo_reserve_optimistic_no_ticket  ===========
[02:23:52] [PASSED] Cannot be interrupted and sleeps
[02:23:52] [PASSED] Cannot be interrupted, locks straight away
[02:23:52] [PASSED] Can be interrupted, sleeps
[02:23:52] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[02:23:52] [PASSED] ttm_bo_reserve_locked_no_sleep
[02:23:52] [PASSED] ttm_bo_reserve_no_wait_ticket
[02:23:52] [PASSED] ttm_bo_reserve_double_resv
[02:23:52] [PASSED] ttm_bo_reserve_interrupted
[02:23:52] [PASSED] ttm_bo_reserve_deadlock
[02:23:52] [PASSED] ttm_bo_unreserve_basic
[02:23:52] [PASSED] ttm_bo_unreserve_pinned
[02:23:52] [PASSED] ttm_bo_unreserve_bulk
[02:23:52] [PASSED] ttm_bo_put_basic
[02:23:52] [PASSED] ttm_bo_put_shared_resv
[02:23:52] [PASSED] ttm_bo_pin_basic
[02:23:52] [PASSED] ttm_bo_pin_unpin_resource
[02:23:52] [PASSED] ttm_bo_multiple_pin_one_unpin
[02:23:52] ===================== [PASSED] ttm_bo ======================
[02:23:52] ============== ttm_bo_validate (22 subtests) ===============
[02:23:52] ============== ttm_bo_init_reserved_sys_man  ===============
[02:23:52] [PASSED] Buffer object for userspace
[02:23:52] [PASSED] Kernel buffer object
[02:23:52] [PASSED] Shared buffer object
[02:23:52] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[02:23:52] ============== ttm_bo_init_reserved_mock_man  ==============
[02:23:52] [PASSED] Buffer object for userspace
[02:23:52] [PASSED] Kernel buffer object
[02:23:52] [PASSED] Shared buffer object
[02:23:52] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[02:23:52] [PASSED] ttm_bo_init_reserved_resv
[02:23:52] ================== ttm_bo_validate_basic  ==================
[02:23:52] [PASSED] Buffer object for userspace
[02:23:52] [PASSED] Kernel buffer object
[02:23:52] [PASSED] Shared buffer object
[02:23:52] ============== [PASSED] ttm_bo_validate_basic ==============
[02:23:52] [PASSED] ttm_bo_validate_invalid_placement
[02:23:52] ============= ttm_bo_validate_same_placement  ==============
[02:23:52] [PASSED] System manager
[02:23:52] [PASSED] VRAM manager
[02:23:52] ========= [PASSED] ttm_bo_validate_same_placement ==========
[02:23:52] [PASSED] ttm_bo_validate_failed_alloc
[02:23:52] [PASSED] ttm_bo_validate_pinned
[02:23:52] [PASSED] ttm_bo_validate_busy_placement
[02:23:52] ================ ttm_bo_validate_multihop  =================
[02:23:52] [PASSED] Buffer object for userspace
[02:23:52] [PASSED] Kernel buffer object
[02:23:52] [PASSED] Shared buffer object
[02:23:52] ============ [PASSED] ttm_bo_validate_multihop =============
[02:23:52] ========== ttm_bo_validate_no_placement_signaled  ==========
[02:23:52] [PASSED] Buffer object in system domain, no page vector
[02:23:52] [PASSED] Buffer object in system domain with an existing page vector
[02:23:52] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[02:23:52] ======== ttm_bo_validate_no_placement_not_signaled  ========
[02:23:52] [PASSED] Buffer object for userspace
[02:23:52] [PASSED] Kernel buffer object
[02:23:52] [PASSED] Shared buffer object
[02:23:52] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[02:23:52] [PASSED] ttm_bo_validate_move_fence_signaled
[02:23:52] ========= ttm_bo_validate_move_fence_not_signaled  =========
[02:23:52] [PASSED] Waits for GPU
[02:23:52] [PASSED] Tries to lock straight away
[02:23:52] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[02:23:52] [PASSED] ttm_bo_validate_swapout
[02:23:52] [PASSED] ttm_bo_validate_happy_evict
[02:23:52] [PASSED] ttm_bo_validate_all_pinned_evict
[02:23:52] [PASSED] ttm_bo_validate_allowed_only_evict
[02:23:52] [PASSED] ttm_bo_validate_deleted_evict
[02:23:52] [PASSED] ttm_bo_validate_busy_domain_evict
[02:23:52] [PASSED] ttm_bo_validate_evict_gutting
[02:23:52] [PASSED] ttm_bo_validate_recrusive_evict
stty: 'standard input': Inappropriate ioctl for device
[02:23:52] ================= [PASSED] ttm_bo_validate =================
[02:23:52] ============================================================
[02:23:52] Testing complete. Ran 102 tests: passed: 102
[02:23:52] Elapsed time: 9.839s total, 1.633s configuring, 7.588s building, 0.540s running

+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel



^ permalink raw reply	[flat|nested] 12+ messages in thread

* ✓ CI.Build: success for Maintenence of devcoredump <-> GuC-Err-Capture plumbing
  2024-11-17 18:43 [PATCH 0/1] Maintenence of devcoredump <-> GuC-Err-Capture plumbing Alan Previn
                   ` (3 preceding siblings ...)
  2024-11-18  2:23 ` ✓ CI.KUnit: success " Patchwork
@ 2024-11-18  2:41 ` Patchwork
  2024-11-18  2:42 ` ✗ CI.Hooks: failure " Patchwork
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2024-11-18  2:41 UTC (permalink / raw)
  To: Alan Previn; +Cc: intel-xe

== Series Details ==

Series: Maintenence of devcoredump <-> GuC-Err-Capture plumbing
URL   : https://patchwork.freedesktop.org/series/141459/
State : success

== Summary ==

lib/modules/6.12.0-xe/kernel/arch/x86/events/rapl.ko
lib/modules/6.12.0-xe/kernel/arch/x86/kvm/
lib/modules/6.12.0-xe/kernel/arch/x86/kvm/kvm.ko
lib/modules/6.12.0-xe/kernel/arch/x86/kvm/kvm-intel.ko
lib/modules/6.12.0-xe/kernel/arch/x86/kvm/kvm-amd.ko
lib/modules/6.12.0-xe/kernel/kernel/
lib/modules/6.12.0-xe/kernel/kernel/kheaders.ko
lib/modules/6.12.0-xe/kernel/crypto/
lib/modules/6.12.0-xe/kernel/crypto/ecrdsa_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/xcbc.ko
lib/modules/6.12.0-xe/kernel/crypto/serpent_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/aria_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/crypto_simd.ko
lib/modules/6.12.0-xe/kernel/crypto/adiantum.ko
lib/modules/6.12.0-xe/kernel/crypto/tcrypt.ko
lib/modules/6.12.0-xe/kernel/crypto/crypto_engine.ko
lib/modules/6.12.0-xe/kernel/crypto/zstd.ko
lib/modules/6.12.0-xe/kernel/crypto/asymmetric_keys/
lib/modules/6.12.0-xe/kernel/crypto/asymmetric_keys/pkcs7_test_key.ko
lib/modules/6.12.0-xe/kernel/crypto/asymmetric_keys/pkcs8_key_parser.ko
lib/modules/6.12.0-xe/kernel/crypto/des_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/xctr.ko
lib/modules/6.12.0-xe/kernel/crypto/authenc.ko
lib/modules/6.12.0-xe/kernel/crypto/sm4_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/keywrap.ko
lib/modules/6.12.0-xe/kernel/crypto/camellia_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/sm3.ko
lib/modules/6.12.0-xe/kernel/crypto/pcrypt.ko
lib/modules/6.12.0-xe/kernel/crypto/aegis128.ko
lib/modules/6.12.0-xe/kernel/crypto/af_alg.ko
lib/modules/6.12.0-xe/kernel/crypto/algif_aead.ko
lib/modules/6.12.0-xe/kernel/crypto/cmac.ko
lib/modules/6.12.0-xe/kernel/crypto/sm3_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/aes_ti.ko
lib/modules/6.12.0-xe/kernel/crypto/chacha_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/poly1305_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/nhpoly1305.ko
lib/modules/6.12.0-xe/kernel/crypto/crc32_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/essiv.ko
lib/modules/6.12.0-xe/kernel/crypto/ccm.ko
lib/modules/6.12.0-xe/kernel/crypto/wp512.ko
lib/modules/6.12.0-xe/kernel/crypto/streebog_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/authencesn.ko
lib/modules/6.12.0-xe/kernel/crypto/echainiv.ko
lib/modules/6.12.0-xe/kernel/crypto/lrw.ko
lib/modules/6.12.0-xe/kernel/crypto/cryptd.ko
lib/modules/6.12.0-xe/kernel/crypto/crypto_user.ko
lib/modules/6.12.0-xe/kernel/crypto/algif_hash.ko
lib/modules/6.12.0-xe/kernel/crypto/vmac.ko
lib/modules/6.12.0-xe/kernel/crypto/polyval-generic.ko
lib/modules/6.12.0-xe/kernel/crypto/hctr2.ko
lib/modules/6.12.0-xe/kernel/crypto/842.ko
lib/modules/6.12.0-xe/kernel/crypto/pcbc.ko
lib/modules/6.12.0-xe/kernel/crypto/ansi_cprng.ko
lib/modules/6.12.0-xe/kernel/crypto/cast6_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/twofish_common.ko
lib/modules/6.12.0-xe/kernel/crypto/twofish_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/lz4hc.ko
lib/modules/6.12.0-xe/kernel/crypto/blowfish_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/md4.ko
lib/modules/6.12.0-xe/kernel/crypto/chacha20poly1305.ko
lib/modules/6.12.0-xe/kernel/crypto/curve25519-generic.ko
lib/modules/6.12.0-xe/kernel/crypto/lz4.ko
lib/modules/6.12.0-xe/kernel/crypto/rmd160.ko
lib/modules/6.12.0-xe/kernel/crypto/algif_skcipher.ko
lib/modules/6.12.0-xe/kernel/crypto/cast5_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/fcrypt.ko
lib/modules/6.12.0-xe/kernel/crypto/ecdsa_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/sm4.ko
lib/modules/6.12.0-xe/kernel/crypto/cast_common.ko
lib/modules/6.12.0-xe/kernel/crypto/blowfish_common.ko
lib/modules/6.12.0-xe/kernel/crypto/michael_mic.ko
lib/modules/6.12.0-xe/kernel/crypto/async_tx/
lib/modules/6.12.0-xe/kernel/crypto/async_tx/async_xor.ko
lib/modules/6.12.0-xe/kernel/crypto/async_tx/async_tx.ko
lib/modules/6.12.0-xe/kernel/crypto/async_tx/async_memcpy.ko
lib/modules/6.12.0-xe/kernel/crypto/async_tx/async_pq.ko
lib/modules/6.12.0-xe/kernel/crypto/async_tx/async_raid6_recov.ko
lib/modules/6.12.0-xe/kernel/crypto/algif_rng.ko
lib/modules/6.12.0-xe/kernel/block/
lib/modules/6.12.0-xe/kernel/block/bfq.ko
lib/modules/6.12.0-xe/kernel/block/kyber-iosched.ko
lib/modules/6.12.0-xe/build
lib/modules/6.12.0-xe/modules.alias.bin
lib/modules/6.12.0-xe/modules.builtin
lib/modules/6.12.0-xe/modules.softdep
lib/modules/6.12.0-xe/modules.alias
lib/modules/6.12.0-xe/modules.order
lib/modules/6.12.0-xe/modules.symbols
lib/modules/6.12.0-xe/modules.dep.bin
+ mv kernel-nodebug.tar.gz ..
+ cd ..
+ rm -rf archive
++ date +%s
+ echo -e '\e[0Ksection_end:1731897694:package_x86_64_nodebug\r\e[0K'
^[[0Ksection_end:1731897694:package_x86_64_nodebug
^[[0K
+ sync
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel



^ permalink raw reply	[flat|nested] 12+ messages in thread

* ✗ CI.Hooks: failure for Maintenence of devcoredump <-> GuC-Err-Capture plumbing
  2024-11-17 18:43 [PATCH 0/1] Maintenence of devcoredump <-> GuC-Err-Capture plumbing Alan Previn
                   ` (4 preceding siblings ...)
  2024-11-18  2:41 ` ✓ CI.Build: " Patchwork
@ 2024-11-18  2:42 ` Patchwork
  2024-11-18  2:43 ` ✓ CI.checksparse: success " Patchwork
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2024-11-18  2:42 UTC (permalink / raw)
  To: Alan Previn; +Cc: intel-xe

== Series Details ==

Series: Maintenence of devcoredump <-> GuC-Err-Capture plumbing
URL   : https://patchwork.freedesktop.org/series/141459/
State : failure

== Summary ==

run-parts: executing /workspace/ci/hooks/00-showenv
+ grep -Ei '(^|\W)CI_'
+ export
declare -x CI_KERNEL_BUILD_DIR="/workspace/kernel/build64-default"
declare -x CI_KERNEL_SRC_DIR="/workspace/kernel"
declare -x CI_TOOLS_SRC_DIR="/workspace/ci"
declare -x CI_WORKSPACE_DIR="/workspace"
run-parts: executing /workspace/ci/hooks/10-build-W1
+ SRC_DIR=/workspace/kernel
+ RESTORE_DISPLAY_CONFIG=0
+ '[' -n /workspace/kernel/build64-default ']'
+ BUILD_DIR=/workspace/kernel/build64-default
+ cd /workspace/kernel
++ nproc
+ make -j48 O=/workspace/kernel/build64-default modules_prepare
make[1]: Entering directory '/workspace/kernel/build64-default'
  GEN     Makefile
  UPD     include/config/kernel.release
mkdir -p /workspace/kernel/build64-default/tools/objtool && make O=/workspace/kernel/build64-default subdir=tools/objtool --no-print-directory -C objtool 
  UPD     include/generated/utsrelease.h
  CALL    ../scripts/checksyscalls.sh
  INSTALL libsubcmd_headers
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/exec-cmd.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/help.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/pager.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/parse-options.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/run-command.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/sigchain.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/subcmd-config.o
  LD      /workspace/kernel/build64-default/tools/objtool/libsubcmd/libsubcmd-in.o
  AR      /workspace/kernel/build64-default/tools/objtool/libsubcmd/libsubcmd.a
  CC      /workspace/kernel/build64-default/tools/objtool/weak.o
  CC      /workspace/kernel/build64-default/tools/objtool/check.o
  CC      /workspace/kernel/build64-default/tools/objtool/special.o
  CC      /workspace/kernel/build64-default/tools/objtool/builtin-check.o
  CC      /workspace/kernel/build64-default/tools/objtool/elf.o
  CC      /workspace/kernel/build64-default/tools/objtool/objtool.o
  CC      /workspace/kernel/build64-default/tools/objtool/orc_gen.o
  CC      /workspace/kernel/build64-default/tools/objtool/orc_dump.o
  CC      /workspace/kernel/build64-default/tools/objtool/arch/x86/special.o
  CC      /workspace/kernel/build64-default/tools/objtool/libstring.o
  CC      /workspace/kernel/build64-default/tools/objtool/libctype.o
  CC      /workspace/kernel/build64-default/tools/objtool/str_error_r.o
  CC      /workspace/kernel/build64-default/tools/objtool/arch/x86/decode.o
  CC      /workspace/kernel/build64-default/tools/objtool/librbtree.o
  CC      /workspace/kernel/build64-default/tools/objtool/arch/x86/orc.o
  LD      /workspace/kernel/build64-default/tools/objtool/arch/x86/objtool-in.o
  LD      /workspace/kernel/build64-default/tools/objtool/objtool-in.o
  LINK    /workspace/kernel/build64-default/tools/objtool/objtool
make[1]: Leaving directory '/workspace/kernel/build64-default'
++ nproc
+ make -j48 O=/workspace/kernel/build64-default W=1 drivers/gpu/drm/xe
make[1]: Entering directory '/workspace/kernel/build64-default'
make[2]: Nothing to be done for 'drivers/gpu/drm/xe'.
make[1]: Leaving directory '/workspace/kernel/build64-default'
run-parts: executing /workspace/ci/hooks/11-build-32b
+++ realpath /workspace/ci/hooks/11-build-32b
++ dirname /workspace/ci/hooks/11-build-32b
+ THIS_SCRIPT_DIR=/workspace/ci/hooks
+ SRC_DIR=/workspace/kernel
+ TOOLS_SRC_DIR=/workspace/ci
+ '[' -n /workspace/kernel/build64-default ']'
+ BUILD_DIR=/workspace/kernel/build64-default
+ BUILD_DIR=/workspace/kernel/build64-default/build32
+ cd /workspace/kernel
+ mkdir -p /workspace/kernel/build64-default/build32
++ nproc
+ make -j48 ARCH=i386 O=/workspace/kernel/build64-default/build32 defconfig
make[1]: Entering directory '/workspace/kernel/build64-default/build32'
  GEN     Makefile
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/confdata.o
  HOSTCC  scripts/kconfig/expr.o
  LEX     scripts/kconfig/lexer.lex.c
  YACC    scripts/kconfig/parser.tab.[ch]
  HOSTCC  scripts/kconfig/menu.o
  HOSTCC  scripts/kconfig/preprocess.o
  HOSTCC  scripts/kconfig/symbol.o
  HOSTCC  scripts/kconfig/util.o
  HOSTCC  scripts/kconfig/lexer.lex.o
  HOSTCC  scripts/kconfig/parser.tab.o
  HOSTLD  scripts/kconfig/conf
*** Default configuration is based on 'i386_defconfig'
#
# configuration written to .config
#
make[1]: Leaving directory '/workspace/kernel/build64-default/build32'
+ cd /workspace/kernel/build64-default/build32
+ /workspace/kernel/scripts/kconfig/merge_config.sh .config /workspace/ci/kernel/10-xe.fragment
Using .config as base
Merging /workspace/ci/kernel/10-xe.fragment
The merge file '/workspace/ci/kernel/10-xe.fragment' does not exist.  Exit.
run-parts: /workspace/ci/hooks/11-build-32b exited with return code 1



^ permalink raw reply	[flat|nested] 12+ messages in thread

* ✓ CI.checksparse: success for Maintenence of devcoredump <-> GuC-Err-Capture plumbing
  2024-11-17 18:43 [PATCH 0/1] Maintenence of devcoredump <-> GuC-Err-Capture plumbing Alan Previn
                   ` (5 preceding siblings ...)
  2024-11-18  2:42 ` ✗ CI.Hooks: failure " Patchwork
@ 2024-11-18  2:43 ` Patchwork
  2024-11-18  3:02 ` ✓ CI.BAT: " Patchwork
  2024-11-18  4:03 ` ✗ CI.FULL: failure " Patchwork
  8 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2024-11-18  2:43 UTC (permalink / raw)
  To: Alan Previn; +Cc: intel-xe

== Series Details ==

Series: Maintenence of devcoredump <-> GuC-Err-Capture plumbing
URL   : https://patchwork.freedesktop.org/series/141459/
State : success

== Summary ==

+ trap cleanup EXIT
+ KERNEL=/kernel
+ MT=/root/linux/maintainer-tools
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools /root/linux/maintainer-tools
Cloning into '/root/linux/maintainer-tools'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ make -C /root/linux/maintainer-tools
make: Entering directory '/root/linux/maintainer-tools'
cc -O2 -g -Wextra -o remap-log remap-log.c
make: Leaving directory '/root/linux/maintainer-tools'
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ /root/linux/maintainer-tools/dim sparse --fast 5b1f614ccf1008e7aee531bf76bb639802e0df88
/root/linux/maintainer-tools/dim: line 2068: sparse: command not found
Sparse version: 
Fast mode used, each commit won't be checked separately.
Okay!

+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel



^ permalink raw reply	[flat|nested] 12+ messages in thread

* ✓ CI.BAT: success for Maintenence of devcoredump <-> GuC-Err-Capture plumbing
  2024-11-17 18:43 [PATCH 0/1] Maintenence of devcoredump <-> GuC-Err-Capture plumbing Alan Previn
                   ` (6 preceding siblings ...)
  2024-11-18  2:43 ` ✓ CI.checksparse: success " Patchwork
@ 2024-11-18  3:02 ` Patchwork
  2024-11-18  4:03 ` ✗ CI.FULL: failure " Patchwork
  8 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2024-11-18  3:02 UTC (permalink / raw)
  To: Alan Previn; +Cc: intel-xe

[-- Attachment #1: Type: text/plain, Size: 11786 bytes --]

== Series Details ==

Series: Maintenence of devcoredump <-> GuC-Err-Capture plumbing
URL   : https://patchwork.freedesktop.org/series/141459/
State : success

== Summary ==

CI Bug Log - changes from xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88_BAT -> xe-pw-141459v1_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (9 -> 9)
------------------------------

  No changes in participating hosts

Known issues
------------

  Here are the changes found in xe-pw-141459v1_BAT that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@xe_live_ktest@xe_bo@xe_ccs_migrate_kunit:
    - bat-adlp-vf:        NOTRUN -> [SKIP][1] ([Intel XE#2229] / [Intel XE#455]) +1 other test skip
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-adlp-vf/igt@xe_live_ktest@xe_bo@xe_ccs_migrate_kunit.html

  * igt@xe_live_ktest@xe_migrate@xe_validate_ccs_kunit:
    - bat-dg2-oem2:       NOTRUN -> [SKIP][2] ([Intel XE#2229])
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-dg2-oem2/igt@xe_live_ktest@xe_migrate@xe_validate_ccs_kunit.html
    - bat-adlp-vf:        NOTRUN -> [SKIP][3] ([Intel XE#2229])
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-adlp-vf/igt@xe_live_ktest@xe_migrate@xe_validate_ccs_kunit.html

  
#### Possible fixes ####

  * igt@core_hotunplug@unbind-rebind:
    - bat-dg2-oem2:       [SKIP][4] ([Intel XE#1885]) -> [PASS][5]
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/bat-dg2-oem2/igt@core_hotunplug@unbind-rebind.html
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-dg2-oem2/igt@core_hotunplug@unbind-rebind.html

  * igt@fbdev@nullptr:
    - bat-dg2-oem2:       [SKIP][6] ([Intel XE#2134]) -> [PASS][7] +4 other tests pass
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/bat-dg2-oem2/igt@fbdev@nullptr.html
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-dg2-oem2/igt@fbdev@nullptr.html

  * igt@kms_addfb_basic@bad-pitch-128:
    - bat-dg2-oem2:       [SKIP][8] ([i915#2575]) -> [PASS][9] +50 other tests pass
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/bat-dg2-oem2/igt@kms_addfb_basic@bad-pitch-128.html
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-dg2-oem2/igt@kms_addfb_basic@bad-pitch-128.html

  * igt@kms_frontbuffer_tracking@basic:
    - bat-dg2-oem2:       [SKIP][10] ([Intel XE#2231]) -> [PASS][11]
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/bat-dg2-oem2/igt@kms_frontbuffer_tracking@basic.html
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-dg2-oem2/igt@kms_frontbuffer_tracking@basic.html

  * igt@xe_live_ktest@xe_migrate:
    - bat-dg2-oem2:       [SKIP][12] ([Intel XE#1192]) -> [PASS][13] +2 other tests pass
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/bat-dg2-oem2/igt@xe_live_ktest@xe_migrate.html
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-dg2-oem2/igt@xe_live_ktest@xe_migrate.html
    - bat-adlp-vf:        [SKIP][14] ([Intel XE#1192]) -> [PASS][15] +1 other test pass
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/bat-adlp-vf/igt@xe_live_ktest@xe_migrate.html
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-adlp-vf/igt@xe_live_ktest@xe_migrate.html

  * igt@xe_module_load@load:
    - bat-dg2-oem2:       [DMESG-FAIL][16] ([Intel XE#3400]) -> [PASS][17]
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/bat-dg2-oem2/igt@xe_module_load@load.html
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-dg2-oem2/igt@xe_module_load@load.html

  * igt@xe_pat@pat-index-xelp@render:
    - bat-adlp-vf:        [DMESG-WARN][18] ([Intel XE#358]) -> [PASS][19] +1 other test pass
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/bat-adlp-vf/igt@xe_pat@pat-index-xelp@render.html
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-adlp-vf/igt@xe_pat@pat-index-xelp@render.html

  * igt@xe_prime_self_import@basic-with_fd_dup:
    - bat-dg2-oem2:       [SKIP][20] ([Intel XE#1130]) -> [PASS][21] +157 other tests pass
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/bat-dg2-oem2/igt@xe_prime_self_import@basic-with_fd_dup.html
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-dg2-oem2/igt@xe_prime_self_import@basic-with_fd_dup.html

  
#### Warnings ####

  * igt@kms_addfb_basic@addfb25-y-tiled-small-legacy:
    - bat-dg2-oem2:       [SKIP][22] ([i915#2575]) -> [SKIP][23] ([Intel XE#623])
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/bat-dg2-oem2/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-dg2-oem2/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html

  * igt@kms_dsc@dsc-basic:
    - bat-dg2-oem2:       [SKIP][24] ([Intel XE#2231]) -> [SKIP][25] ([Intel XE#455])
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/bat-dg2-oem2/igt@kms_dsc@dsc-basic.html
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-dg2-oem2/igt@kms_dsc@dsc-basic.html

  * igt@kms_force_connector_basic@prune-stale-modes:
    - bat-dg2-oem2:       [SKIP][26] ([i915#2575]) -> [SKIP][27] ([i915#5274])
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/bat-dg2-oem2/igt@kms_force_connector_basic@prune-stale-modes.html
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-dg2-oem2/igt@kms_force_connector_basic@prune-stale-modes.html

  * igt@kms_psr@psr-cursor-plane-move:
    - bat-dg2-oem2:       [SKIP][28] ([Intel XE#2231]) -> [SKIP][29] ([Intel XE#2850] / [Intel XE#929]) +2 other tests skip
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/bat-dg2-oem2/igt@kms_psr@psr-cursor-plane-move.html
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-dg2-oem2/igt@kms_psr@psr-cursor-plane-move.html

  * igt@sriov_basic@enable-vfs-autoprobe-off:
    - bat-dg2-oem2:       [SKIP][30] ([i915#2575]) -> [SKIP][31] ([Intel XE#1091] / [Intel XE#2849]) +1 other test skip
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/bat-dg2-oem2/igt@sriov_basic@enable-vfs-autoprobe-off.html
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-dg2-oem2/igt@sriov_basic@enable-vfs-autoprobe-off.html

  * igt@xe_exec_fault_mode@twice-bindexecqueue-userptr:
    - bat-dg2-oem2:       [SKIP][32] ([Intel XE#1130]) -> [SKIP][33] ([Intel XE#288]) +32 other tests skip
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/bat-dg2-oem2/igt@xe_exec_fault_mode@twice-bindexecqueue-userptr.html
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-dg2-oem2/igt@xe_exec_fault_mode@twice-bindexecqueue-userptr.html

  * igt@xe_huc_copy@huc_copy:
    - bat-dg2-oem2:       [SKIP][34] ([Intel XE#1130]) -> [SKIP][35] ([Intel XE#255])
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/bat-dg2-oem2/igt@xe_huc_copy@huc_copy.html
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-dg2-oem2/igt@xe_huc_copy@huc_copy.html

  * igt@xe_live_ktest@xe_bo:
    - bat-adlp-vf:        [SKIP][36] ([Intel XE#1192]) -> [SKIP][37] ([Intel XE#2229] / [Intel XE#455])
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/bat-adlp-vf/igt@xe_live_ktest@xe_bo.html
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-adlp-vf/igt@xe_live_ktest@xe_bo.html

  * igt@xe_pat@pat-index-xe2:
    - bat-dg2-oem2:       [SKIP][38] ([Intel XE#1130]) -> [SKIP][39] ([Intel XE#2839] / [Intel XE#977])
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/bat-dg2-oem2/igt@xe_pat@pat-index-xe2.html
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-dg2-oem2/igt@xe_pat@pat-index-xe2.html

  * igt@xe_pat@pat-index-xehpc:
    - bat-dg2-oem2:       [SKIP][40] ([Intel XE#1130]) -> [SKIP][41] ([Intel XE#2838] / [Intel XE#979])
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/bat-dg2-oem2/igt@xe_pat@pat-index-xehpc.html
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-dg2-oem2/igt@xe_pat@pat-index-xehpc.html

  * igt@xe_pat@pat-index-xelpg:
    - bat-dg2-oem2:       [SKIP][42] ([Intel XE#1130]) -> [SKIP][43] ([Intel XE#979])
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/bat-dg2-oem2/igt@xe_pat@pat-index-xelpg.html
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-dg2-oem2/igt@xe_pat@pat-index-xelpg.html

  * igt@xe_sriov_flr@flr-vf1-clear:
    - bat-dg2-oem2:       [SKIP][44] ([Intel XE#1130]) -> [SKIP][45] ([Intel XE#3342])
   [44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/bat-dg2-oem2/igt@xe_sriov_flr@flr-vf1-clear.html
   [45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/bat-dg2-oem2/igt@xe_sriov_flr@flr-vf1-clear.html

  
  [Intel XE#1091]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1091
  [Intel XE#1130]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1130
  [Intel XE#1192]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1192
  [Intel XE#1885]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1885
  [Intel XE#2134]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2134
  [Intel XE#2229]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2229
  [Intel XE#2231]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2231
  [Intel XE#255]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/255
  [Intel XE#2838]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2838
  [Intel XE#2839]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2839
  [Intel XE#2849]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2849
  [Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
  [Intel XE#288]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/288
  [Intel XE#3342]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3342
  [Intel XE#3400]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3400
  [Intel XE#358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/358
  [Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
  [Intel XE#623]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/623
  [Intel XE#929]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/929
  [Intel XE#977]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/977
  [Intel XE#979]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/979
  [i915#2575]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2575
  [i915#5274]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5274


Build changes
-------------

  * Linux: xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88 -> xe-pw-141459v1

  IGT_8114: 8114
  xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88: 5b1f614ccf1008e7aee531bf76bb639802e0df88
  xe-pw-141459v1: 141459v1

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/index.html

[-- Attachment #2: Type: text/html, Size: 14173 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* ✗ CI.FULL: failure for Maintenence of devcoredump <-> GuC-Err-Capture plumbing
  2024-11-17 18:43 [PATCH 0/1] Maintenence of devcoredump <-> GuC-Err-Capture plumbing Alan Previn
                   ` (7 preceding siblings ...)
  2024-11-18  3:02 ` ✓ CI.BAT: " Patchwork
@ 2024-11-18  4:03 ` Patchwork
  8 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2024-11-18  4:03 UTC (permalink / raw)
  To: Alan Previn; +Cc: intel-xe

[-- Attachment #1: Type: text/plain, Size: 118873 bytes --]

== Series Details ==

Series: Maintenence of devcoredump <-> GuC-Err-Capture plumbing
URL   : https://patchwork.freedesktop.org/series/141459/
State : failure

== Summary ==

CI Bug Log - changes from xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88_full -> xe-pw-141459v1_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with xe-pw-141459v1_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in xe-pw-141459v1_full, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

Participating hosts (4 -> 4)
------------------------------

  No changes in participating hosts

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in xe-pw-141459v1_full:

### IGT changes ###

#### Possible regressions ####

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ab-hdmi-a6-dp4:
    - shard-dg2-set2:     NOTRUN -> [FAIL][1] +1 other test fail
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ab-hdmi-a6-dp4.html

  * igt@kms_flip@flip-vs-suspend@a-hdmi-a6:
    - shard-dg2-set2:     NOTRUN -> [DMESG-WARN][2] +10 other tests dmesg-warn
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-435/igt@kms_flip@flip-vs-suspend@a-hdmi-a6.html

  * igt@kms_flip@flip-vs-suspend@c-hdmi-a6:
    - shard-dg2-set2:     NOTRUN -> [DMESG-FAIL][3] +5 other tests dmesg-fail
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-435/igt@kms_flip@flip-vs-suspend@c-hdmi-a6.html

  * igt@kms_flip@wf_vblank-ts-check@a-hdmi-a3:
    - shard-bmg:          [PASS][4] -> [DMESG-FAIL][5] +3 other tests dmesg-fail
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-4/igt@kms_flip@wf_vblank-ts-check@a-hdmi-a3.html
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-6/igt@kms_flip@wf_vblank-ts-check@a-hdmi-a3.html

  * igt@kms_plane_alpha_blend@alpha-7efc@pipe-a-dp-2:
    - shard-bmg:          [PASS][6] -> [FAIL][7]
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-4/igt@kms_plane_alpha_blend@alpha-7efc@pipe-a-dp-2.html
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-6/igt@kms_plane_alpha_blend@alpha-7efc@pipe-a-dp-2.html

  * igt@xe_drm_fdinfo@utilization-single-full-load:
    - shard-lnl:          [PASS][8] -> [FAIL][9] +1 other test fail
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-lnl-6/igt@xe_drm_fdinfo@utilization-single-full-load.html
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-2/igt@xe_drm_fdinfo@utilization-single-full-load.html

  * igt@xe_exec_reset@parallel-gt-reset:
    - shard-adlp:         [PASS][10] -> [DMESG-WARN][11] +9 other tests dmesg-warn
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-adlp-9/igt@xe_exec_reset@parallel-gt-reset.html
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@xe_exec_reset@parallel-gt-reset.html
    - shard-dg2-set2:     [PASS][12] -> [DMESG-WARN][13] +4 other tests dmesg-warn
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-433/igt@xe_exec_reset@parallel-gt-reset.html
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@xe_exec_reset@parallel-gt-reset.html

  * igt@xe_exec_reset@virtual-cat-error:
    - shard-bmg:          NOTRUN -> [DMESG-WARN][14] +8 other tests dmesg-warn
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@xe_exec_reset@virtual-cat-error.html

  * igt@xe_exec_sip_eudebug@wait-writesip-nodebug@drm_xe_engine_class_render0:
    - shard-bmg:          [PASS][15] -> [DMESG-WARN][16] +99 other tests dmesg-warn
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-8/igt@xe_exec_sip_eudebug@wait-writesip-nodebug@drm_xe_engine_class_render0.html
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-8/igt@xe_exec_sip_eudebug@wait-writesip-nodebug@drm_xe_engine_class_render0.html

  * igt@xe_exec_threads@threads-hang-userptr-rebind-err:
    - shard-lnl:          [PASS][17] -> [DMESG-WARN][18] +52 other tests dmesg-warn
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-lnl-8/igt@xe_exec_threads@threads-hang-userptr-rebind-err.html
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-2/igt@xe_exec_threads@threads-hang-userptr-rebind-err.html

  * igt@xe_fault_injection@inject-fault-probe-function-xe_guc_log_init:
    - shard-adlp:         NOTRUN -> [DMESG-WARN][19] +1 other test dmesg-warn
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@xe_fault_injection@inject-fault-probe-function-xe_guc_log_init.html

  * igt@xe_oa@enable-disable@rcs-0:
    - shard-lnl:          NOTRUN -> [DMESG-WARN][20] +1 other test dmesg-warn
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-2/igt@xe_oa@enable-disable@rcs-0.html

  * igt@xe_pm_residency@gt-c6-freeze@gt1:
    - shard-bmg:          NOTRUN -> [DMESG-FAIL][21] +1 other test dmesg-fail
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-1/igt@xe_pm_residency@gt-c6-freeze@gt1.html

  
#### Warnings ####

  * igt@core_hotunplug@hotunplug-rescan:
    - shard-dg2-set2:     [SKIP][22] ([Intel XE#1885]) -> [DMESG-WARN][23]
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@core_hotunplug@hotunplug-rescan.html
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@core_hotunplug@hotunplug-rescan.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0:
    - shard-bmg:          [DMESG-WARN][24] -> [DMESG-FAIL][25]
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-6/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0.html
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0.html

  * igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0:
    - shard-bmg:          [DMESG-FAIL][26] -> [DMESG-WARN][27] +1 other test dmesg-warn
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-6/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0.html
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc:
    - shard-dg2-set2:     [SKIP][28] ([Intel XE#455] / [Intel XE#787]) -> [SKIP][29] +1 other test skip
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-436/igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc.html
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc.html

  * igt@kms_flip@flip-vs-suspend:
    - shard-dg2-set2:     [SKIP][30] ([Intel XE#2423] / [i915#2575]) -> [DMESG-FAIL][31]
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_flip@flip-vs-suspend.html
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-435/igt@kms_flip@flip-vs-suspend.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-move:
    - shard-bmg:          [FAIL][32] ([Intel XE#2333]) -> [DMESG-FAIL][33] +1 other test dmesg-fail
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-4/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-move.html
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-move.html

  * igt@kms_vblank@ts-continuation-suspend:
    - shard-dg2-set2:     [SKIP][34] ([Intel XE#2423] / [i915#2575]) -> [DMESG-WARN][35]
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_vblank@ts-continuation-suspend.html
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@kms_vblank@ts-continuation-suspend.html

  * igt@xe_fault_injection@inject-fault-probe-function-xe_sriov_init:
    - shard-dg2-set2:     [SKIP][36] ([Intel XE#1130]) -> [DMESG-WARN][37] +1 other test dmesg-warn
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@xe_fault_injection@inject-fault-probe-function-xe_sriov_init.html
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-435/igt@xe_fault_injection@inject-fault-probe-function-xe_sriov_init.html

  
#### Suppressed ####

  The following results come from untrusted machines, tests, or statuses.
  They do not affect the overall result.

  * {igt@xe_eudebug@exec-queue-placements}:
    - shard-dg2-set2:     [SKIP][38] ([Intel XE#1130]) -> [SKIP][39]
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@xe_eudebug@exec-queue-placements.html
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@xe_eudebug@exec-queue-placements.html

  * {igt@xe_fault_injection@vm-create-fail-xe_exec_queue_create_bind}:
    - shard-dg2-set2:     [SKIP][40] ([Intel XE#1130]) -> [DMESG-WARN][41] +1 other test dmesg-warn
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@xe_fault_injection@vm-create-fail-xe_exec_queue_create_bind.html
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@xe_fault_injection@vm-create-fail-xe_exec_queue_create_bind.html

  * {igt@xe_fault_injection@vm-create-fail-xe_pt_create}:
    - shard-bmg:          [PASS][42] -> [DMESG-WARN][43]
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-4/igt@xe_fault_injection@vm-create-fail-xe_pt_create.html
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-6/igt@xe_fault_injection@vm-create-fail-xe_pt_create.html

  
Known issues
------------

  Here are the changes found in xe-pw-141459v1_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@core_getstats:
    - shard-dg2-set2:     [PASS][44] -> [SKIP][45] ([Intel XE#2423])
   [44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-464/igt@core_getstats.html
   [45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@core_getstats.html

  * igt@core_hotunplug@hotrebind:
    - shard-dg2-set2:     [PASS][46] -> [SKIP][47] ([Intel XE#1885]) +1 other test skip
   [46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@core_hotunplug@hotrebind.html
   [47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@core_hotunplug@hotrebind.html

  * igt@fbdev@pan:
    - shard-dg2-set2:     [PASS][48] -> [SKIP][49] ([Intel XE#2134])
   [48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@fbdev@pan.html
   [49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@fbdev@pan.html

  * igt@kms_addfb_basic@addfb25-y-tiled-small-legacy:
    - shard-bmg:          NOTRUN -> [SKIP][50] ([Intel XE#2233])
   [50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-1/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html

  * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-edp-1-linear:
    - shard-lnl:          NOTRUN -> [FAIL][51] ([Intel XE#911]) +3 other tests fail
   [51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-3/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-edp-1-linear.html

  * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-6-4-mc-ccs:
    - shard-dg2-set2:     NOTRUN -> [SKIP][52] ([Intel XE#2550]) +23 other tests skip
   [52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-464/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-6-4-mc-ccs.html

  * igt@kms_async_flips@invalid-async-flip@pipe-c-hdmi-a-1:
    - shard-adlp:         [PASS][53] -> [DMESG-WARN][54] ([Intel XE#1033]) +1 other test dmesg-warn
   [53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-adlp-1/igt@kms_async_flips@invalid-async-flip@pipe-c-hdmi-a-1.html
   [54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-8/igt@kms_async_flips@invalid-async-flip@pipe-c-hdmi-a-1.html

  * igt@kms_atomic_transition@modeset-transition-nonblocking-fencing:
    - shard-dg2-set2:     NOTRUN -> [SKIP][55] ([Intel XE#2423] / [i915#2575]) +52 other tests skip
   [55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_atomic_transition@modeset-transition-nonblocking-fencing.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip:
    - shard-lnl:          NOTRUN -> [SKIP][56] ([Intel XE#1407])
   [56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-3/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip:
    - shard-adlp:         NOTRUN -> [SKIP][57] ([Intel XE#1124])
   [57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip.html

  * igt@kms_big_fb@linear-8bpp-rotate-90:
    - shard-bmg:          NOTRUN -> [SKIP][58] ([Intel XE#2327]) +1 other test skip
   [58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-1/igt@kms_big_fb@linear-8bpp-rotate-90.html

  * igt@kms_big_fb@x-tiled-32bpp-rotate-270:
    - shard-dg2-set2:     NOTRUN -> [SKIP][59] ([Intel XE#316])
   [59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@kms_big_fb@x-tiled-32bpp-rotate-270.html

  * igt@kms_big_fb@x-tiled-64bpp-rotate-90:
    - shard-adlp:         NOTRUN -> [SKIP][60] ([Intel XE#316])
   [60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@kms_big_fb@x-tiled-64bpp-rotate-90.html

  * igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip:
    - shard-adlp:         NOTRUN -> [DMESG-WARN][61] ([Intel XE#1033])
   [61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
    - shard-lnl:          NOTRUN -> [SKIP][62] ([Intel XE#1124]) +2 other tests skip
   [62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-1/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html

  * igt@kms_big_fb@yf-tiled-16bpp-rotate-270:
    - shard-dg2-set2:     NOTRUN -> [SKIP][63] ([Intel XE#1124])
   [63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_big_fb@yf-tiled-16bpp-rotate-270.html

  * igt@kms_big_fb@yf-tiled-32bpp-rotate-180:
    - shard-dg2-set2:     NOTRUN -> [SKIP][64] ([Intel XE#2136]) +54 other tests skip
   [64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_big_fb@yf-tiled-32bpp-rotate-180.html

  * igt@kms_big_fb@yf-tiled-64bpp-rotate-0:
    - shard-bmg:          NOTRUN -> [SKIP][65] ([Intel XE#1124]) +4 other tests skip
   [65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-6/igt@kms_big_fb@yf-tiled-64bpp-rotate-0.html

  * igt@kms_bw@linear-tiling-2-displays-1920x1080p:
    - shard-bmg:          NOTRUN -> [SKIP][66] ([Intel XE#367]) +1 other test skip
   [66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@kms_bw@linear-tiling-2-displays-1920x1080p.html

  * igt@kms_bw@linear-tiling-4-displays-2160x1440p:
    - shard-lnl:          NOTRUN -> [SKIP][67] ([Intel XE#1512])
   [67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-3/igt@kms_bw@linear-tiling-4-displays-2160x1440p.html

  * igt@kms_ccs@bad-aux-stride-4-tiled-mtl-rc-ccs-cc:
    - shard-lnl:          NOTRUN -> [SKIP][68] ([Intel XE#2887]) +2 other tests skip
   [68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-1/igt@kms_ccs@bad-aux-stride-4-tiled-mtl-rc-ccs-cc.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs@pipe-a-edp-1:
    - shard-lnl:          NOTRUN -> [SKIP][69] ([Intel XE#2669]) +7 other tests skip
   [69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-1/igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs@pipe-a-edp-1.html

  * igt@kms_ccs@bad-rotation-90-y-tiled-gen12-mc-ccs@pipe-d-dp-4:
    - shard-dg2-set2:     NOTRUN -> [SKIP][70] ([Intel XE#455] / [Intel XE#787]) +20 other tests skip
   [70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-435/igt@kms_ccs@bad-rotation-90-y-tiled-gen12-mc-ccs@pipe-d-dp-4.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-6:
    - shard-dg2-set2:     NOTRUN -> [SKIP][71] ([Intel XE#787]) +111 other tests skip
   [71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@kms_ccs@crc-primary-basic-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-6.html

  * igt@kms_ccs@crc-primary-basic-y-tiled-ccs:
    - shard-bmg:          NOTRUN -> [SKIP][72] ([Intel XE#2887]) +6 other tests skip
   [72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@kms_ccs@crc-primary-basic-y-tiled-ccs.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs@pipe-b-dp-2:
    - shard-bmg:          NOTRUN -> [SKIP][73] ([Intel XE#2652] / [Intel XE#787]) +8 other tests skip
   [73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-1/igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs@pipe-b-dp-2.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-mc-ccs:
    - shard-adlp:         NOTRUN -> [SKIP][74] ([Intel XE#455] / [Intel XE#787]) +1 other test skip
   [74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-mc-ccs.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-mc-ccs@pipe-a-hdmi-a-1:
    - shard-adlp:         NOTRUN -> [SKIP][75] ([Intel XE#787]) +2 other tests skip
   [75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-mc-ccs@pipe-a-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc:
    - shard-bmg:          NOTRUN -> [SKIP][76] ([Intel XE#3432])
   [76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc.html

  * igt@kms_cdclk@mode-transition@pipe-a-hdmi-a-1:
    - shard-adlp:         NOTRUN -> [SKIP][77] ([Intel XE#314]) +2 other tests skip
   [77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@kms_cdclk@mode-transition@pipe-a-hdmi-a-1.html

  * igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-1:
    - shard-adlp:         NOTRUN -> [SKIP][78] ([Intel XE#314] / [Intel XE#455]) +1 other test skip
   [78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-1.html

  * igt@kms_chamelium_color@ctm-blue-to-red:
    - shard-lnl:          NOTRUN -> [SKIP][79] ([Intel XE#306]) +1 other test skip
   [79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-3/igt@kms_chamelium_color@ctm-blue-to-red.html

  * igt@kms_chamelium_color@degamma:
    - shard-dg2-set2:     NOTRUN -> [SKIP][80] ([Intel XE#306])
   [80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_chamelium_color@degamma.html

  * igt@kms_chamelium_frames@dp-frame-dump:
    - shard-lnl:          NOTRUN -> [SKIP][81] ([Intel XE#373])
   [81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-1/igt@kms_chamelium_frames@dp-frame-dump.html

  * igt@kms_chamelium_hpd@common-hpd-after-suspend:
    - shard-bmg:          NOTRUN -> [SKIP][82] ([Intel XE#2252]) +4 other tests skip
   [82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-1/igt@kms_chamelium_hpd@common-hpd-after-suspend.html

  * igt@kms_chamelium_hpd@dp-hpd:
    - shard-adlp:         NOTRUN -> [SKIP][83] ([Intel XE#373])
   [83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@kms_chamelium_hpd@dp-hpd.html

  * igt@kms_chamelium_hpd@hdmi-hpd-after-hibernate:
    - shard-dg2-set2:     NOTRUN -> [SKIP][84] ([Intel XE#373])
   [84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_chamelium_hpd@hdmi-hpd-after-hibernate.html

  * igt@kms_color@ctm-0-50@pipe-d-hdmi-a-3:
    - shard-bmg:          NOTRUN -> [DMESG-WARN][85] ([Intel XE#877]) +1 other test dmesg-warn
   [85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@kms_color@ctm-0-50@pipe-d-hdmi-a-3.html

  * igt@kms_content_protection@dp-mst-lic-type-0:
    - shard-bmg:          NOTRUN -> [SKIP][86] ([Intel XE#2390])
   [86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@kms_content_protection@dp-mst-lic-type-0.html

  * igt@kms_content_protection@type1:
    - shard-bmg:          NOTRUN -> [SKIP][87] ([Intel XE#2341])
   [87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-2/igt@kms_content_protection@type1.html

  * igt@kms_cursor_crc@cursor-offscreen-32x10:
    - shard-adlp:         NOTRUN -> [SKIP][88] ([Intel XE#455])
   [88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@kms_cursor_crc@cursor-offscreen-32x10.html

  * igt@kms_cursor_crc@cursor-offscreen-max-size:
    - shard-bmg:          NOTRUN -> [SKIP][89] ([Intel XE#2320]) +1 other test skip
   [89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-1/igt@kms_cursor_crc@cursor-offscreen-max-size.html

  * igt@kms_cursor_crc@cursor-onscreen-512x170:
    - shard-lnl:          NOTRUN -> [SKIP][90] ([Intel XE#2321])
   [90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-1/igt@kms_cursor_crc@cursor-onscreen-512x170.html

  * igt@kms_cursor_crc@cursor-rapid-movement-512x512:
    - shard-dg2-set2:     NOTRUN -> [SKIP][91] ([Intel XE#308])
   [91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_cursor_crc@cursor-rapid-movement-512x512.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
    - shard-bmg:          NOTRUN -> [SKIP][92] ([Intel XE#2286])
   [92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-6/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size:
    - shard-dg2-set2:     NOTRUN -> [SKIP][93] ([Intel XE#323])
   [93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html

  * igt@kms_cursor_legacy@torture-bo@all-pipes:
    - shard-dg2-set2:     NOTRUN -> [DMESG-WARN][94] ([Intel XE#3184])
   [94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-464/igt@kms_cursor_legacy@torture-bo@all-pipes.html

  * igt@kms_dsc@dsc-with-bpc-formats:
    - shard-bmg:          NOTRUN -> [SKIP][95] ([Intel XE#2244])
   [95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@kms_dsc@dsc-with-bpc-formats.html

  * igt@kms_fbcon_fbt@fbc-suspend:
    - shard-bmg:          NOTRUN -> [FAIL][96] ([Intel XE#1695]) +1 other test fail
   [96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@kms_fbcon_fbt@fbc-suspend.html

  * igt@kms_feature_discovery@dp-mst:
    - shard-bmg:          NOTRUN -> [SKIP][97] ([Intel XE#2375])
   [97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-6/igt@kms_feature_discovery@dp-mst.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@cd-hdmi-a6-dp4:
    - shard-dg2-set2:     NOTRUN -> [FAIL][98] ([Intel XE#301]) +7 other tests fail
   [98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@cd-hdmi-a6-dp4.html

  * igt@kms_flip@2x-flip-vs-rmfb:
    - shard-lnl:          NOTRUN -> [SKIP][99] ([Intel XE#1421]) +1 other test skip
   [99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-3/igt@kms_flip@2x-flip-vs-rmfb.html

  * igt@kms_flip@busy-flip:
    - shard-dg2-set2:     [PASS][100] -> [SKIP][101] ([Intel XE#2423] / [i915#2575]) +50 other tests skip
   [100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_flip@busy-flip.html
   [101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_flip@busy-flip.html

  * igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible@b-edp1:
    - shard-lnl:          [PASS][102] -> [FAIL][103] ([Intel XE#886]) +2 other tests fail
   [102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-lnl-1/igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible@b-edp1.html
   [103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-6/igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible@b-edp1.html

  * igt@kms_flip@flip-vs-suspend:
    - shard-adlp:         [PASS][104] -> [DMESG-WARN][105] ([Intel XE#2953] / [Intel XE#3086])
   [104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-adlp-8/igt@kms_flip@flip-vs-suspend.html
   [105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-3/igt@kms_flip@flip-vs-suspend.html

  * igt@kms_flip@flip-vs-suspend@a-hdmi-a1:
    - shard-adlp:         [PASS][106] -> [DMESG-WARN][107] ([Intel XE#3086])
   [106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-adlp-8/igt@kms_flip@flip-vs-suspend@a-hdmi-a1.html
   [107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-3/igt@kms_flip@flip-vs-suspend@a-hdmi-a1.html

  * igt@kms_flip@wf_vblank-ts-check:
    - shard-lnl:          [PASS][108] -> [FAIL][109] ([Intel XE#3149] / [Intel XE#886])
   [108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-lnl-8/igt@kms_flip@wf_vblank-ts-check.html
   [109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-2/igt@kms_flip@wf_vblank-ts-check.html

  * igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-upscaling:
    - shard-dg2-set2:     [PASS][110] -> [SKIP][111] ([Intel XE#2136] / [Intel XE#2351]) +2 other tests skip
   [110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-upscaling.html
   [111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-upscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-xtile-to-64bpp-xtile-downscaling@pipe-a-valid-mode:
    - shard-dg2-set2:     NOTRUN -> [INCOMPLETE][112] ([Intel XE#1195])
   [112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-436/igt@kms_flip_scaled_crc@flip-32bpp-xtile-to-64bpp-xtile-downscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling@pipe-a-valid-mode:
    - shard-bmg:          NOTRUN -> [SKIP][113] ([Intel XE#2293]) +1 other test skip
   [113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling:
    - shard-bmg:          NOTRUN -> [SKIP][114] ([Intel XE#2293] / [Intel XE#2380]) +1 other test skip
   [114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-2/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling.html

  * igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-msflip-blt:
    - shard-lnl:          NOTRUN -> [SKIP][115] ([Intel XE#651]) +3 other tests skip
   [115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-1/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-blt:
    - shard-adlp:         NOTRUN -> [SKIP][116] ([Intel XE#651]) +3 other tests skip
   [116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-mmap-wc:
    - shard-bmg:          NOTRUN -> [SKIP][117] ([Intel XE#2311]) +9 other tests skip
   [117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-1/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-blt:
    - shard-bmg:          NOTRUN -> [FAIL][118] ([Intel XE#2333]) +5 other tests fail
   [118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-1/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-render:
    - shard-dg2-set2:     [PASS][119] -> [SKIP][120] ([Intel XE#2136]) +15 other tests skip
   [119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-render.html
   [120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-1p-rte:
    - shard-dg2-set2:     NOTRUN -> [SKIP][121] ([Intel XE#651]) +6 other tests skip
   [121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_frontbuffer_tracking@fbcdrrs-1p-rte.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-blt:
    - shard-adlp:         NOTRUN -> [SKIP][122] ([Intel XE#653]) +1 other test skip
   [122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-move:
    - shard-dg2-set2:     NOTRUN -> [SKIP][123] ([Intel XE#653]) +4 other tests skip
   [123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-move.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-blt:
    - shard-bmg:          NOTRUN -> [SKIP][124] ([Intel XE#2313]) +8 other tests skip
   [124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-onoff:
    - shard-adlp:         NOTRUN -> [SKIP][125] ([Intel XE#656]) +2 other tests skip
   [125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-shrfb-msflip-blt:
    - shard-dg2-set2:     NOTRUN -> [SKIP][126] ([Intel XE#2136] / [Intel XE#2351]) +14 other tests skip
   [126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_frontbuffer_tracking@psr-2p-primscrn-shrfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-indfb-draw-blt:
    - shard-lnl:          NOTRUN -> [SKIP][127] ([Intel XE#656]) +12 other tests skip
   [127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-3/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-indfb-draw-blt.html

  * igt@kms_hdr@static-toggle-dpms:
    - shard-lnl:          NOTRUN -> [SKIP][128] ([Intel XE#1503])
   [128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-1/igt@kms_hdr@static-toggle-dpms.html

  * igt@kms_joiner@invalid-modeset-ultra-joiner:
    - shard-adlp:         NOTRUN -> [SKIP][129] ([Intel XE#2927])
   [129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@kms_joiner@invalid-modeset-ultra-joiner.html

  * igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
    - shard-bmg:          NOTRUN -> [SKIP][130] ([Intel XE#2501])
   [130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html

  * igt@kms_plane_scaling@2x-scaler-multi-pipe:
    - shard-lnl:          NOTRUN -> [SKIP][131] ([Intel XE#309])
   [131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-1/igt@kms_plane_scaling@2x-scaler-multi-pipe.html

  * igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-6:
    - shard-dg2-set2:     NOTRUN -> [FAIL][132] ([Intel XE#361]) +1 other test fail
   [132]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-6.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-5-with-modifiers:
    - shard-lnl:          NOTRUN -> [SKIP][133] ([Intel XE#2763]) +3 other tests skip
   [133]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-1/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-modifiers.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-b:
    - shard-dg2-set2:     NOTRUN -> [SKIP][134] ([Intel XE#2763]) +5 other tests skip
   [134]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-435/igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-b.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-d:
    - shard-dg2-set2:     NOTRUN -> [SKIP][135] ([Intel XE#2763] / [Intel XE#455]) +1 other test skip
   [135]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-435/igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-d.html

  * igt@kms_pm_backlight@brightness-with-dpms:
    - shard-dg2-set2:     NOTRUN -> [SKIP][136] ([Intel XE#2938])
   [136]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_pm_backlight@brightness-with-dpms.html

  * igt@kms_pm_dc@dc5-psr:
    - shard-dg2-set2:     NOTRUN -> [SKIP][137] ([Intel XE#1129])
   [137]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@kms_pm_dc@dc5-psr.html

  * igt@kms_pm_dc@dc5-retention-flops:
    - shard-lnl:          NOTRUN -> [SKIP][138] ([Intel XE#3309])
   [138]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-3/igt@kms_pm_dc@dc5-retention-flops.html

  * igt@kms_pm_dc@dc6-psr:
    - shard-lnl:          NOTRUN -> [FAIL][139] ([Intel XE#1430])
   [139]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-1/igt@kms_pm_dc@dc6-psr.html

  * igt@kms_pm_rpm@dpms-mode-unset-lpsp:
    - shard-dg2-set2:     [PASS][140] -> [SKIP][141] ([Intel XE#2446]) +2 other tests skip
   [140]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-436/igt@kms_pm_rpm@dpms-mode-unset-lpsp.html
   [141]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_pm_rpm@dpms-mode-unset-lpsp.html

  * igt@kms_pm_rpm@modeset-lpsp-stress-no-wait:
    - shard-bmg:          NOTRUN -> [SKIP][142] ([Intel XE#1439] / [Intel XE#3141])
   [142]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html

  * igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
    - shard-dg2-set2:     NOTRUN -> [SKIP][143] ([Intel XE#2446])
   [143]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html

  * igt@kms_psr2_sf@pr-overlay-plane-update-continuous-sf:
    - shard-dg2-set2:     NOTRUN -> [SKIP][144] ([Intel XE#1489])
   [144]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_psr2_sf@pr-overlay-plane-update-continuous-sf.html

  * igt@kms_psr2_sf@pr-overlay-plane-update-sf-dmg-area:
    - shard-lnl:          NOTRUN -> [SKIP][145] ([Intel XE#2893])
   [145]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-1/igt@kms_psr2_sf@pr-overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-fully-sf:
    - shard-bmg:          NOTRUN -> [SKIP][146] ([Intel XE#1489]) +1 other test skip
   [146]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-1/igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr@fbc-psr2-cursor-blt:
    - shard-bmg:          NOTRUN -> [SKIP][147] ([Intel XE#2234] / [Intel XE#2850]) +4 other tests skip
   [147]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@kms_psr@fbc-psr2-cursor-blt.html

  * igt@kms_psr@pr-sprite-blt:
    - shard-dg2-set2:     NOTRUN -> [SKIP][148] ([Intel XE#2850] / [Intel XE#929]) +3 other tests skip
   [148]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_psr@pr-sprite-blt.html

  * igt@kms_psr@psr2-primary-page-flip:
    - shard-adlp:         NOTRUN -> [SKIP][149] ([Intel XE#2850] / [Intel XE#929]) +3 other tests skip
   [149]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@kms_psr@psr2-primary-page-flip.html

  * igt@kms_rotation_crc@primary-y-tiled-reflect-x-90:
    - shard-lnl:          NOTRUN -> [SKIP][150] ([Intel XE#3414]) +1 other test skip
   [150]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-1/igt@kms_rotation_crc@primary-y-tiled-reflect-x-90.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-c-edp-1:
    - shard-lnl:          [PASS][151] -> [FAIL][152] ([Intel XE#899])
   [151]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-lnl-5/igt@kms_universal_plane@cursor-fb-leak@pipe-c-edp-1.html
   [152]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-8/igt@kms_universal_plane@cursor-fb-leak@pipe-c-edp-1.html

  * igt@kms_vblank@ts-continuation-dpms-suspend:
    - shard-bmg:          [PASS][153] -> [DMESG-WARN][154] ([Intel XE#3426])
   [153]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-7/igt@kms_vblank@ts-continuation-dpms-suspend.html
   [154]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-6/igt@kms_vblank@ts-continuation-dpms-suspend.html

  * igt@kms_vrr@cmrr@pipe-a-edp-1:
    - shard-lnl:          [PASS][155] -> [FAIL][156] ([Intel XE#2159]) +1 other test fail
   [155]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-lnl-7/igt@kms_vrr@cmrr@pipe-a-edp-1.html
   [156]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-7/igt@kms_vrr@cmrr@pipe-a-edp-1.html

  * igt@kms_vrr@flip-dpms:
    - shard-dg2-set2:     NOTRUN -> [SKIP][157] ([Intel XE#455]) +11 other tests skip
   [157]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@kms_vrr@flip-dpms.html

  * igt@kms_vrr@max-min:
    - shard-bmg:          NOTRUN -> [SKIP][158] ([Intel XE#1499])
   [158]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@kms_vrr@max-min.html

  * igt@kms_vrr@seamless-rr-switch-vrr:
    - shard-lnl:          NOTRUN -> [SKIP][159] ([Intel XE#1499])
   [159]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-3/igt@kms_vrr@seamless-rr-switch-vrr.html

  * igt@kms_writeback@writeback-invalid-parameters:
    - shard-dg2-set2:     NOTRUN -> [SKIP][160] ([Intel XE#756])
   [160]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_writeback@writeback-invalid-parameters.html

  * igt@xe_compute_preempt@compute-threadgroup-preempt@engine-drm_xe_engine_class_compute:
    - shard-dg2-set2:     NOTRUN -> [SKIP][161] ([Intel XE#1280] / [Intel XE#455])
   [161]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-435/igt@xe_compute_preempt@compute-threadgroup-preempt@engine-drm_xe_engine_class_compute.html

  * igt@xe_drm_fdinfo@utilization-single-full-load-destroy-queue:
    - shard-lnl:          [PASS][162] -> [FAIL][163] ([Intel XE#2667])
   [162]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-lnl-7/igt@xe_drm_fdinfo@utilization-single-full-load-destroy-queue.html
   [163]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-7/igt@xe_drm_fdinfo@utilization-single-full-load-destroy-queue.html

  * igt@xe_eudebug_online@breakpoint-many-sessions-tiles:
    - shard-adlp:         NOTRUN -> [SKIP][164] ([Intel XE#2905]) +1 other test skip
   [164]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@xe_eudebug_online@breakpoint-many-sessions-tiles.html

  * igt@xe_eudebug_online@set-breakpoint:
    - shard-bmg:          NOTRUN -> [SKIP][165] ([Intel XE#2905]) +3 other tests skip
   [165]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-6/igt@xe_eudebug_online@set-breakpoint.html

  * igt@xe_eudebug_online@writes-caching-sram-bb-sram-target-vram:
    - shard-lnl:          NOTRUN -> [SKIP][166] ([Intel XE#2905]) +2 other tests skip
   [166]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-1/igt@xe_eudebug_online@writes-caching-sram-bb-sram-target-vram.html

  * igt@xe_evict@evict-beng-mixed-many-threads-small:
    - shard-bmg:          [PASS][167] -> [TIMEOUT][168] ([Intel XE#1473])
   [167]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-4/igt@xe_evict@evict-beng-mixed-many-threads-small.html
   [168]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-1/igt@xe_evict@evict-beng-mixed-many-threads-small.html

  * igt@xe_evict@evict-beng-threads-small-multi-vm:
    - shard-adlp:         NOTRUN -> [SKIP][169] ([Intel XE#261] / [Intel XE#688])
   [169]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@xe_evict@evict-beng-threads-small-multi-vm.html

  * igt@xe_evict@evict-mixed-many-threads-large:
    - shard-bmg:          NOTRUN -> [TIMEOUT][170] ([Intel XE#1473])
   [170]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@xe_evict@evict-mixed-many-threads-large.html

  * igt@xe_evict_ccs@evict-overcommit-standalone-instantfree-reopen:
    - shard-lnl:          NOTRUN -> [SKIP][171] ([Intel XE#688]) +4 other tests skip
   [171]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-3/igt@xe_evict_ccs@evict-overcommit-standalone-instantfree-reopen.html

  * igt@xe_exec_basic@multigpu-no-exec-userptr-invalidate-race:
    - shard-lnl:          NOTRUN -> [SKIP][172] ([Intel XE#1392])
   [172]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-1/igt@xe_exec_basic@multigpu-no-exec-userptr-invalidate-race.html

  * igt@xe_exec_basic@multigpu-once-bindexecqueue-userptr-invalidate-race:
    - shard-bmg:          NOTRUN -> [SKIP][173] ([Intel XE#2322])
   [173]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@xe_exec_basic@multigpu-once-bindexecqueue-userptr-invalidate-race.html

  * igt@xe_exec_fault_mode@many-execqueues-bindexecqueue-imm:
    - shard-adlp:         NOTRUN -> [SKIP][174] ([Intel XE#288])
   [174]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@xe_exec_fault_mode@many-execqueues-bindexecqueue-imm.html

  * igt@xe_exec_fault_mode@once-rebind-imm:
    - shard-dg2-set2:     NOTRUN -> [SKIP][175] ([Intel XE#288]) +9 other tests skip
   [175]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@xe_exec_fault_mode@once-rebind-imm.html

  * igt@xe_exec_reset@close-execqueues-close-fd:
    - shard-dg2-set2:     NOTRUN -> [DMESG-WARN][176] ([Intel XE#358]) +4 other tests dmesg-warn
   [176]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@xe_exec_reset@close-execqueues-close-fd.html

  * igt@xe_exec_sip_eudebug@breakpoint-writesip:
    - shard-dg2-set2:     NOTRUN -> [SKIP][177] ([Intel XE#2905]) +3 other tests skip
   [177]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@xe_exec_sip_eudebug@breakpoint-writesip.html

  * igt@xe_exec_threads@threads-hang-fd-userptr-invalidate-race:
    - shard-dg2-set2:     [PASS][178] -> [DMESG-WARN][179] ([Intel XE#358]) +23 other tests dmesg-warn
   [178]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-464/igt@xe_exec_threads@threads-hang-fd-userptr-invalidate-race.html
   [179]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-464/igt@xe_exec_threads@threads-hang-fd-userptr-invalidate-race.html

  * igt@xe_exec_threads@threads-hang-fd-userptr-rebind:
    - shard-adlp:         NOTRUN -> [DMESG-WARN][180] ([Intel XE#358])
   [180]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@xe_exec_threads@threads-hang-fd-userptr-rebind.html

  * igt@xe_exec_threads@threads-hang-rebind:
    - shard-adlp:         [PASS][181] -> [DMESG-WARN][182] ([Intel XE#358]) +41 other tests dmesg-warn
   [181]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-adlp-2/igt@xe_exec_threads@threads-hang-rebind.html
   [182]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-6/igt@xe_exec_threads@threads-hang-rebind.html

  * igt@xe_live_ktest@xe_bo:
    - shard-bmg:          [PASS][183] -> [SKIP][184] ([Intel XE#1192])
   [183]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-7/igt@xe_live_ktest@xe_bo.html
   [184]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-6/igt@xe_live_ktest@xe_bo.html

  * igt@xe_live_ktest@xe_bo@xe_bo_evict_kunit:
    - shard-dg2-set2:     [PASS][185] -> [SKIP][186] ([Intel XE#2229]) +1 other test skip
   [185]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-464/igt@xe_live_ktest@xe_bo@xe_bo_evict_kunit.html
   [186]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@xe_live_ktest@xe_bo@xe_bo_evict_kunit.html

  * igt@xe_live_ktest@xe_mocs:
    - shard-dg2-set2:     NOTRUN -> [SKIP][187] ([Intel XE#1192])
   [187]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@xe_live_ktest@xe_mocs.html

  * igt@xe_media_fill@media-fill:
    - shard-bmg:          NOTRUN -> [SKIP][188] ([Intel XE#2459] / [Intel XE#2596])
   [188]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-1/igt@xe_media_fill@media-fill.html

  * igt@xe_mmap@small-bar:
    - shard-bmg:          NOTRUN -> [SKIP][189] ([Intel XE#586])
   [189]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@xe_mmap@small-bar.html

  * igt@xe_oa@oa-formats:
    - shard-dg2-set2:     NOTRUN -> [SKIP][190] ([Intel XE#2541]) +1 other test skip
   [190]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@xe_oa@oa-formats.html

  * igt@xe_oa@oa-tlb-invalidate:
    - shard-lnl:          NOTRUN -> [SKIP][191] ([Intel XE#2248])
   [191]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-1/igt@xe_oa@oa-tlb-invalidate.html

  * igt@xe_oa@unprivileged-single-ctx-counters:
    - shard-bmg:          NOTRUN -> [SKIP][192] ([Intel XE#2248])
   [192]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@xe_oa@unprivileged-single-ctx-counters.html

  * igt@xe_pm@s3-basic-exec:
    - shard-dg2-set2:     NOTRUN -> [DMESG-WARN][193] ([Intel XE#569])
   [193]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@xe_pm@s3-basic-exec.html

  * igt@xe_pm@s4-d3hot-basic-exec:
    - shard-adlp:         [PASS][194] -> [ABORT][195] ([Intel XE#1358] / [Intel XE#1607])
   [194]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-adlp-6/igt@xe_pm@s4-d3hot-basic-exec.html
   [195]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-9/igt@xe_pm@s4-d3hot-basic-exec.html

  * igt@xe_query@multigpu-query-invalid-cs-cycles:
    - shard-dg2-set2:     NOTRUN -> [SKIP][196] ([Intel XE#944])
   [196]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@xe_query@multigpu-query-invalid-cs-cycles.html

  * igt@xe_query@multigpu-query-uc-fw-version-guc:
    - shard-bmg:          NOTRUN -> [SKIP][197] ([Intel XE#944])
   [197]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@xe_query@multigpu-query-uc-fw-version-guc.html

  * igt@xe_vm@large-split-binds-536870912:
    - shard-dg2-set2:     NOTRUN -> [SKIP][198] ([Intel XE#1130]) +80 other tests skip
   [198]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@xe_vm@large-split-binds-536870912.html

  * igt@xe_vm@mmap-style-bind-userptr-one-partial:
    - shard-dg2-set2:     [PASS][199] -> [SKIP][200] ([Intel XE#1130]) +92 other tests skip
   [199]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@xe_vm@mmap-style-bind-userptr-one-partial.html
   [200]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@xe_vm@mmap-style-bind-userptr-one-partial.html

  * igt@xe_wedged@basic-wedged:
    - shard-bmg:          NOTRUN -> [DMESG-WARN][201] ([Intel XE#2919])
   [201]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@xe_wedged@basic-wedged.html

  * igt@xe_wedged@wedged-at-any-timeout:
    - shard-lnl:          [PASS][202] -> [DMESG-WARN][203] ([Intel XE#3119])
   [202]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-lnl-5/igt@xe_wedged@wedged-at-any-timeout.html
   [203]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-8/igt@xe_wedged@wedged-at-any-timeout.html

  
#### Possible fixes ####

  * igt@kms_atomic@plane-invalid-params-fence:
    - shard-dg2-set2:     [SKIP][204] ([Intel XE#2423] / [i915#2575]) -> [PASS][205] +85 other tests pass
   [204]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_atomic@plane-invalid-params-fence.html
   [205]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_atomic@plane-invalid-params-fence.html

  * igt@kms_atomic_transition@plane-all-transition-fencing:
    - shard-lnl:          [DMESG-WARN][206] ([Intel XE#877]) -> [PASS][207] +1 other test pass
   [206]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-lnl-5/igt@kms_atomic_transition@plane-all-transition-fencing.html
   [207]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-2/igt@kms_atomic_transition@plane-all-transition-fencing.html

  * igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-async-flip:
    - shard-adlp:         [DMESG-WARN][208] ([Intel XE#1033]) -> [PASS][209]
   [208]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-adlp-1/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html
   [209]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs:
    - shard-dg2-set2:     [SKIP][210] -> [PASS][211]
   [210]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs.html
   [211]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs.html

  * igt@kms_cursor_crc@cursor-suspend@pipe-a-edp-1:
    - shard-lnl:          [DMESG-WARN][212] -> [PASS][213] +2 other tests pass
   [212]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-lnl-5/igt@kms_cursor_crc@cursor-suspend@pipe-a-edp-1.html
   [213]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-2/igt@kms_cursor_crc@cursor-suspend@pipe-a-edp-1.html

  * igt@kms_dp_aux_dev:
    - shard-dg2-set2:     [SKIP][214] ([Intel XE#2423]) -> [PASS][215] +1 other test pass
   [214]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_dp_aux_dev.html
   [215]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-435/igt@kms_dp_aux_dev.html

  * igt@kms_draw_crc@draw-method-blt@rgb565-4tiled:
    - shard-bmg:          [INCOMPLETE][216] -> [PASS][217] +6 other tests pass
   [216]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-6/igt@kms_draw_crc@draw-method-blt@rgb565-4tiled.html
   [217]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@kms_draw_crc@draw-method-blt@rgb565-4tiled.html

  * igt@kms_draw_crc@draw-method-blt@rgb565-xtiled:
    - shard-bmg:          [DMESG-FAIL][218] -> [PASS][219] +9 other tests pass
   [218]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-6/igt@kms_draw_crc@draw-method-blt@rgb565-xtiled.html
   [219]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@kms_draw_crc@draw-method-blt@rgb565-xtiled.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible:
    - shard-bmg:          [FAIL][220] ([Intel XE#2882]) -> [PASS][221]
   [220]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-3/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html
   [221]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-5/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ac-dp2-hdmi-a3:
    - shard-bmg:          [FAIL][222] -> [PASS][223]
   [222]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-3/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ac-dp2-hdmi-a3.html
   [223]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-5/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ac-dp2-hdmi-a3.html

  * igt@kms_flip@flip-vs-suspend-interruptible:
    - shard-dg2-set2:     [INCOMPLETE][224] ([Intel XE#1195] / [Intel XE#2049] / [Intel XE#2597]) -> [PASS][225]
   [224]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-463/igt@kms_flip@flip-vs-suspend-interruptible.html
   [225]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@kms_flip@flip-vs-suspend-interruptible.html

  * igt@kms_flip@flip-vs-suspend-interruptible@a-hdmi-a1:
    - shard-adlp:         [DMESG-WARN][226] ([Intel XE#2953] / [Intel XE#3086]) -> [PASS][227] +3 other tests pass
   [226]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-adlp-2/igt@kms_flip@flip-vs-suspend-interruptible@a-hdmi-a1.html
   [227]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-6/igt@kms_flip@flip-vs-suspend-interruptible@a-hdmi-a1.html

  * igt@kms_flip@flip-vs-suspend-interruptible@b-dp4:
    - shard-dg2-set2:     [INCOMPLETE][228] ([Intel XE#1195] / [Intel XE#2597]) -> [PASS][229]
   [228]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-463/igt@kms_flip@flip-vs-suspend-interruptible@b-dp4.html
   [229]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@kms_flip@flip-vs-suspend-interruptible@b-dp4.html

  * igt@kms_flip@plain-flip-ts-check:
    - shard-dg2-set2:     [FAIL][230] ([Intel XE#886]) -> [PASS][231]
   [230]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-463/igt@kms_flip@plain-flip-ts-check.html
   [231]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@kms_flip@plain-flip-ts-check.html

  * igt@kms_flip@plain-flip-ts-check@a-hdmi-a6:
    - shard-dg2-set2:     [FAIL][232] -> [PASS][233]
   [232]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-463/igt@kms_flip@plain-flip-ts-check@a-hdmi-a6.html
   [233]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@kms_flip@plain-flip-ts-check@a-hdmi-a6.html

  * igt@kms_frontbuffer_tracking@basic:
    - shard-dg2-set2:     [SKIP][234] ([Intel XE#2351]) -> [PASS][235]
   [234]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_frontbuffer_tracking@basic.html
   [235]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_frontbuffer_tracking@basic.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-mmap-wc:
    - shard-dg2-set2:     [SKIP][236] ([Intel XE#2136] / [Intel XE#2351]) -> [PASS][237] +13 other tests pass
   [236]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-mmap-wc.html
   [237]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-435/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbc-indfb-scaledprimary:
    - shard-dg2-set2:     [SKIP][238] ([Intel XE#2136]) -> [PASS][239] +16 other tests pass
   [238]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_frontbuffer_tracking@fbc-indfb-scaledprimary.html
   [239]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-464/igt@kms_frontbuffer_tracking@fbc-indfb-scaledprimary.html

  * igt@kms_hdr@invalid-hdr:
    - shard-dg2-set2:     [SKIP][240] ([Intel XE#455]) -> [PASS][241]
   [240]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-435/igt@kms_hdr@invalid-hdr.html
   [241]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@kms_hdr@invalid-hdr.html

  * igt@kms_plane_scaling@planes-upscale-20x20:
    - shard-adlp:         [DMESG-WARN][242] ([Intel XE#3086]) -> [PASS][243] +5 other tests pass
   [242]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-adlp-2/igt@kms_plane_scaling@planes-upscale-20x20.html
   [243]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-6/igt@kms_plane_scaling@planes-upscale-20x20.html

  * igt@kms_pm_dc@deep-pkgc:
    - shard-lnl:          [FAIL][244] ([Intel XE#2029]) -> [PASS][245]
   [244]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-lnl-4/igt@kms_pm_dc@deep-pkgc.html
   [245]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-3/igt@kms_pm_dc@deep-pkgc.html

  * igt@kms_pm_rpm@system-suspend-modeset:
    - shard-dg2-set2:     [SKIP][246] ([Intel XE#2446]) -> [PASS][247] +3 other tests pass
   [246]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_pm_rpm@system-suspend-modeset.html
   [247]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@kms_pm_rpm@system-suspend-modeset.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-a-edp-1:
    - shard-lnl:          [FAIL][248] ([Intel XE#899]) -> [PASS][249]
   [248]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-lnl-5/igt@kms_universal_plane@cursor-fb-leak@pipe-a-edp-1.html
   [249]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-8/igt@kms_universal_plane@cursor-fb-leak@pipe-a-edp-1.html

  * igt@kms_vblank@ts-continuation-suspend:
    - shard-bmg:          [DMESG-WARN][250] -> [PASS][251] +24 other tests pass
   [250]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-3/igt@kms_vblank@ts-continuation-suspend.html
   [251]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-5/igt@kms_vblank@ts-continuation-suspend.html

  * igt@xe_evict@evict-large-multi-vm-cm:
    - shard-bmg:          [FAIL][252] ([Intel XE#2364]) -> [PASS][253]
   [252]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-4/igt@xe_evict@evict-large-multi-vm-cm.html
   [253]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-1/igt@xe_evict@evict-large-multi-vm-cm.html

  * igt@xe_evict_ccs@evict-overcommit-standalone-instantfree-reopen:
    - shard-dg2-set2:     [SKIP][254] ([Intel XE#1130]) -> [PASS][255] +139 other tests pass
   [254]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@xe_evict_ccs@evict-overcommit-standalone-instantfree-reopen.html
   [255]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-464/igt@xe_evict_ccs@evict-overcommit-standalone-instantfree-reopen.html

  * igt@xe_live_ktest@xe_bo:
    - shard-dg2-set2:     [INCOMPLETE][256] ([Intel XE#1195]) -> [PASS][257] +1 other test pass
   [256]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-464/igt@xe_live_ktest@xe_bo.html
   [257]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@xe_live_ktest@xe_bo.html

  * igt@xe_pm@s3-exec-after:
    - shard-bmg:          [DMESG-WARN][258] ([Intel XE#3426] / [Intel XE#569]) -> [PASS][259]
   [258]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-6/igt@xe_pm@s3-exec-after.html
   [259]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@xe_pm@s3-exec-after.html

  * igt@xe_pm@s4-d3hot-basic-exec:
    - shard-lnl:          [ABORT][260] ([Intel XE#1358] / [Intel XE#1607]) -> [PASS][261] +1 other test pass
   [260]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-lnl-2/igt@xe_pm@s4-d3hot-basic-exec.html
   [261]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-lnl-3/igt@xe_pm@s4-d3hot-basic-exec.html

  * igt@xe_pm@s4-vm-bind-unbind-all:
    - shard-adlp:         [ABORT][262] ([Intel XE#1794]) -> [PASS][263]
   [262]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-adlp-9/igt@xe_pm@s4-vm-bind-unbind-all.html
   [263]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-4/igt@xe_pm@s4-vm-bind-unbind-all.html

  
#### Warnings ####

  * igt@core_hotunplug@unplug-rescan:
    - shard-dg2-set2:     [INCOMPLETE][264] ([Intel XE#1195]) -> [SKIP][265] ([Intel XE#1885])
   [264]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-436/igt@core_hotunplug@unplug-rescan.html
   [265]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@core_hotunplug@unplug-rescan.html

  * igt@kms_big_fb@4-tiled-8bpp-rotate-270:
    - shard-dg2-set2:     [SKIP][266] ([Intel XE#2136]) -> [SKIP][267] ([Intel XE#316]) +1 other test skip
   [266]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_big_fb@4-tiled-8bpp-rotate-270.html
   [267]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@kms_big_fb@4-tiled-8bpp-rotate-270.html

  * igt@kms_big_fb@linear-16bpp-rotate-90:
    - shard-dg2-set2:     [SKIP][268] ([Intel XE#2136] / [Intel XE#2351]) -> [SKIP][269] ([Intel XE#316]) +1 other test skip
   [268]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_big_fb@linear-16bpp-rotate-90.html
   [269]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-464/igt@kms_big_fb@linear-16bpp-rotate-90.html

  * igt@kms_big_fb@linear-64bpp-rotate-270:
    - shard-dg2-set2:     [SKIP][270] ([Intel XE#316]) -> [SKIP][271] ([Intel XE#2136] / [Intel XE#2351])
   [270]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-463/igt@kms_big_fb@linear-64bpp-rotate-270.html
   [271]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_big_fb@linear-64bpp-rotate-270.html

  * igt@kms_big_fb@x-tiled-8bpp-rotate-270:
    - shard-dg2-set2:     [SKIP][272] ([Intel XE#316]) -> [SKIP][273] ([Intel XE#2136]) +2 other tests skip
   [272]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_big_fb@x-tiled-8bpp-rotate-270.html
   [273]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_big_fb@x-tiled-8bpp-rotate-270.html

  * igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0:
    - shard-adlp:         [DMESG-FAIL][274] ([Intel XE#1033]) -> [FAIL][275] ([Intel XE#1874])
   [274]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-adlp-4/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0.html
   [275]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-adlp-2/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0.html

  * igt@kms_big_fb@y-tiled-16bpp-rotate-90:
    - shard-dg2-set2:     [SKIP][276] ([Intel XE#2136]) -> [SKIP][277] ([Intel XE#1124]) +2 other tests skip
   [276]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_big_fb@y-tiled-16bpp-rotate-90.html
   [277]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_big_fb@y-tiled-16bpp-rotate-90.html

  * igt@kms_big_fb@y-tiled-64bpp-rotate-180:
    - shard-dg2-set2:     [SKIP][278] ([Intel XE#1124]) -> [SKIP][279] ([Intel XE#2136] / [Intel XE#2351]) +2 other tests skip
   [278]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_big_fb@y-tiled-64bpp-rotate-180.html
   [279]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_big_fb@y-tiled-64bpp-rotate-180.html

  * igt@kms_big_fb@y-tiled-addfb:
    - shard-dg2-set2:     [SKIP][280] ([Intel XE#619]) -> [SKIP][281] ([Intel XE#2136] / [Intel XE#2351])
   [280]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-463/igt@kms_big_fb@y-tiled-addfb.html
   [281]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_big_fb@y-tiled-addfb.html

  * igt@kms_big_fb@y-tiled-addfb-size-overflow:
    - shard-dg2-set2:     [SKIP][282] ([Intel XE#2136]) -> [SKIP][283] ([Intel XE#610])
   [282]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_big_fb@y-tiled-addfb-size-overflow.html
   [283]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_big_fb@y-tiled-addfb-size-overflow.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip:
    - shard-dg2-set2:     [SKIP][284] ([Intel XE#1124]) -> [SKIP][285] ([Intel XE#2136]) +1 other test skip
   [284]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip.html
   [285]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip.html

  * igt@kms_big_fb@yf-tiled-64bpp-rotate-180:
    - shard-dg2-set2:     [SKIP][286] ([Intel XE#2136] / [Intel XE#2351]) -> [SKIP][287] ([Intel XE#1124]) +5 other tests skip
   [286]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_big_fb@yf-tiled-64bpp-rotate-180.html
   [287]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_big_fb@yf-tiled-64bpp-rotate-180.html

  * igt@kms_bw@connected-linear-tiling-1-displays-2560x1440p:
    - shard-dg2-set2:     [SKIP][288] ([Intel XE#2423] / [i915#2575]) -> [SKIP][289] ([Intel XE#367]) +3 other tests skip
   [288]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_bw@connected-linear-tiling-1-displays-2560x1440p.html
   [289]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_bw@connected-linear-tiling-1-displays-2560x1440p.html

  * igt@kms_bw@connected-linear-tiling-1-displays-3840x2160p:
    - shard-dg2-set2:     [SKIP][290] ([Intel XE#367]) -> [SKIP][291] ([Intel XE#2423] / [i915#2575]) +1 other test skip
   [290]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-464/igt@kms_bw@connected-linear-tiling-1-displays-3840x2160p.html
   [291]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_bw@connected-linear-tiling-1-displays-3840x2160p.html

  * igt@kms_bw@connected-linear-tiling-4-displays-2160x1440p:
    - shard-dg2-set2:     [SKIP][292] ([Intel XE#2423] / [i915#2575]) -> [SKIP][293] ([Intel XE#2191]) +1 other test skip
   [292]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_bw@connected-linear-tiling-4-displays-2160x1440p.html
   [293]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-464/igt@kms_bw@connected-linear-tiling-4-displays-2160x1440p.html

  * igt@kms_ccs@bad-pixel-format-yf-tiled-ccs:
    - shard-dg2-set2:     [SKIP][294] ([Intel XE#2136]) -> [SKIP][295] ([Intel XE#455] / [Intel XE#787]) +9 other tests skip
   [294]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_ccs@bad-pixel-format-yf-tiled-ccs.html
   [295]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_ccs@bad-pixel-format-yf-tiled-ccs.html

  * igt@kms_ccs@bad-rotation-90-y-tiled-gen12-rc-ccs-cc:
    - shard-dg2-set2:     [SKIP][296] ([Intel XE#455] / [Intel XE#787]) -> [SKIP][297] ([Intel XE#2136]) +6 other tests skip
   [296]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_ccs@bad-rotation-90-y-tiled-gen12-rc-ccs-cc.html
   [297]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_ccs@bad-rotation-90-y-tiled-gen12-rc-ccs-cc.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs-cc:
    - shard-dg2-set2:     [SKIP][298] ([Intel XE#455] / [Intel XE#787]) -> [SKIP][299] ([Intel XE#2136] / [Intel XE#2351]) +1 other test skip
   [298]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs-cc.html
   [299]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs-cc.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs:
    - shard-dg2-set2:     [SKIP][300] -> [SKIP][301] ([Intel XE#455] / [Intel XE#787])
   [300]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs.html
   [301]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-464/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs:
    - shard-dg2-set2:     [SKIP][302] ([Intel XE#2907]) -> [SKIP][303] ([Intel XE#2136])
   [302]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs.html
   [303]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs.html

  * igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs:
    - shard-dg2-set2:     [SKIP][304] ([Intel XE#2136]) -> [SKIP][305] ([Intel XE#2907]) +1 other test skip
   [304]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs.html
   [305]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-464/igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs.html

  * igt@kms_cdclk@mode-transition-all-outputs:
    - shard-dg2-set2:     [SKIP][306] ([Intel XE#2136] / [Intel XE#2351]) -> [SKIP][307] ([Intel XE#314])
   [306]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_cdclk@mode-transition-all-outputs.html
   [307]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_cdclk@mode-transition-all-outputs.html

  * igt@kms_chamelium_color@ctm-blue-to-red:
    - shard-dg2-set2:     [SKIP][308] ([Intel XE#2423] / [i915#2575]) -> [SKIP][309] ([Intel XE#306]) +1 other test skip
   [308]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_chamelium_color@ctm-blue-to-red.html
   [309]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-464/igt@kms_chamelium_color@ctm-blue-to-red.html

  * igt@kms_chamelium_edid@hdmi-edid-stress-resolution-4k:
    - shard-dg2-set2:     [SKIP][310] ([Intel XE#373]) -> [SKIP][311] ([Intel XE#2423] / [i915#2575]) +5 other tests skip
   [310]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_chamelium_edid@hdmi-edid-stress-resolution-4k.html
   [311]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_chamelium_edid@hdmi-edid-stress-resolution-4k.html

  * igt@kms_chamelium_edid@hdmi-mode-timings:
    - shard-dg2-set2:     [SKIP][312] ([Intel XE#2423] / [i915#2575]) -> [SKIP][313] ([Intel XE#373]) +10 other tests skip
   [312]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_chamelium_edid@hdmi-mode-timings.html
   [313]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-435/igt@kms_chamelium_edid@hdmi-mode-timings.html

  * igt@kms_content_protection@dp-mst-type-0:
    - shard-dg2-set2:     [SKIP][314] ([Intel XE#307]) -> [SKIP][315] ([Intel XE#2423] / [i915#2575]) +1 other test skip
   [314]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-464/igt@kms_content_protection@dp-mst-type-0.html
   [315]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_content_protection@dp-mst-type-0.html

  * igt@kms_content_protection@srm:
    - shard-dg2-set2:     [FAIL][316] ([Intel XE#1178]) -> [SKIP][317] ([Intel XE#2423] / [i915#2575])
   [316]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-464/igt@kms_content_protection@srm.html
   [317]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_content_protection@srm.html

  * igt@kms_cursor_crc@cursor-onscreen-512x512:
    - shard-dg2-set2:     [SKIP][318] ([Intel XE#2423] / [i915#2575]) -> [SKIP][319] ([Intel XE#308]) +1 other test skip
   [318]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_cursor_crc@cursor-onscreen-512x512.html
   [319]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-464/igt@kms_cursor_crc@cursor-onscreen-512x512.html

  * igt@kms_cursor_crc@cursor-rapid-movement-512x170:
    - shard-dg2-set2:     [SKIP][320] ([Intel XE#308]) -> [SKIP][321] ([Intel XE#2423] / [i915#2575])
   [320]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html
   [321]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html

  * igt@kms_cursor_crc@cursor-sliding-max-size:
    - shard-dg2-set2:     [SKIP][322] ([Intel XE#2423] / [i915#2575]) -> [SKIP][323] ([Intel XE#455]) +3 other tests skip
   [322]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_cursor_crc@cursor-sliding-max-size.html
   [323]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_cursor_crc@cursor-sliding-max-size.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic:
    - shard-dg2-set2:     [SKIP][324] ([Intel XE#2423] / [i915#2575]) -> [SKIP][325] ([Intel XE#323]) +1 other test skip
   [324]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html
   [325]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-435/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html

  * igt@kms_cursor_legacy@torture-bo:
    - shard-dg2-set2:     [SKIP][326] ([Intel XE#2423] / [i915#2575]) -> [DMESG-WARN][327] ([Intel XE#3184])
   [326]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_cursor_legacy@torture-bo.html
   [327]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-464/igt@kms_cursor_legacy@torture-bo.html

  * igt@kms_dsc@dsc-fractional-bpp-with-bpc:
    - shard-dg2-set2:     [SKIP][328] ([Intel XE#455]) -> [SKIP][329] ([Intel XE#2136] / [Intel XE#2351])
   [328]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_dsc@dsc-fractional-bpp-with-bpc.html
   [329]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_dsc@dsc-fractional-bpp-with-bpc.html

  * igt@kms_feature_discovery@display-3x:
    - shard-dg2-set2:     [SKIP][330] ([Intel XE#703]) -> [SKIP][331] ([Intel XE#2423] / [i915#2575])
   [330]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-464/igt@kms_feature_discovery@display-3x.html
   [331]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_feature_discovery@display-3x.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible:
    - shard-dg2-set2:     [SKIP][332] ([Intel XE#2423] / [i915#2575]) -> [FAIL][333] ([Intel XE#301])
   [332]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html
   [333]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html

  * igt@kms_flip_scaled_crc@flip-32bpp-xtile-to-64bpp-xtile-downscaling:
    - shard-dg2-set2:     [SKIP][334] ([Intel XE#2136] / [Intel XE#2351]) -> [INCOMPLETE][335] ([Intel XE#1195]) +1 other test incomplete
   [334]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_flip_scaled_crc@flip-32bpp-xtile-to-64bpp-xtile-downscaling.html
   [335]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-436/igt@kms_flip_scaled_crc@flip-32bpp-xtile-to-64bpp-xtile-downscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-downscaling:
    - shard-dg2-set2:     [SKIP][336] ([Intel XE#2136] / [Intel XE#2351]) -> [SKIP][337] ([Intel XE#455]) +1 other test skip
   [336]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-downscaling.html
   [337]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-downscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling:
    - shard-dg2-set2:     [SKIP][338] ([Intel XE#2136]) -> [SKIP][339] ([Intel XE#455]) +2 other tests skip
   [338]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling.html
   [339]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-464/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling:
    - shard-dg2-set2:     [SKIP][340] ([Intel XE#455]) -> [SKIP][341] ([Intel XE#2136]) +3 other tests skip
   [340]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling.html
   [341]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling.html

  * igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-blt:
    - shard-bmg:          [SKIP][342] ([Intel XE#2312]) -> [SKIP][343] ([Intel XE#2311])
   [342]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-blt.html
   [343]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@drrs-indfb-scaledprimary:
    - shard-dg2-set2:     [SKIP][344] ([Intel XE#2136]) -> [SKIP][345] ([Intel XE#651]) +20 other tests skip
   [344]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_frontbuffer_tracking@drrs-indfb-scaledprimary.html
   [345]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-464/igt@kms_frontbuffer_tracking@drrs-indfb-scaledprimary.html

  * igt@kms_frontbuffer_tracking@drrs-slowdraw:
    - shard-dg2-set2:     [SKIP][346] ([Intel XE#651]) -> [SKIP][347] ([Intel XE#2136] / [Intel XE#2351]) +5 other tests skip
   [346]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-463/igt@kms_frontbuffer_tracking@drrs-slowdraw.html
   [347]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_frontbuffer_tracking@drrs-slowdraw.html

  * igt@kms_frontbuffer_tracking@fbc-1p-pri-indfb-multidraw:
    - shard-bmg:          [DMESG-FAIL][348] -> [FAIL][349] ([Intel XE#2333]) +1 other test fail
   [348]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-1/igt@kms_frontbuffer_tracking@fbc-1p-pri-indfb-multidraw.html
   [349]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-1p-pri-indfb-multidraw.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-blt:
    - shard-bmg:          [SKIP][350] ([Intel XE#2312]) -> [FAIL][351] ([Intel XE#2333])
   [350]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-blt.html
   [351]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-3/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-rte:
    - shard-dg2-set2:     [ABORT][352] -> [SKIP][353] ([Intel XE#2136])
   [352]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_frontbuffer_tracking@fbc-2p-rte.html
   [353]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_frontbuffer_tracking@fbc-2p-rte.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-indfb-plflip-blt:
    - shard-bmg:          [FAIL][354] ([Intel XE#2333]) -> [SKIP][355] ([Intel XE#2312])
   [354]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-4/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-indfb-plflip-blt.html
   [355]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-indfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-blt:
    - shard-dg2-set2:     [SKIP][356] ([Intel XE#2136] / [Intel XE#2351]) -> [SKIP][357] ([Intel XE#651]) +8 other tests skip
   [356]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-blt.html
   [357]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-mmap-wc:
    - shard-dg2-set2:     [SKIP][358] ([Intel XE#651]) -> [SKIP][359] ([Intel XE#2136]) +9 other tests skip
   [358]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-mmap-wc.html
   [359]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-blt:
    - shard-dg2-set2:     [SKIP][360] ([Intel XE#2136]) -> [SKIP][361] ([Intel XE#653]) +21 other tests skip
   [360]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-blt.html
   [361]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-render:
    - shard-dg2-set2:     [SKIP][362] ([Intel XE#653]) -> [SKIP][363] ([Intel XE#2136] / [Intel XE#2351]) +6 other tests skip
   [362]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-436/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-render.html
   [363]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-shrfb-pgflip-blt:
    - shard-dg2-set2:     [SKIP][364] ([Intel XE#653]) -> [SKIP][365] ([Intel XE#2136]) +10 other tests skip
   [364]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_frontbuffer_tracking@psr-2p-primscrn-shrfb-pgflip-blt.html
   [365]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_frontbuffer_tracking@psr-2p-primscrn-shrfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-render:
    - shard-dg2-set2:     [SKIP][366] ([Intel XE#2136] / [Intel XE#2351]) -> [SKIP][367] ([Intel XE#653]) +5 other tests skip
   [366]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-render.html
   [367]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-435/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-render.html

  * igt@kms_joiner@basic-big-joiner:
    - shard-dg2-set2:     [SKIP][368] ([Intel XE#2136]) -> [SKIP][369] ([Intel XE#346])
   [368]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_joiner@basic-big-joiner.html
   [369]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@kms_joiner@basic-big-joiner.html

  * igt@kms_joiner@basic-ultra-joiner:
    - shard-dg2-set2:     [SKIP][370] ([Intel XE#2927]) -> [SKIP][371] ([Intel XE#2136])
   [370]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_joiner@basic-ultra-joiner.html
   [371]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_joiner@basic-ultra-joiner.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-25-with-modifiers:
    - shard-dg2-set2:     [SKIP][372] ([Intel XE#2763] / [Intel XE#455]) -> [SKIP][373] ([Intel XE#2423] / [i915#2575])
   [372]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-modifiers.html
   [373]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-modifiers.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling:
    - shard-dg2-set2:     [SKIP][374] ([Intel XE#2423] / [i915#2575]) -> [SKIP][375] ([Intel XE#2763] / [Intel XE#455]) +1 other test skip
   [374]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling.html
   [375]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-435/igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling.html

  * igt@kms_pm_dc@dc5-retention-flops:
    - shard-dg2-set2:     [SKIP][376] -> [SKIP][377] ([Intel XE#3309])
   [376]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_pm_dc@dc5-retention-flops.html
   [377]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-464/igt@kms_pm_dc@dc5-retention-flops.html

  * igt@kms_pm_rpm@basic-pci-d3-state:
    - shard-dg2-set2:     [DMESG-WARN][378] -> [SKIP][379] ([Intel XE#2446])
   [378]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-463/igt@kms_pm_rpm@basic-pci-d3-state.html
   [379]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_pm_rpm@basic-pci-d3-state.html

  * igt@kms_psr2_sf@fbc-pr-cursor-plane-update-sf:
    - shard-dg2-set2:     [SKIP][380] ([Intel XE#1489]) -> [SKIP][381] ([Intel XE#2136]) +3 other tests skip
   [380]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_psr2_sf@fbc-pr-cursor-plane-update-sf.html
   [381]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_psr2_sf@fbc-pr-cursor-plane-update-sf.html

  * igt@kms_psr2_sf@psr2-overlay-primary-update-sf-dmg-area:
    - shard-dg2-set2:     [SKIP][382] ([Intel XE#2136]) -> [SKIP][383] ([Intel XE#1489]) +8 other tests skip
   [382]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_psr2_sf@psr2-overlay-primary-update-sf-dmg-area.html
   [383]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_psr2_sf@psr2-overlay-primary-update-sf-dmg-area.html

  * igt@kms_psr2_su@page_flip-nv12:
    - shard-dg2-set2:     [SKIP][384] ([Intel XE#1122]) -> [SKIP][385] ([Intel XE#2136])
   [384]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_psr2_su@page_flip-nv12.html
   [385]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_psr2_su@page_flip-nv12.html

  * igt@kms_psr2_su@page_flip-p010:
    - shard-dg2-set2:     [SKIP][386] ([Intel XE#2136]) -> [SKIP][387] ([Intel XE#1122])
   [386]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_psr2_su@page_flip-p010.html
   [387]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-435/igt@kms_psr2_su@page_flip-p010.html

  * igt@kms_psr@fbc-psr-no-drrs:
    - shard-dg2-set2:     [SKIP][388] ([Intel XE#2850] / [Intel XE#929]) -> [SKIP][389] ([Intel XE#2136] / [Intel XE#2351]) +3 other tests skip
   [388]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_psr@fbc-psr-no-drrs.html
   [389]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_psr@fbc-psr-no-drrs.html

  * igt@kms_psr@fbc-psr2-sprite-plane-move:
    - shard-dg2-set2:     [SKIP][390] ([Intel XE#2136]) -> [SKIP][391] ([Intel XE#2850] / [Intel XE#929]) +9 other tests skip
   [390]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_psr@fbc-psr2-sprite-plane-move.html
   [391]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-464/igt@kms_psr@fbc-psr2-sprite-plane-move.html

  * igt@kms_psr@psr-dpms:
    - shard-dg2-set2:     [SKIP][392] ([Intel XE#2136] / [Intel XE#2351]) -> [SKIP][393] ([Intel XE#2850] / [Intel XE#929]) +3 other tests skip
   [392]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_psr@psr-dpms.html
   [393]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-435/igt@kms_psr@psr-dpms.html

  * igt@kms_psr@psr2-sprite-plane-move:
    - shard-dg2-set2:     [SKIP][394] ([Intel XE#2850] / [Intel XE#929]) -> [SKIP][395] ([Intel XE#2136]) +3 other tests skip
   [394]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@kms_psr@psr2-sprite-plane-move.html
   [395]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_psr@psr2-sprite-plane-move.html

  * igt@kms_psr_stress_test@invalidate-primary-flip-overlay:
    - shard-dg2-set2:     [SKIP][396] ([Intel XE#2939]) -> [SKIP][397] ([Intel XE#2136])
   [396]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-464/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html
   [397]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html

  * igt@kms_rotation_crc@bad-pixel-format:
    - shard-dg2-set2:     [SKIP][398] ([Intel XE#2423] / [i915#2575]) -> [SKIP][399] ([Intel XE#3414]) +2 other tests skip
   [398]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_rotation_crc@bad-pixel-format.html
   [399]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-464/igt@kms_rotation_crc@bad-pixel-format.html

  * igt@kms_rotation_crc@bad-tiling:
    - shard-dg2-set2:     [SKIP][400] ([Intel XE#3414]) -> [SKIP][401] ([Intel XE#2423] / [i915#2575]) +1 other test skip
   [400]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-464/igt@kms_rotation_crc@bad-tiling.html
   [401]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_rotation_crc@bad-tiling.html

  * igt@kms_rotation_crc@primary-y-tiled-reflect-x-0:
    - shard-dg2-set2:     [SKIP][402] ([Intel XE#2423] / [i915#2575]) -> [SKIP][403] ([Intel XE#1127]) +1 other test skip
   [402]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_rotation_crc@primary-y-tiled-reflect-x-0.html
   [403]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_rotation_crc@primary-y-tiled-reflect-x-0.html

  * igt@kms_tiled_display@basic-test-pattern-with-chamelium:
    - shard-bmg:          [SKIP][404] ([Intel XE#2426]) -> [SKIP][405] ([Intel XE#2509])
   [404]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-bmg-5/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
   [405]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-bmg-6/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html

  * igt@kms_vrr@flipline:
    - shard-dg2-set2:     [SKIP][406] ([Intel XE#455]) -> [SKIP][407] ([Intel XE#2423] / [i915#2575]) +5 other tests skip
   [406]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-464/igt@kms_vrr@flipline.html
   [407]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@kms_vrr@flipline.html

  * igt@kms_vrr@lobf:
    - shard-dg2-set2:     [SKIP][408] ([Intel XE#2423] / [i915#2575]) -> [SKIP][409] ([Intel XE#2168])
   [408]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_vrr@lobf.html
   [409]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@kms_vrr@lobf.html

  * igt@kms_writeback@writeback-pixel-formats:
    - shard-dg2-set2:     [SKIP][410] ([Intel XE#2423] / [i915#2575]) -> [SKIP][411] ([Intel XE#756])
   [410]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@kms_writeback@writeback-pixel-formats.html
   [411]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@kms_writeback@writeback-pixel-formats.html

  * igt@sriov_basic@enable-vfs-autoprobe-off:
    - shard-dg2-set2:     [SKIP][412] ([Intel XE#1091] / [Intel XE#2849]) -> [SKIP][413] ([Intel XE#2423] / [i915#2575])
   [412]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-463/igt@sriov_basic@enable-vfs-autoprobe-off.html
   [413]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@sriov_basic@enable-vfs-autoprobe-off.html

  * igt@xe_compute_preempt@compute-threadgroup-preempt:
    - shard-dg2-set2:     [SKIP][414] ([Intel XE#1130]) -> [SKIP][415] ([Intel XE#1280] / [Intel XE#455])
   [414]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@xe_compute_preempt@compute-threadgroup-preempt.html
   [415]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-435/igt@xe_compute_preempt@compute-threadgroup-preempt.html

  * igt@xe_copy_basic@mem-copy-linear-0x3fff:
    - shard-dg2-set2:     [SKIP][416] ([Intel XE#1130]) -> [SKIP][417] ([Intel XE#1123])
   [416]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@xe_copy_basic@mem-copy-linear-0x3fff.html
   [417]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@xe_copy_basic@mem-copy-linear-0x3fff.html

  * igt@xe_copy_basic@mem-set-linear-0xfffe:
    - shard-dg2-set2:     [SKIP][418] ([Intel XE#1130]) -> [SKIP][419] ([Intel XE#1126])
   [418]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@xe_copy_basic@mem-set-linear-0xfffe.html
   [419]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-464/igt@xe_copy_basic@mem-set-linear-0xfffe.html

  * igt@xe_eudebug_online@interrupt-all-set-breakpoint:
    - shard-dg2-set2:     [SKIP][420] ([Intel XE#2905]) -> [SKIP][421] ([Intel XE#1130]) +5 other tests skip
   [420]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@xe_eudebug_online@interrupt-all-set-breakpoint.html
   [421]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@xe_eudebug_online@interrupt-all-set-breakpoint.html

  * igt@xe_eudebug_online@resume-dss:
    - shard-dg2-set2:     [SKIP][422] ([Intel XE#1130]) -> [SKIP][423] ([Intel XE#2905]) +7 other tests skip
   [422]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@xe_eudebug_online@resume-dss.html
   [423]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-436/igt@xe_eudebug_online@resume-dss.html

  * igt@xe_evict@evict-beng-mixed-many-threads-small:
    - shard-dg2-set2:     [SKIP][424] ([Intel XE#1130]) -> [TIMEOUT][425] ([Intel XE#1473] / [Intel XE#402])
   [424]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@xe_evict@evict-beng-mixed-many-threads-small.html
   [425]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-435/igt@xe_evict@evict-beng-mixed-many-threads-small.html

  * igt@xe_evict@evict-large-multi-vm-cm:
    - shard-dg2-set2:     [SKIP][426] ([Intel XE#1130]) -> [FAIL][427] ([Intel XE#1600])
   [426]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@xe_evict@evict-large-multi-vm-cm.html
   [427]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-435/igt@xe_evict@evict-large-multi-vm-cm.html

  * igt@xe_exec_fault_mode@twice-bindexecqueue-userptr-rebind-prefetch:
    - shard-dg2-set2:     [SKIP][428] ([Intel XE#288]) -> [SKIP][429] ([Intel XE#1130]) +19 other tests skip
   [428]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@xe_exec_fault_mode@twice-bindexecqueue-userptr-rebind-prefetch.html
   [429]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@xe_exec_fault_mode@twice-bindexecqueue-userptr-rebind-prefetch.html

  * igt@xe_exec_fault_mode@twice-userptr-invalidate-race:
    - shard-dg2-set2:     [SKIP][430] ([Intel XE#1130]) -> [SKIP][431] ([Intel XE#288]) +23 other tests skip
   [430]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@xe_exec_fault_mode@twice-userptr-invalidate-race.html
   [431]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@xe_exec_fault_mode@twice-userptr-invalidate-race.html

  * igt@xe_exec_mix_modes@exec-spinner-interrupted-dma-fence:
    - shard-dg2-set2:     [SKIP][432] ([Intel XE#2360]) -> [SKIP][433] ([Intel XE#1130]) +1 other test skip
   [432]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-436/igt@xe_exec_mix_modes@exec-spinner-interrupted-dma-fence.html
   [433]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@xe_exec_mix_modes@exec-spinner-interrupted-dma-fence.html

  * igt@xe_exec_threads@threads-hang-shared-vm-rebind:
    - shard-dg2-set2:     [SKIP][434] ([Intel XE#1130]) -> [DMESG-WARN][435] ([Intel XE#358]) +3 other tests dmesg-warn
   [434]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@xe_exec_threads@threads-hang-shared-vm-rebind.html
   [435]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-464/igt@xe_exec_threads@threads-hang-shared-vm-rebind.html

  * igt@xe_fault_injection@inject-fault-probe-function-xe_device_create:
    - shard-dg2-set2:     [DMESG-WARN][436] -> [SKIP][437] ([Intel XE#1130]) +3 other tests skip
   [436]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@xe_fault_injection@inject-fault-probe-function-xe_device_create.html
   [437]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@xe_fault_injection@inject-fault-probe-function-xe_device_create.html

  * igt@xe_oa@closed-fd-and-unmapped-access:
    - shard-dg2-set2:     [SKIP][438] ([Intel XE#1130]) -> [SKIP][439] ([Intel XE#2541]) +5 other tests skip
   [438]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@xe_oa@closed-fd-and-unmapped-access.html
   [439]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-464/igt@xe_oa@closed-fd-and-unmapped-access.html

  * igt@xe_oa@mmio-triggered-reports:
    - shard-dg2-set2:     [SKIP][440] ([Intel XE#2541]) -> [SKIP][441] ([Intel XE#1130]) +4 other tests skip
   [440]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-464/igt@xe_oa@mmio-triggered-reports.html
   [441]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@xe_oa@mmio-triggered-reports.html

  * igt@xe_pat@display-vs-wb-transient:
    - shard-dg2-set2:     [SKIP][442] ([Intel XE#1130]) -> [SKIP][443] ([Intel XE#1337])
   [442]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@xe_pat@display-vs-wb-transient.html
   [443]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@xe_pat@display-vs-wb-transient.html

  * igt@xe_pat@pat-index-xelpg:
    - shard-dg2-set2:     [SKIP][444] ([Intel XE#979]) -> [SKIP][445] ([Intel XE#1130])
   [444]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@xe_pat@pat-index-xelpg.html
   [445]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@xe_pat@pat-index-xelpg.html

  * igt@xe_pm@d3cold-mmap-vram:
    - shard-dg2-set2:     [SKIP][446] ([Intel XE#1130]) -> [SKIP][447] ([Intel XE#2284] / [Intel XE#366])
   [446]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@xe_pm@d3cold-mmap-vram.html
   [447]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-463/igt@xe_pm@d3cold-mmap-vram.html

  * igt@xe_pm@d3cold-mocs:
    - shard-dg2-set2:     [SKIP][448] ([Intel XE#1130]) -> [SKIP][449] ([Intel XE#2284])
   [448]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@xe_pm@d3cold-mocs.html
   [449]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-434/igt@xe_pm@d3cold-mocs.html

  * igt@xe_pm@s4-vm-bind-userptr:
    - shard-dg2-set2:     [SKIP][450] ([Intel XE#1130]) -> [DMESG-WARN][451] ([Intel XE#2280])
   [450]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@xe_pm@s4-vm-bind-userptr.html
   [451]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-435/igt@xe_pm@s4-vm-bind-userptr.html

  * igt@xe_query@multigpu-query-cs-cycles:
    - shard-dg2-set2:     [SKIP][452] ([Intel XE#944]) -> [SKIP][453] ([Intel XE#1130]) +1 other test skip
   [452]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@xe_query@multigpu-query-cs-cycles.html
   [453]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@xe_query@multigpu-query-cs-cycles.html

  * igt@xe_query@multigpu-query-oa-units:
    - shard-dg2-set2:     [SKIP][454] ([Intel XE#1130]) -> [SKIP][455] ([Intel XE#944]) +2 other tests skip
   [454]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-466/igt@xe_query@multigpu-query-oa-units.html
   [455]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-464/igt@xe_query@multigpu-query-oa-units.html

  * igt@xe_wedged@wedged-at-any-timeout:
    - shard-dg2-set2:     [ABORT][456] ([Intel XE#3421]) -> [SKIP][457] ([Intel XE#1130])
   [456]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88/shard-dg2-434/igt@xe_wedged@wedged-at-any-timeout.html
   [457]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/shard-dg2-466/igt@xe_wedged@wedged-at-any-timeout.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [Intel XE#1033]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1033
  [Intel XE#1091]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1091
  [Intel XE#1122]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1122
  [Intel XE#1123]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1123
  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [Intel XE#1126]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1126
  [Intel XE#1127]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1127
  [Intel XE#1129]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1129
  [Intel XE#1130]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1130
  [Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
  [Intel XE#1192]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1192
  [Intel XE#1195]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1195
  [Intel XE#1280]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1280
  [Intel XE#1337]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1337
  [Intel XE#1358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1358
  [Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
  [Intel XE#1407]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1407
  [Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
  [Intel XE#1430]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1430
  [Intel XE#1439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1439
  [Intel XE#1473]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1473
  [Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
  [Intel XE#1499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1499
  [Intel XE#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
  [Intel XE#1512]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1512
  [Intel XE#1600]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1600
  [Intel XE#1607]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1607
  [Intel XE#1695]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1695
  [Intel XE#1794]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1794
  [Intel XE#1874]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1874
  [Intel XE#1885]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1885
  [Intel XE#2029]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2029
  [Intel XE#2049]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2049
  [Intel XE#2134]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2134
  [Intel XE#2136]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2136
  [Intel XE#2159]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2159
  [Intel XE#2168]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2168
  [Intel XE#2191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2191
  [Intel XE#2229]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2229
  [Intel XE#2233]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2233
  [Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
  [Intel XE#2244]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2244
  [Intel XE#2248]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2248
  [Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
  [Intel XE#2280]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2280
  [Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
  [Intel XE#2286]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2286
  [Intel XE#2293]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2293
  [Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
  [Intel XE#2312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2312
  [Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
  [Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
  [Intel XE#2321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2321
  [Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
  [Intel XE#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
  [Intel XE#2333]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2333
  [Intel XE#2341]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2341
  [Intel XE#2351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2351
  [Intel XE#2360]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2360
  [Intel XE#2364]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2364
  [Intel XE#2375]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2375
  [Intel XE#2380]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2380
  [Intel XE#2390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2390
  [Intel XE#2423]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2423
  [Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
  [Intel XE#2446]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2446
  [Intel XE#2459]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2459
  [Intel XE#2501]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2501
  [Intel XE#2509]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2509
  [Intel XE#2541]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2541
  [Intel XE#2550]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2550
  [Intel XE#2596]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2596
  [Intel XE#2597]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2597
  [Intel XE#261]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/261
  [Intel XE#2652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2652
  [Intel XE#2667]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2667
  [Intel XE#2669]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2669
  [Intel XE#2763]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2763
  [Intel XE#2849]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2849
  [Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
  [Intel XE#288]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/288
  [Intel XE#2882]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2882
  [Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
  [Intel XE#2893]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2893
  [Intel XE#2905]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2905
  [Intel XE#2907]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2907
  [Intel XE#2919]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2919
  [Intel XE#2927]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2927
  [Intel XE#2938]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2938
  [Intel XE#2939]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2939
  [Intel XE#2953]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2953
  [Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
  [Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306
  [Intel XE#307]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/307
  [Intel XE#308]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/308
  [Intel XE#3086]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3086
  [Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
  [Intel XE#3119]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3119
  [Intel XE#314]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/314
  [Intel XE#3141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3141
  [Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
  [Intel XE#316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/316
  [Intel XE#3184]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3184
  [Intel XE#323]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/323
  [Intel XE#3309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3309
  [Intel XE#3414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3414
  [Intel XE#3421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3421
  [Intel XE#3426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3426
  [Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
  [Intel XE#346]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/346
  [Intel XE#358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/358
  [Intel XE#361]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/361
  [Intel XE#366]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/366
  [Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
  [Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
  [Intel XE#402]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/402
  [Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
  [Intel XE#569]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/569
  [Intel XE#586]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/586
  [Intel XE#610]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/610
  [Intel XE#619]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/619
  [Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
  [Intel XE#653]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/653
  [Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
  [Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
  [Intel XE#703]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/703
  [Intel XE#756]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/756
  [Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
  [Intel XE#877]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/877
  [Intel XE#886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/886
  [Intel XE#899]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/899
  [Intel XE#911]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/911
  [Intel XE#929]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/929
  [Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
  [Intel XE#979]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/979
  [i915#2575]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2575


Build changes
-------------

  * Linux: xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88 -> xe-pw-141459v1

  IGT_8114: 8114
  xe-2244-5b1f614ccf1008e7aee531bf76bb639802e0df88: 5b1f614ccf1008e7aee531bf76bb639802e0df88
  xe-pw-141459v1: 141459v1

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-141459v1/index.html

[-- Attachment #2: Type: text/html, Size: 147044 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/1] drm/xe/guc/capture: Maintenence of devcoredump <-> GuC-Err-Capture plumbing
  2024-11-17 18:44 ` [PATCH 1/1] drm/xe/guc/capture: " Alan Previn
@ 2024-11-26 17:09   ` Dong, Zhanjun
  2024-12-03  3:12     ` Teres Alexis, Alan Previn
  0 siblings, 1 reply; 12+ messages in thread
From: Dong, Zhanjun @ 2024-11-26 17:09 UTC (permalink / raw)
  To: Alan Previn, intel-xe
  Cc: dri-devel, Daniele Ceraolo Spurio, John Harrison, Matthew Brost

See my comments inline below:

Regards,
Zhanjun

On 2024-11-17 1:44 p.m., Alan Previn wrote:
> The order of the devcoredump event flow is:
> drm-scheduler -> guc-submission-execq-timed-out-job ->
> guc-submission-kill-job -> xe-devcoredump (once the work
> is confirmed to have been killed).
> 
> As we are aware, the GuC-FW IRQ for error-capture delivery
> and extraction could have happenned before the start of
happened?
> guc-execq-timed-out-job or the middle of it (before or
> during the explicit kill) or not at all. Thus, today, the
> above flow takes a manual capture first before triggering
> the kill-job just in case we need it.
> 
> The structure layering of devcoredump internals are:
> xe_devcoredump_snapshot -> xe_foo_snapshot (where foo
> can be any data dump associated to the job was killed).
> Foo includes the xe_hw_engine_snapshot. Since GuC-Error-Capture
> provides just the register dump of an engine, GuC-Err-Capture
> snapshots should be managed by the xe_hw_engine_snapshot.
> That isn't the case today.
> 
> Furthermode, neither xe_devcoredump_snapshot nor
Furthermore?
> xe_hw_engine_snapshot even exists at the start of
> guc-submission-execq-timed-out-job. Thus, the first
> manual capture node has no home. However, today,
> GuC-Error-Capture stores capture snapshots off the
> top-level xe_devcoredump_snapshot's matched_node.
> GuC-Error-Capture also had absorbed the function for
> xe_hw_engine_snapshot generation.
>       NOTE: Existing code isn't broken because xe_devcoredump
>       is not dynamically allocated and designed to hold a
>       single event at a time (i.e. single engine dump).
>       But it's not scalable for future improvement.
> 
> Thus this patch:
> 1. Moves "matched_node" from xe_devcoredump_snapshot to
>     xe_hw_engine_snapshot.
> 2. Relocates the functions for xe_hw_engine_snapshot generation
>     and printing back to xe_hw_engine.c. However, split out the
>     register dump printing so it stays within GuC-Error-Capture
>     (so we don't need to maintain two sets of register lists).
> 3. Keep both the manual and firmware capture nodes within
>     GuC-Error-Capture subsystem's linked list until
>     xe_hw_engine_snapshot gets and puts them later.
> 4. Give xe_hw_engine_snapshot the control and ability to
>     query GuC-Error-Capture for matching snapshots while choosing
>     between manual vs firmware capture getting/putting node.
> 5. While at it, relocate (and rename) key structures, enums
>     and function protos to xe_guc_capture_snapshot_types.h
>     (as an inter-module header) for xe_hw_engine_snapshot to use.
> 6. Since xe_hw_engine_snapshot can also be called by via debugfs
>     without a job, create a new function that does a manual capture
>     of engine registers without any associated job.
> 
> Signed-off-by: Alan Previn <alan.previn.teres.alexis@intel.com>
> ---
>   drivers/gpu/drm/xe/xe_devcoredump.c           |   3 -
>   drivers/gpu/drm/xe/xe_devcoredump_types.h     |   6 -
>   drivers/gpu/drm/xe/xe_guc_capture.c           | 397 ++++++++----------
>   drivers/gpu/drm/xe/xe_guc_capture.h           |  10 +-
>   .../drm/xe/xe_guc_capture_snapshot_types.h    |  68 +++
>   drivers/gpu/drm/xe/xe_guc_submit.c            |  21 +-
>   drivers/gpu/drm/xe/xe_hw_engine.c             | 117 ++++--
>   drivers/gpu/drm/xe/xe_hw_engine.h             |   4 +-
>   drivers/gpu/drm/xe/xe_hw_engine_types.h       |  13 +-
>   9 files changed, 353 insertions(+), 286 deletions(-)
>   create mode 100644 drivers/gpu/drm/xe/xe_guc_capture_snapshot_types.h
> 
> diff --git a/drivers/gpu/drm/xe/xe_devcoredump.c b/drivers/gpu/drm/xe/xe_devcoredump.c
> index 0e5edf14a241..b98d71e670ca 100644
> --- a/drivers/gpu/drm/xe/xe_devcoredump.c
> +++ b/drivers/gpu/drm/xe/xe_devcoredump.c
> @@ -144,9 +144,6 @@ static void xe_devcoredump_snapshot_free(struct xe_devcoredump_snapshot *ss)
>   	xe_guc_ct_snapshot_free(ss->guc.ct);
>   	ss->guc.ct = NULL;
>   
> -	xe_guc_capture_put_matched_nodes(&ss->gt->uc.guc);
> -	ss->matched_node = NULL;
> -
>   	xe_guc_exec_queue_snapshot_free(ss->ge);
>   	ss->ge = NULL;
>   
> diff --git a/drivers/gpu/drm/xe/xe_devcoredump_types.h b/drivers/gpu/drm/xe/xe_devcoredump_types.h
> index be4d59ea9ac8..06ac75ce63dd 100644
> --- a/drivers/gpu/drm/xe/xe_devcoredump_types.h
> +++ b/drivers/gpu/drm/xe/xe_devcoredump_types.h
> @@ -49,12 +49,6 @@ struct xe_devcoredump_snapshot {
>   	struct xe_hw_engine_snapshot *hwe[XE_NUM_HW_ENGINES];
>   	/** @job: Snapshot of job state */
>   	struct xe_sched_job_snapshot *job;
> -	/**
> -	 * @matched_node: The matched capture node for timedout job
> -	 * this single-node tracker works because devcoredump will always only
> -	 * produce one hw-engine capture per devcoredump event
> -	 */
> -	struct __guc_capture_parsed_output *matched_node;
>   	/** @vm: Snapshot of VM state */
>   	struct xe_vm_snapshot *vm;
>   
> diff --git a/drivers/gpu/drm/xe/xe_guc_capture.c b/drivers/gpu/drm/xe/xe_guc_capture.c
> index f87755af545f..691fc72a5c9e 100644
> --- a/drivers/gpu/drm/xe/xe_guc_capture.c
> +++ b/drivers/gpu/drm/xe/xe_guc_capture.c
> @@ -26,6 +26,7 @@
>   #include "xe_guc_ads.h"
>   #include "xe_guc_capture.h"
>   #include "xe_guc_capture_types.h"
> +#include "xe_guc_capture_snapshot_types.h"
>   #include "xe_guc_ct.h"
>   #include "xe_guc_exec_queue_types.h"
>   #include "xe_guc_log.h"
> @@ -53,40 +54,6 @@ struct __guc_capture_bufstate {
>   	u32 wr;
>   };
>   
> -/*
> - * struct __guc_capture_parsed_output - extracted error capture node
> - *
> - * A single unit of extracted error-capture output data grouped together
> - * at an engine-instance level. We keep these nodes in a linked list.
> - * See cachelist and outlist below.
> - */
> -struct __guc_capture_parsed_output {
> -	/*
> -	 * A single set of 3 capture lists: a global-list
> -	 * an engine-class-list and an engine-instance list.
> -	 * outlist in __guc_capture_parsed_output will keep
> -	 * a linked list of these nodes that will eventually
> -	 * be detached from outlist and attached into to
> -	 * xe_codedump in response to a context reset
> -	 */
> -	struct list_head link;
> -	bool is_partial;
> -	u32 eng_class;
> -	u32 eng_inst;
> -	u32 guc_id;
> -	u32 lrca;
> -	u32 type;
> -	bool locked;
> -	enum xe_hw_engine_snapshot_source_id source;
> -	struct gcap_reg_list_info {
> -		u32 vfid;
> -		u32 num_regs;
> -		struct guc_mmio_reg *regs;
> -	} reginfo[GUC_STATE_CAPTURE_TYPE_MAX];
> -#define GCAP_PARSED_REGLIST_INDEX_GLOBAL   BIT(GUC_STATE_CAPTURE_TYPE_GLOBAL)
> -#define GCAP_PARSED_REGLIST_INDEX_ENGCLASS BIT(GUC_STATE_CAPTURE_TYPE_ENGINE_CLASS)
> -};
> -
>   /*
>    * Define all device tables of GuC error capture register lists
>    * NOTE:
> @@ -286,7 +253,7 @@ struct xe_guc_state_capture {
>   
>   static void
>   guc_capture_remove_stale_matches_from_list(struct xe_guc_state_capture *gc,
> -					   struct __guc_capture_parsed_output *node);
> +					   struct xe_guc_capture_snapshot *node);
>   
>   static const struct __guc_mmio_reg_descr_group *
>   guc_capture_get_device_reglist(struct xe_device *xe)
> @@ -840,7 +807,7 @@ static void check_guc_capture_size(struct xe_guc *guc)
>   }
>   
>   static void
> -guc_capture_add_node_to_list(struct __guc_capture_parsed_output *node,
> +guc_capture_add_node_to_list(struct xe_guc_capture_snapshot *node,
>   			     struct list_head *list)
>   {
>   	list_add(&node->link, list);
> @@ -848,7 +815,7 @@ guc_capture_add_node_to_list(struct __guc_capture_parsed_output *node,
>   
>   static void
>   guc_capture_add_node_to_outlist(struct xe_guc_state_capture *gc,
> -				struct __guc_capture_parsed_output *node)
> +				struct xe_guc_capture_snapshot *node)
>   {
>   	guc_capture_remove_stale_matches_from_list(gc, node);
>   	guc_capture_add_node_to_list(node, &gc->outlist);
> @@ -856,17 +823,17 @@ guc_capture_add_node_to_outlist(struct xe_guc_state_capture *gc,
>   
>   static void
>   guc_capture_add_node_to_cachelist(struct xe_guc_state_capture *gc,
> -				  struct __guc_capture_parsed_output *node)
> +				  struct xe_guc_capture_snapshot *node)
>   {
>   	guc_capture_add_node_to_list(node, &gc->cachelist);
>   }
>   
>   static void
>   guc_capture_free_outlist_node(struct xe_guc_state_capture *gc,
> -			      struct __guc_capture_parsed_output *n)
> +			      struct xe_guc_capture_snapshot *n)
>   {
>   	if (n) {
> -		n->locked = 0;
> +		n->locked = false;
>   		list_del(&n->link);
>   		/* put node back to cache list */
>   		guc_capture_add_node_to_cachelist(gc, n);
> @@ -875,9 +842,9 @@ guc_capture_free_outlist_node(struct xe_guc_state_capture *gc,
>   
>   static void
>   guc_capture_remove_stale_matches_from_list(struct xe_guc_state_capture *gc,
> -					   struct __guc_capture_parsed_output *node)
> +					   struct xe_guc_capture_snapshot *node)
>   {
> -	struct __guc_capture_parsed_output *n, *ntmp;
> +	struct xe_guc_capture_snapshot *n, *ntmp;
>   	int guc_id = node->guc_id;
>   
>   	list_for_each_entry_safe(n, ntmp, &gc->outlist, link) {
> @@ -887,7 +854,7 @@ guc_capture_remove_stale_matches_from_list(struct xe_guc_state_capture *gc,
>   }
>   
>   static void
> -guc_capture_init_node(struct xe_guc *guc, struct __guc_capture_parsed_output *node)
> +guc_capture_init_node(struct xe_guc *guc, struct xe_guc_capture_snapshot *node)
>   {
>   	struct guc_mmio_reg *tmp[GUC_STATE_CAPTURE_TYPE_MAX];
>   	int i;
> @@ -934,24 +901,31 @@ guc_capture_init_node(struct xe_guc *guc, struct __guc_capture_parsed_output *no
>    *                   This node is created from a pre-allocated list of blank nodes in
>    *                   guc->capture->cachelist and populated with the error-capture
>    *                   data from GuC and then it's added into guc->capture->outlist linked
> - *                   list. This list is used for matchup and printout by xe_devcoredump_read
> - *                   and xe_engine_snapshot_print, (when user invokes the devcoredump sysfs).
> + *                   list. This node (dumped-register-lists) will be requested later by
> + *                   xe_hwe_engine_snapshot creation.
>    *
> - * GUC --> notify context reset:
> - * -----------------------------
> + * DRM Scheduler job-timeout OR GuC-notify guc-id reset:
> + * -----------------------------------------------------
>    *     --> guc_exec_queue_timedout_job
> - *                   L--> xe_devcoredump
> - *                          L--> devcoredump_snapshot
> - *                               --> xe_hw_engine_snapshot_capture
> - *                               --> xe_engine_manual_capture(For manual capture)
> + *             L--> alloc D: xe_guc_capture_snapshot_store_manual_job
> + *                           (only if "alloc C" above didn't happen)
> + *             L--> devcoredump_snapshot
> + *                      --> xe_engine_snapshot_capture_for_queue(q) ..
> + *                               --> xe_guc_capture_snapshot_get(q)
> + *                                   use "alloc C" or else "alloc D"
> + *                               --> store in xe_hw_engine_snapshot->matched_node
>    *
> - * User Sysfs / Debugfs
> - * --------------------
> - *      --> xe_devcoredump_read->
> + * User Devcoredump Sysfs
> + * ----------------------
> + *      --> xe_devcoredump_read-> (user cats devcoredump)
>    *             L--> xxx_snapshot_print
>    *                    L--> xe_engine_snapshot_print
> - *                         Print register lists values saved at
> - *                         guc->capture->outlist
> + *                           L --> xe_guc_capture_snapshot_print (for printing register
> + *                                 lists values of xe_hw_engine_snapshot->matched_node)
> + *      --> xe_devcoredump_free (user clears devcoredump)
> + *             L--> xe_devcoredump_free -> xe_devcoredump_snapshot_free
> + *                    L--> xe_hw_engine_snapshot_free
> + *                           L--> xe_guc_capture_snapshot_put(matched_node)
>    *
>    */
>   
> @@ -1066,13 +1040,13 @@ guc_capture_log_get_register(struct xe_guc *guc, struct __guc_capture_bufstate *
>   	return 0;
>   }
>   
> -static struct __guc_capture_parsed_output *
> +static struct xe_guc_capture_snapshot *
>   guc_capture_get_prealloc_node(struct xe_guc *guc)
>   {
> -	struct __guc_capture_parsed_output *found = NULL;
> +	struct xe_guc_capture_snapshot *found = NULL;
>   
>   	if (!list_empty(&guc->capture->cachelist)) {
> -		struct __guc_capture_parsed_output *n, *ntmp;
> +		struct xe_guc_capture_snapshot *n, *ntmp;
>   
>   		/* get first avail node from the cache list */
>   		list_for_each_entry_safe(n, ntmp, &guc->capture->cachelist, link) {
> @@ -1080,7 +1054,7 @@ guc_capture_get_prealloc_node(struct xe_guc *guc)
>   			break;
>   		}
>   	} else {
> -		struct __guc_capture_parsed_output *n, *ntmp;
> +		struct xe_guc_capture_snapshot *n, *ntmp;
>   
>   		/*
>   		 * traverse reversed and steal back the oldest node already
> @@ -1099,11 +1073,11 @@ guc_capture_get_prealloc_node(struct xe_guc *guc)
>   	return found;
>   }
>   
> -static struct __guc_capture_parsed_output *
> -guc_capture_clone_node(struct xe_guc *guc, struct __guc_capture_parsed_output *original,
> +static struct xe_guc_capture_snapshot *
> +guc_capture_clone_node(struct xe_guc *guc, struct xe_guc_capture_snapshot *original,
>   		       u32 keep_reglist_mask)
>   {
> -	struct __guc_capture_parsed_output *new;
> +	struct xe_guc_capture_snapshot *new;
>   	int i;
>   
>   	new = guc_capture_get_prealloc_node(guc);
> @@ -1145,7 +1119,7 @@ guc_capture_extract_reglists(struct xe_guc *guc, struct __guc_capture_bufstate *
>   	struct xe_gt *gt = guc_to_gt(guc);
>   	struct guc_state_capture_group_header_t ghdr = {0};
>   	struct guc_state_capture_header_t hdr = {0};
> -	struct __guc_capture_parsed_output *node = NULL;
> +	struct xe_guc_capture_snapshot *node = NULL;
>   	struct guc_mmio_reg *regs = NULL;
>   	int i, numlists, numregs, ret = 0;
>   	enum guc_state_capture_type datatype;
> @@ -1438,11 +1412,11 @@ void xe_guc_capture_process(struct xe_guc *guc)
>   		__guc_capture_process_output(guc);
>   }
>   
> -static struct __guc_capture_parsed_output *
> +static struct xe_guc_capture_snapshot *
>   guc_capture_alloc_one_node(struct xe_guc *guc)
>   {
>   	struct drm_device *drm = guc_to_drm(guc);
> -	struct __guc_capture_parsed_output *new;
> +	struct xe_guc_capture_snapshot *new;
>   	int i;
>   
>   	new = drmm_kzalloc(drm, sizeof(*new), GFP_KERNEL);
> @@ -1467,7 +1441,7 @@ guc_capture_alloc_one_node(struct xe_guc *guc)
>   static void
>   __guc_capture_create_prealloc_nodes(struct xe_guc *guc)
>   {
> -	struct __guc_capture_parsed_output *node = NULL;
> +	struct xe_guc_capture_snapshot *node = NULL;
>   	int i;
>   
>   	for (i = 0; i < PREALLOC_NODES_MAX_COUNT; ++i) {
All above is about renaming structure or comments, that's fine.

> @@ -1564,35 +1538,18 @@ read_reg_to_node(struct xe_hw_engine *hwe, const struct __guc_mmio_reg_descr_gro
>   	}
>   }
>   
> -/**
> - * xe_engine_manual_capture - Take a manual engine snapshot from engine.
> - * @hwe: Xe HW Engine.
> - * @snapshot: The engine snapshot
> - *
> - * Take engine snapshot from engine read.
> - *
> - * Returns: None
> - */
> -void
> -xe_engine_manual_capture(struct xe_hw_engine *hwe, struct xe_hw_engine_snapshot *snapshot)
> +static struct xe_guc_capture_snapshot *
> +guc_capture_get_manual_snapshot(struct xe_guc *guc, struct xe_hw_engine *hwe)
>   {
>   	struct xe_gt *gt = hwe->gt;
> -	struct xe_device *xe = gt_to_xe(gt);
> -	struct xe_guc *guc = &gt->uc.guc;
> -	struct xe_devcoredump *devcoredump = &xe->devcoredump;
>   	enum guc_capture_list_class_type capture_class;
>   	const struct __guc_mmio_reg_descr_group *list;
> -	struct __guc_capture_parsed_output *new;
> +	struct xe_guc_capture_snapshot *new;
>   	enum guc_state_capture_type type;
> -	u16 guc_id = 0;
> -	u32 lrca = 0;
> -
> -	if (IS_SRIOV_VF(xe))
> -		return;
>   
>   	new = guc_capture_get_prealloc_node(guc);
>   	if (!new)
> -		return;
> +		return NULL;
>   
>   	capture_class = xe_engine_class_to_guc_capture_class(hwe->class);
>   	for (type = GUC_STATE_CAPTURE_TYPE_GLOBAL; type < GUC_STATE_CAPTURE_TYPE_MAX; type++) {
> @@ -1626,26 +1583,83 @@ xe_engine_manual_capture(struct xe_hw_engine *hwe, struct xe_hw_engine_snapshot
>   		}
>   	}
>   
> -	if (devcoredump && devcoredump->captured) {
> -		struct xe_guc_submit_exec_queue_snapshot *ge = devcoredump->snapshot.ge;
> +	new->eng_class = xe_engine_class_to_guc_class(hwe->class);
> +	new->eng_inst = hwe->instance;
>   
> -		if (ge) {
> -			guc_id = ge->guc.id;
> -			if (ge->lrc[0])
> -				lrca = ge->lrc[0]->context_desc;
> -		}
> +	return new;
> +}
> +
> +/**
> + * xe_guc_capture_snapshot_store_and_get_manual_hwe - Generate and get manual engine register dump
> + * @guc: Target GuC for manual capture
> + * @hwe: The engine instance to capture from
> + *
> + * Generate a manual GuC-Error-Capture snapshot of engine instance + engine class registers
> + * without any queue association. This capture node is not stored in outlist or cachelist,
> + * Returns: New capture node and caller must "put"
> + */
> +struct xe_guc_capture_snapshot *
> +xe_guc_capture_snapshot_store_and_get_manual_hwe(struct xe_guc *guc, struct xe_hw_engine *hwe)
> +{
> +	struct xe_guc_capture_snapshot *new;
> +
> +	new = guc_capture_get_manual_snapshot(guc, hwe);
> +	if (!new)
> +		return NULL;
> +
> +	new->guc_id = 0;
> +	new->lrca = 0;
> +	new->is_partial = 0;
> +	new->source = XE_ENGINE_CAPTURE_SOURCE_MANUAL;
> +
> +	return new;
> +}
> +
> +/**
> + * xe_guc_capture_snapshot_store_manual_job - Generate and store a manual engine register dump
> + * @guc: Target GuC for manual capture
> + * @q: Associated xe_exec_queue to simulate a manual capture on its behalf.
> + *
> + * Generate a manual GuC-Error-Capture snapshot of engine instance + engine class registers
> + * for the engine of the given exec queue. Stores this node in internal outlist for future
> + * retrieval with the ability to match up against the same queue.
> + *
> + * Returns: None
> + */
> +void
> +xe_guc_capture_snapshot_store_manual_job(struct xe_guc *guc, struct xe_exec_queue *q)
> +{
> +	struct xe_guc_capture_snapshot *new;
> +	struct xe_gt *gt = guc_to_gt(guc);
> +	struct xe_hw_engine *hwe;
> +	enum xe_hw_engine_id id;
> +
> +	if (q) {
> +		xe_gt_warn(gt, "Manual GuC Error capture requested with invalid job\n");
> +		return;
>   	}
Need to do SRIOV check here or at timedout job
	if (IS_SRIOV_VF(xe))
		return;
for compareration, the existing implementation is
guc_exec_queue_timedout_job
	xe_engine_snapshot_capture_for_queue
which did the SRIOV check.

>   
> -	new->eng_class = xe_engine_class_to_guc_class(hwe->class);
> -	new->eng_inst = hwe->instance;
> -	new->guc_id = guc_id;
> -	new->lrca = lrca;
> +	/* Find hwe for the queue */
> +	for_each_hw_engine(hwe, gt, id) {
> +		if (hwe != q->hwe)
> +			continue;
> +		break;
> +	}
> +
> +	new = guc_capture_get_manual_snapshot(guc, hwe);
> +	if (!new)
> +		return;
> +
> +	new->guc_id = q->guc->id;
> +	new->lrca = xe_lrc_ggtt_addr(q->lrc[0]);
>   	new->is_partial = 0;
> -	new->locked = 1;
> +	/* lock manual captures until devcoredump-engine puts it */
> +	new->locked = true;
>   	new->source = XE_ENGINE_CAPTURE_SOURCE_MANUAL;
>   
>   	guc_capture_add_node_to_outlist(guc->capture, new);
> -	devcoredump->snapshot.matched_node = new;
> +
> +	return;
>   }
>   
>   static struct guc_mmio_reg *
> @@ -1666,24 +1680,16 @@ guc_capture_find_reg(struct gcap_reg_list_info *reginfo, u32 addr, u32 flags)
>   }
>   
>   static void
> -snapshot_print_by_list_order(struct xe_hw_engine_snapshot *snapshot, struct drm_printer *p,
> -			     u32 type, const struct __guc_mmio_reg_descr_group *list)
> +print_noderegs_by_list_order(struct xe_guc *guc, struct gcap_reg_list_info *reginfo,
> +			     const struct __guc_mmio_reg_descr_group *list, struct drm_printer *p)
>   {
> -	struct xe_gt *gt = snapshot->hwe->gt;
> -	struct xe_device *xe = gt_to_xe(gt);
> -	struct xe_guc *guc = &gt->uc.guc;
> -	struct xe_devcoredump *devcoredump = &xe->devcoredump;
> -	struct xe_devcoredump_snapshot *devcore_snapshot = &devcoredump->snapshot;
> -	struct gcap_reg_list_info *reginfo = NULL;
>   	u32 last_value, i;
>   	bool is_ext;
>   
>   	if (!list || list->num_regs == 0)
>   		return;
> -	XE_WARN_ON(!devcore_snapshot->matched_node);
>   
>   	is_ext = list == guc->capture->extlists;
> -	reginfo = &devcore_snapshot->matched_node->reginfo[type];
>   
>   	/*
>   	 * loop through descriptor first and find the register in the node
> @@ -1717,7 +1723,7 @@ snapshot_print_by_list_order(struct xe_hw_engine_snapshot *snapshot, struct drm_
>   
>   			group = FIELD_GET(GUC_REGSET_STEERING_GROUP, reg_desc->flags);
>   			instance = FIELD_GET(GUC_REGSET_STEERING_INSTANCE, reg_desc->flags);
> -			dss = xe_gt_mcr_steering_info_to_dss_id(gt, group, instance);
> +			dss = xe_gt_mcr_steering_info_to_dss_id(guc_to_gt(guc), group, instance);
>   
>   			drm_printf(p, "\t%s[%u]: 0x%08x\n", reg_desc->regname, dss, value);
>   		} else {
> @@ -1727,74 +1733,65 @@ snapshot_print_by_list_order(struct xe_hw_engine_snapshot *snapshot, struct drm_
>   }
>   
>   /**
> - * xe_engine_snapshot_print - Print out a given Xe HW Engine snapshot.
> - * @snapshot: Xe HW Engine snapshot object.
> + * xe_guc_capture_snapshot_print - Print out a the contents of a provided Guc-Err-Capture node
> + * @guc : Target GuC for operation.
> + * @node: GuC Error Capture register dump node.
>    * @p: drm_printer where it will be printed out.
>    *
> - * This function prints out a given Xe HW Engine snapshot object.
> + * This function prints out a register dump of a GuC-Err-Capture node that was retrieved
> + * earlier either by GuC-FW reporting or by manual capture depending on how the
> + * caller (typically xe_hw_engine_snapshot) was invoked and used.
>    */
> -void xe_engine_snapshot_print(struct xe_hw_engine_snapshot *snapshot, struct drm_printer *p)
> +
> +void xe_guc_capture_snapshot_print(struct xe_guc *guc, struct xe_guc_capture_snapshot *node,
> +				   struct drm_printer *p)
>   {
>   	const char *grptype[GUC_STATE_CAPTURE_GROUP_TYPE_MAX] = {
>   		"full-capture",
>   		"partial-capture"
>   	};
> -	int type;
>   	const struct __guc_mmio_reg_descr_group *list;
> -	enum guc_capture_list_class_type capture_class;
> -
>   	struct xe_gt *gt;
> -	struct xe_device *xe;
> -	struct xe_devcoredump *devcoredump;
> -	struct xe_devcoredump_snapshot *devcore_snapshot;
> +	int type;
>   
> -	if (!snapshot)
> +	if (!guc)
>   		return;
> -
> -	gt = snapshot->hwe->gt;
> -	xe = gt_to_xe(gt);
> -	devcoredump = &xe->devcoredump;
> -	devcore_snapshot = &devcoredump->snapshot;
> -
> -	if (!devcore_snapshot->matched_node)
> +	gt = guc_to_gt(guc);
> +	if (!node) {
> +		xe_gt_warn(gt, "GuC Capture printing without node!\n");
>   		return;
> +	}
> +	if (!p) {
> +		xe_gt_warn(gt, "GuC Capture printing without printer!\n");
> +		return;
> +	}
>   
> -	xe_gt_assert(gt, snapshot->hwe);
> -
> -	capture_class = xe_engine_class_to_guc_capture_class(snapshot->hwe->class);
> -
> -	drm_printf(p, "%s (physical), logical instance=%d\n",
> -		   snapshot->name ? snapshot->name : "",
> -		   snapshot->logical_instance);
>   	drm_printf(p, "\tCapture_source: %s\n",
> -		   devcore_snapshot->matched_node->source == XE_ENGINE_CAPTURE_SOURCE_GUC ?
> +		   node->source == XE_ENGINE_CAPTURE_SOURCE_GUC ?
>   		   "GuC" : "Manual");
> -	drm_printf(p, "\tCoverage: %s\n", grptype[devcore_snapshot->matched_node->is_partial]);
> -	drm_printf(p, "\tForcewake: domain 0x%x, ref %d\n",
> -		   snapshot->forcewake.domain, snapshot->forcewake.ref);
> -	drm_printf(p, "\tReserved: %s\n",
> -		   str_yes_no(snapshot->kernel_reserved));
I see this change seperate capture related print into this function.
I like this idea.

> +	drm_printf(p, "\tCoverage: %s\n", grptype[node->is_partial]);
>   
>   	for (type = GUC_STATE_CAPTURE_TYPE_GLOBAL; type < GUC_STATE_CAPTURE_TYPE_MAX; type++) {
>   		list = xe_guc_capture_get_reg_desc_list(gt, GUC_CAPTURE_LIST_INDEX_PF, type,
> -							capture_class, false);
> -		snapshot_print_by_list_order(snapshot, p, type, list);
> +							node->eng_class, false);
> +		print_noderegs_by_list_order(guc, &node->reginfo[type], list, p);
>   	}
>   
> -	if (capture_class == GUC_CAPTURE_LIST_CLASS_RENDER_COMPUTE) {
> +	if (node->eng_class == GUC_CAPTURE_LIST_CLASS_RENDER_COMPUTE) {
> +		type = GUC_STATE_CAPTURE_TYPE_ENGINE_CLASS;
>   		list = xe_guc_capture_get_reg_desc_list(gt, GUC_CAPTURE_LIST_INDEX_PF,
> -							GUC_STATE_CAPTURE_TYPE_ENGINE_CLASS,
> -							capture_class, true);
> -		snapshot_print_by_list_order(snapshot, p, GUC_STATE_CAPTURE_TYPE_ENGINE_CLASS,
> -					     list);
> +							type, node->eng_class, true);
> +		print_noderegs_by_list_order(guc, &node->reginfo[type], list, p);
>   	}
> -
>   	drm_puts(p, "\n");
>   }
>   
>   /**
> - * xe_guc_capture_get_matching_and_lock - Matching GuC capture for the queue.
> - * @q: The exec queue object
> + * xe_guc_capture_snapshot_get - Matching GuC capture for the queue.
> + *
> + * @guc: The GuC being searched for a matching guc-error-capture snapshot.
> + * @q: The exec queue object that provides engine, guc-id and lrca to match (can be NULL!)
> + * @src: The source of the GuC-error-Capture snapshot to retrieve;
>    *
>    * Search within the capture outlist for the queue, could be used for check if
>    * GuC capture is ready for the queue.
> @@ -1802,28 +1799,31 @@ void xe_engine_snapshot_print(struct xe_hw_engine_snapshot *snapshot, struct drm
>    *
>    * Returns: found guc-capture node ptr else NULL
>    */
> -struct __guc_capture_parsed_output *
> -xe_guc_capture_get_matching_and_lock(struct xe_exec_queue *q)
> +struct xe_guc_capture_snapshot *
> +xe_guc_capture_snapshot_get(struct xe_guc *guc, struct xe_exec_queue *q,
> +			    enum xe_guc_capture_snapshot_source src)
>   {
>   	struct xe_hw_engine *hwe;
>   	enum xe_hw_engine_id id;
> +	struct xe_gt *gt;
>   	struct xe_device *xe;
>   	u16 guc_class = GUC_LAST_ENGINE_CLASS + 1;
> -	struct xe_devcoredump_snapshot *ss;
>   
> -	if (!q || !q->gt)
> +	if (!guc)
>   		return NULL;
>   
> -	xe = gt_to_xe(q->gt);
> -	if (xe->wedged.mode >= 2 || !xe_device_uc_enabled(xe) || IS_SRIOV_VF(xe))
> +	gt = guc_to_gt(guc);
> +	if (q && q->gt != gt) {
> +		xe_gt_warn(gt, "Guc-Err-Capture being querried with incorrect queue's GT!");
>   		return NULL;
> +	}
>   
> -	ss = &xe->devcoredump.snapshot;
> -	if (ss->matched_node && ss->matched_node->source == XE_ENGINE_CAPTURE_SOURCE_GUC)
> -		return ss->matched_node;
> +	xe = gt_to_xe(gt);
> +	if (xe->wedged.mode >= 2 || !xe_device_uc_enabled(xe) || IS_SRIOV_VF(xe))
> +		return NULL;
>   
>   	/* Find hwe for the queue */
> -	for_each_hw_engine(hwe, q->gt, id) {
> +	for_each_hw_engine(hwe, gt, id) {
>   		if (hwe != q->hwe)
>   			continue;
>   		guc_class = xe_engine_class_to_guc_class(hwe->class);
> @@ -1831,8 +1831,7 @@ xe_guc_capture_get_matching_and_lock(struct xe_exec_queue *q)
>   	}
>   
>   	if (guc_class <= GUC_LAST_ENGINE_CLASS) {
> -		struct __guc_capture_parsed_output *n, *ntmp;
> -		struct xe_guc *guc =  &q->gt->uc.guc;
> +		struct xe_guc_capture_snapshot *n, *ntmp;
>   		u16 guc_id = q->guc->id;
>   		u32 lrca = xe_lrc_ggtt_addr(q->lrc[0]);
>   
> @@ -1844,8 +1843,8 @@ xe_guc_capture_get_matching_and_lock(struct xe_exec_queue *q)
>   		list_for_each_entry_safe(n, ntmp, &guc->capture->outlist, link) {
>   			if (n->eng_class == guc_class && n->eng_inst == hwe->instance &&
>   			    n->guc_id == guc_id && n->lrca == lrca &&
> -			    n->source == XE_ENGINE_CAPTURE_SOURCE_GUC) {
> -				n->locked = 1;
> +			    n->source == src) {
> +				n->locked = true;
>   				return n;
>   			}
>   		}
> @@ -1853,77 +1852,19 @@ xe_guc_capture_get_matching_and_lock(struct xe_exec_queue *q)
>   	return NULL;
>   }
>   
> -/**
> - * xe_engine_snapshot_capture_for_queue - Take snapshot of associated engine
> - * @q: The exec queue object
> - *
> - * Take snapshot of associated HW Engine
> - *
> - * Returns: None.
> - */
> -void
> -xe_engine_snapshot_capture_for_queue(struct xe_exec_queue *q)
> -{
> -	struct xe_device *xe = gt_to_xe(q->gt);
> -	struct xe_devcoredump *coredump = &xe->devcoredump;
> -	struct xe_hw_engine *hwe;
> -	enum xe_hw_engine_id id;
> -	u32 adj_logical_mask = q->logical_mask;
> -
> -	if (IS_SRIOV_VF(xe))
> -		return;
> -
> -	for_each_hw_engine(hwe, q->gt, id) {
> -		if (hwe->class != q->hwe->class ||
> -		    !(BIT(hwe->logical_instance) & adj_logical_mask)) {
> -			coredump->snapshot.hwe[id] = NULL;
> -			continue;
> -		}
> -
> -		if (!coredump->snapshot.hwe[id]) {
> -			coredump->snapshot.hwe[id] =
> -				xe_hw_engine_snapshot_capture(hwe, q);
> -		} else {
> -			struct __guc_capture_parsed_output *new;
> -
> -			new = xe_guc_capture_get_matching_and_lock(q);
> -			if (new) {
> -				struct xe_guc *guc =  &q->gt->uc.guc;
> -
> -				/*
> -				 * If we are in here, it means we found a fresh
> -				 * GuC-err-capture node for this engine after
> -				 * previously failing to find a match in the
> -				 * early part of guc_exec_queue_timedout_job.
> -				 * Thus we must free the manually captured node
> -				 */
> -				guc_capture_free_outlist_node(guc->capture,
> -							      coredump->snapshot.matched_node);
> -				coredump->snapshot.matched_node = new;
> -			}
> -		}
> -
> -		break;
> -	}
> -}
> -
>   /*
> - * xe_guc_capture_put_matched_nodes - Cleanup macthed nodes
> + * xe_guc_capture_snapshot_put - Release GuC Capture matched node from a prior snapshot_get
>    * @guc: The GuC object
> + * @node: The node to release back to GuC
>    *
>    * Free matched node and all nodes with the equal guc_id from
>    * GuC captured outlist
>    */
> -void xe_guc_capture_put_matched_nodes(struct xe_guc *guc)
> +void xe_guc_capture_snapshot_put(struct xe_guc *guc, struct xe_guc_capture_snapshot *n)
>   {
> -	struct xe_device *xe = guc_to_xe(guc);
> -	struct xe_devcoredump *devcoredump = &xe->devcoredump;
> -	struct __guc_capture_parsed_output *n = devcoredump->snapshot.matched_node;
> -
>   	if (n) {
>   		guc_capture_remove_stale_matches_from_list(guc->capture, n);
>   		guc_capture_free_outlist_node(guc->capture, n);
> -		devcoredump->snapshot.matched_node = NULL;
>   	}
>   }
>   
> diff --git a/drivers/gpu/drm/xe/xe_guc_capture.h b/drivers/gpu/drm/xe/xe_guc_capture.h
> index 20a078dc4b85..e85af277be9c 100644
> --- a/drivers/gpu/drm/xe/xe_guc_capture.h
> +++ b/drivers/gpu/drm/xe/xe_guc_capture.h
> @@ -11,10 +11,7 @@
>   #include "xe_guc.h"
>   #include "xe_guc_fwif.h"
>   
> -struct xe_exec_queue;
>   struct xe_guc;
> -struct xe_hw_engine;
> -struct xe_hw_engine_snapshot;
>   
>   static inline enum guc_capture_list_class_type xe_guc_class_to_capture_class(u16 class)
>   {
> @@ -44,18 +41,13 @@ void xe_guc_capture_process(struct xe_guc *guc);
>   int xe_guc_capture_getlist(struct xe_guc *guc, u32 owner, u32 type,
>   			   enum guc_capture_list_class_type capture_class, void **outptr);
>   int xe_guc_capture_getlistsize(struct xe_guc *guc, u32 owner, u32 type,
> -			       enum guc_capture_list_class_type capture_class, size_t *size);
> +				   enum guc_capture_list_class_type capture_class, size_t *size);
>   int xe_guc_capture_getnullheader(struct xe_guc *guc, void **outptr, size_t *size);
>   size_t xe_guc_capture_ads_input_worst_size(struct xe_guc *guc);
>   const struct __guc_mmio_reg_descr_group *
>   xe_guc_capture_get_reg_desc_list(struct xe_gt *gt, u32 owner, u32 type,
>   				 enum guc_capture_list_class_type capture_class, bool is_ext);
> -struct __guc_capture_parsed_output *xe_guc_capture_get_matching_and_lock(struct xe_exec_queue *q);
> -void xe_engine_manual_capture(struct xe_hw_engine *hwe, struct xe_hw_engine_snapshot *snapshot);
> -void xe_engine_snapshot_print(struct xe_hw_engine_snapshot *snapshot, struct drm_printer *p);
> -void xe_engine_snapshot_capture_for_queue(struct xe_exec_queue *q);
>   void xe_guc_capture_steered_list_init(struct xe_guc *guc);
> -void xe_guc_capture_put_matched_nodes(struct xe_guc *guc);
>   int xe_guc_capture_init(struct xe_guc *guc);
>   
>   #endif
> diff --git a/drivers/gpu/drm/xe/xe_guc_capture_snapshot_types.h b/drivers/gpu/drm/xe/xe_guc_capture_snapshot_types.h
> new file mode 100644
> index 000000000000..76159cb8fcab
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_guc_capture_snapshot_types.h
> @@ -0,0 +1,68 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2021-2024 Intel Corporation
> + */
> +
> +#ifndef _XE_GUC_CAPTURE_SNAPSHOT_TYPES_H
> +#define _XE_GUC_CAPTURE_SNAPSHOT_TYPES_H
> +
> +#include <linux/types.h>
> +#include <abi/guc_capture_abi.h>
> +#include "xe_guc_fwif.h"
> +
> +struct drm_printer;
> +struct guc_mmio_reg;
> +struct xe_guc;
> +struct xe_exec_queue;
> +struct xe_hw_engine;
> +
> +enum xe_guc_capture_snapshot_source {
> +	XE_ENGINE_CAPTURE_SOURCE_MANUAL,
> +	XE_ENGINE_CAPTURE_SOURCE_GUC
> +};
> +
> +/*
> + * struct xe_guc_capture_snapshot - extracted error capture node
> + *
> + * A single unit of extracted error-capture output data grouped together
> + * at an engine-instance level. We keep these nodes in a linked list.
> + * See cachelist and outlist below.
> + */
> +struct xe_guc_capture_snapshot {
> +	/*
> +	 * A single set of 3 capture lists: a global-list
> +	 * an engine-class-list and an engine-instance list.
> +	 * outlist in __guc_capture_parsed_output will keep
> +	 * a linked list of these nodes that will eventually
> +	 * be detached from outlist and attached into to
> +	 * xe_codedump in response to a context reset
> +	 */
> +	struct list_head link;
> +	bool is_partial;
> +	u32 eng_class;
> +	u32 eng_inst;
> +	u32 guc_id;
> +	u32 lrca;
> +	u32 type;
> +	bool locked;
> +	enum xe_guc_capture_snapshot_source source;
> +	struct gcap_reg_list_info {
> +		u32 vfid;
> +		u32 num_regs;
> +		struct guc_mmio_reg *regs;
> +	} reginfo[GUC_STATE_CAPTURE_TYPE_MAX];
> +#define GCAP_PARSED_REGLIST_INDEX_GLOBAL   BIT(GUC_STATE_CAPTURE_TYPE_GLOBAL)
> +#define GCAP_PARSED_REGLIST_INDEX_ENGCLASS BIT(GUC_STATE_CAPTURE_TYPE_ENGINE_CLASS)
> +};
> +
> +struct xe_guc_capture_snapshot *
> +xe_guc_capture_snapshot_get(struct xe_guc *guc, struct xe_exec_queue *q,
> +			    enum xe_guc_capture_snapshot_source src);
> +void xe_guc_capture_snapshot_print(struct xe_guc *guc, struct xe_guc_capture_snapshot *node,
> +				   struct drm_printer *p);
> +void xe_guc_capture_snapshot_put(struct xe_guc *guc, struct xe_guc_capture_snapshot *snapshot);
> +void xe_guc_capture_snapshot_store_manual_job(struct xe_guc *guc, struct xe_exec_queue *q);
> +struct xe_guc_capture_snapshot *
> +xe_guc_capture_snapshot_store_and_get_manual_hwe(struct xe_guc *guc, struct xe_hw_engine *hwe);
> +
> +#endif
> diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c
> index f9ecee5364d8..30c2bdf51958 100644
> --- a/drivers/gpu/drm/xe/xe_guc_submit.c
> +++ b/drivers/gpu/drm/xe/xe_guc_submit.c
> @@ -28,6 +28,7 @@
>   #include "xe_gt_printk.h"
>   #include "xe_guc.h"
>   #include "xe_guc_capture.h"
> +#include "xe_guc_capture_snapshot_types.h"
>   #include "xe_guc_ct.h"
>   #include "xe_guc_exec_queue_types.h"
>   #include "xe_guc_id_mgr.h"
> @@ -1033,7 +1034,6 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
>   	struct xe_gpu_scheduler *sched = &q->guc->sched;
>   	struct xe_guc *guc = exec_queue_to_guc(q);
>   	const char *process_name = "no process";
> -	struct xe_device *xe = guc_to_xe(guc);
>   	unsigned int fw_ref;
>   	int err = -ETIME;
>   	pid_t pid = -1;
> @@ -1062,18 +1062,23 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
>   		exec_queue_destroyed(q);
>   
>   	/*
> -	 * If devcoredump not captured and GuC capture for the job is not ready
> -	 * do manual capture first and decide later if we need to use it
> +	 * If the queue has't been killed yet or we do not have a firmware-reported
> +	 * GuC-Error-Capture node for the matching job, request GuC-Error-Capture to
> +	 * store a manual capture within its internal list with a job-match.
> +	 * xe_hw_engine_snapshot will decide later if it's needed.
>   	 */
> -	if (!exec_queue_killed(q) && !xe->devcoredump.captured &&
> -	    !xe_guc_capture_get_matching_and_lock(q)) {
> +	if (!exec_queue_killed(q) ||
|| or && ?
If we already got GuC capture, no need for manual capture

> +	    !xe_guc_capture_snapshot_get(guc, q, XE_ENGINE_CAPTURE_SOURCE_GUC)) {
I see !xe->devcoredump.captured check is missing, any concerns?
Right now, if devcoredump already captured, we don't need the manual 
capture.

>   		/* take force wake before engine register manual capture */
>   		fw_ref = xe_force_wake_get(gt_to_fw(q->gt), XE_FORCEWAKE_ALL);
>   		if (!xe_force_wake_ref_has_domain(fw_ref, XE_FORCEWAKE_ALL))
>   			xe_gt_info(q->gt, "failed to get forcewake for coredump capture\n");
> -
> -		xe_engine_snapshot_capture_for_queue(q);
> -
> +		/*
> +		 * This will generate a manual capture node and store it in
> +		 * This GuC Error Capture link-list as if it came from GuC
> +		 * but with a source-id == manual-capture
> +		 */
> +		xe_guc_capture_snapshot_store_manual_job(guc, q);
>   		xe_force_wake_put(gt_to_fw(q->gt), fw_ref);
>   	}
>   
> diff --git a/drivers/gpu/drm/xe/xe_hw_engine.c b/drivers/gpu/drm/xe/xe_hw_engine.c
> index c4b0dc3be39c..ddd91627e623 100644
> --- a/drivers/gpu/drm/xe/xe_hw_engine.c
> +++ b/drivers/gpu/drm/xe/xe_hw_engine.c
> @@ -24,7 +24,8 @@
>   #include "xe_gt_printk.h"
>   #include "xe_gt_mcr.h"
>   #include "xe_gt_topology.h"
> -#include "xe_guc_capture.h"
> +//#include "xe_guc_capture.h"
> +#include "xe_guc_capture_snapshot_types.h"
>   #include "xe_hw_engine_group.h"
>   #include "xe_hw_fence.h"
>   #include "xe_irq.h"
> @@ -827,9 +828,9 @@ void xe_hw_engine_handle_irq(struct xe_hw_engine *hwe, u16 intr_vec)
>   }
>   
>   /**
> - * xe_hw_engine_snapshot_capture - Take a quick snapshot of the HW Engine.
> + * hw_engine_snapshot_capture - Take a quick snapshot of the HW Engine.
>    * @hwe: Xe HW Engine.
> - * @q: The exec queue object.
> + * @q: The exec queue object. (can be NULL for debugfs engine-register dump)
>    *
>    * This can be printed out in a later stage like during dev_coredump
>    * analysis.
> @@ -837,11 +838,12 @@ void xe_hw_engine_handle_irq(struct xe_hw_engine *hwe, u16 intr_vec)
>    * Returns: a Xe HW Engine snapshot object that must be freed by the
>    * caller, using `xe_hw_engine_snapshot_free`.
>    */
> -struct xe_hw_engine_snapshot *
> -xe_hw_engine_snapshot_capture(struct xe_hw_engine *hwe, struct xe_exec_queue *q)
> +static struct xe_hw_engine_snapshot *
> +hw_engine_snapshot_capture(struct xe_hw_engine *hwe, struct xe_exec_queue *q)
>   {
>   	struct xe_hw_engine_snapshot *snapshot;
> -	struct __guc_capture_parsed_output *node;
> +	struct xe_guc_capture_snapshot *manual_node;
> +	struct xe_guc *guc;
>   
>   	if (!xe_hw_engine_is_valid(hwe))
>   		return NULL;
> @@ -865,25 +867,66 @@ xe_hw_engine_snapshot_capture(struct xe_hw_engine *hwe, struct xe_exec_queue *q)
>   		return snapshot;
>   
>   	if (q) {
> -		/* If got guc capture, set source to GuC */
> -		node = xe_guc_capture_get_matching_and_lock(q);
> -		if (node) {
> -			struct xe_device *xe = gt_to_xe(hwe->gt);
> -			struct xe_devcoredump *coredump = &xe->devcoredump;
> -
> -			coredump->snapshot.matched_node = node;
> -			xe_gt_dbg(hwe->gt, "Found and locked GuC-err-capture node");
> -			return snapshot;
> +		guc = &q->gt->uc.guc;
> +		/* First find the pre-kill manual GuC-Err-Capture node for this job */
> +		manual_node = xe_guc_capture_snapshot_get(guc, q,
> +							  XE_ENGINE_CAPTURE_SOURCE_MANUAL);
> +
> +		/* Next, look for the GuC-Firmware reported node for this job */
> +		snapshot->matched_node = xe_guc_capture_snapshot_get(guc, q,
> +								     XE_ENGINE_CAPTURE_SOURCE_GUC);
> +		if (!snapshot->matched_node) {
> +			xe_gt_dbg(hwe->gt, "Can't find GUC-Sourced err-capture node");
> +			snapshot->matched_node = manual_node;
> +		} else if (manual_node) {
> +			/* looks like we don't need the manually-captured node, return it */
> +			xe_guc_capture_snapshot_put(guc, manual_node);
>   		}
>   	}
>   
> -	/* otherwise, do manual capture */
> -	xe_engine_manual_capture(hwe, snapshot);
> -	xe_gt_dbg(hwe->gt, "Proceeding with manual engine snapshot");
> +	if (!snapshot->matched_node) {
> +		guc = &hwe->gt->uc.guc;
> +		/*
> +		 * Fallback path - do an immediate jobless manual engine capture.
> +		 * This will happen when debugfs is triggered to force an engine dump.
> +		 */
> +		snapshot->matched_node = xe_guc_capture_snapshot_store_and_get_manual_hwe(guc, hwe);
> +		xe_gt_dbg(hwe->gt, "Fallback to jobless-manual-err-capture node");
> +	}
>   
>   	return snapshot;
>   }
>   
> +/**
> + * xe_engine_snapshot_capture_for_queue - Take snapshot of associated engine
> + * @q: The exec queue object
> + *
> + * Take snapshot of associated HW Engine
> + *
> + * Returns: None.
> + */
> +void
> +xe_engine_snapshot_capture_for_queue(struct xe_exec_queue *q)
> +{
> +	struct xe_device *xe = gt_to_xe(q->gt);
> +	struct xe_devcoredump *coredump = &xe->devcoredump;
> +	struct xe_hw_engine *hwe;
> +	enum xe_hw_engine_id id;
> +	u32 adj_logical_mask = q->logical_mask;
> +
> +	if (IS_SRIOV_VF(xe))
> +		return;
> +
> +	for_each_hw_engine(hwe, q->gt, id) {
> +		if (hwe->class != q->hwe->class ||
> +		    !(BIT(hwe->logical_instance) & adj_logical_mask)) {
> +			coredump->snapshot.hwe[id] = NULL;
> +			continue;
> +		}
> +		coredump->snapshot.hwe[id] = hw_engine_snapshot_capture(hwe, q);
> +	}
> +}
> +
>   /**
>    * xe_hw_engine_snapshot_free - Free all allocated objects for a given snapshot.
>    * @snapshot: Xe HW Engine snapshot object.
> @@ -898,17 +941,41 @@ void xe_hw_engine_snapshot_free(struct xe_hw_engine_snapshot *snapshot)
>   		return;
>   
>   	gt = snapshot->hwe->gt;
> -	/*
> -	 * xe_guc_capture_put_matched_nodes is called here and from
> -	 * xe_devcoredump_snapshot_free, to cover the 2 calling paths
> -	 * of hw_engines - debugfs and devcoredump free.
> -	 */
> -	xe_guc_capture_put_matched_nodes(&gt->uc.guc);
> +	xe_guc_capture_snapshot_put(&gt->uc.guc, snapshot->matched_node);
> +	snapshot->matched_node = NULL;
>   
>   	kfree(snapshot->name);
>   	kfree(snapshot);
>   }
>   
> +/**
> + * xe_engine_snapshot_print - Print out a given Xe HW Engine snapshot.
> + * @snapshot: Xe HW Engine snapshot object.
> + * @p: drm_printer where it will be printed out.
> + *
> + * This function prints out a given Xe HW Engine snapshot object.
> + */
> +void xe_engine_snapshot_print(struct xe_hw_engine_snapshot *snapshot, struct drm_printer *p)
> +{
> +	struct xe_gt *gt;
> +
> +	if (!snapshot)
> +		return;
> +
> +	gt = snapshot->hwe->gt;
> +
> +	drm_printf(p, "%s (physical), logical instance=%d\n",
> +		   snapshot->name ? snapshot->name : "",
> +		   snapshot->logical_instance);
> +	drm_printf(p, "\tForcewake: domain 0x%x, ref %d\n",
> +		   snapshot->forcewake.domain, snapshot->forcewake.ref);
> +	drm_printf(p, "\tReserved: %s\n",
> +		   str_yes_no(snapshot->kernel_reserved));
> +	drm_puts(p, "\n");
> +
> +	xe_guc_capture_snapshot_print(&gt->uc.guc, snapshot->matched_node, p);
> +}
> +
>   /**
>    * xe_hw_engine_print - Xe HW Engine Print.
>    * @hwe: Hardware Engine.
> @@ -920,7 +987,7 @@ void xe_hw_engine_print(struct xe_hw_engine *hwe, struct drm_printer *p)
>   {
>   	struct xe_hw_engine_snapshot *snapshot;
>   
> -	snapshot = xe_hw_engine_snapshot_capture(hwe, NULL);
> +	snapshot = hw_engine_snapshot_capture(hwe, NULL);
>   	xe_engine_snapshot_print(snapshot, p);
>   	xe_hw_engine_snapshot_free(snapshot);
>   }
> diff --git a/drivers/gpu/drm/xe/xe_hw_engine.h b/drivers/gpu/drm/xe/xe_hw_engine.h
> index 6b5f9fa2a594..845153fbc149 100644
> --- a/drivers/gpu/drm/xe/xe_hw_engine.h
> +++ b/drivers/gpu/drm/xe/xe_hw_engine.h
> @@ -55,9 +55,9 @@ void xe_hw_engine_handle_irq(struct xe_hw_engine *hwe, u16 intr_vec);
>   void xe_hw_engine_enable_ring(struct xe_hw_engine *hwe);
>   u32 xe_hw_engine_mask_per_class(struct xe_gt *gt,
>   				enum xe_engine_class engine_class);
> -struct xe_hw_engine_snapshot *
> -xe_hw_engine_snapshot_capture(struct xe_hw_engine *hwe, struct xe_exec_queue *q);
> +void xe_engine_snapshot_capture_for_queue(struct xe_exec_queue *q);
>   void xe_hw_engine_snapshot_free(struct xe_hw_engine_snapshot *snapshot);
> +void xe_engine_snapshot_print(struct xe_hw_engine_snapshot *snapshot, struct drm_printer *p);
>   void xe_hw_engine_print(struct xe_hw_engine *hwe, struct drm_printer *p);
>   void xe_hw_engine_setup_default_lrc_state(struct xe_hw_engine *hwe);
>   
> diff --git a/drivers/gpu/drm/xe/xe_hw_engine_types.h b/drivers/gpu/drm/xe/xe_hw_engine_types.h
> index e14bee95e364..ea6b60c819d4 100644
> --- a/drivers/gpu/drm/xe/xe_hw_engine_types.h
> +++ b/drivers/gpu/drm/xe/xe_hw_engine_types.h
> @@ -152,11 +152,7 @@ struct xe_hw_engine {
>   	struct xe_hw_engine_group *hw_engine_group;
>   };
>   
> -enum xe_hw_engine_snapshot_source_id {
> -	XE_ENGINE_CAPTURE_SOURCE_MANUAL,
> -	XE_ENGINE_CAPTURE_SOURCE_GUC
> -};
> -
> +struct xe_guc_capture_snapshot;
>   /**
>    * struct xe_hw_engine_snapshot - Hardware engine snapshot
>    *
> @@ -180,6 +176,13 @@ struct xe_hw_engine_snapshot {
>   	u32 mmio_base;
>   	/** @kernel_reserved: Engine reserved, can't be used by userspace */
>   	bool kernel_reserved;
> +	/**
> +	 * @matched_node: GuC Capture snapshot:
> +	 * The matched capture node for the timedout job
> +	 * this single-node tracker works because devcoredump will always only
> +	 * produce one hw-engine capture per devcoredump event
> +	 */
> +	struct xe_guc_capture_snapshot *matched_node;
>   };
>   
>   #endif


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/1] drm/xe/guc/capture: Maintenence of devcoredump <-> GuC-Err-Capture plumbing
  2024-11-26 17:09   ` Dong, Zhanjun
@ 2024-12-03  3:12     ` Teres Alexis, Alan Previn
  0 siblings, 0 replies; 12+ messages in thread
From: Teres Alexis, Alan Previn @ 2024-12-03  3:12 UTC (permalink / raw)
  To: Dong, Zhanjun, intel-xe@lists.freedesktop.org
  Cc: dri-devel@lists.freedesktop.org, Harrison, John C, Brost, Matthew,
	Ceraolo Spurio, Daniele

On Tue, 2024-11-26 at 12:09 -0500, Dong, Zhanjun wrote:
> See my comments inline below:
> 
> Regards,
> Zhanjun
> 
> On 2024-11-17 1:44 p.m., Alan Previn wrote:
> > The order of the devcoredump event flow is:
> > drm-scheduler -> guc-submission-execq-timed-out-job ->
> > guc-submission-kill-job -> xe-devcoredump (once the work
> > is confirmed to have been killed).
> > 
> > As we are aware, the GuC-FW IRQ for error-capture delivery
> > and extraction could have happenned before the start of
> happened?
alan: will fix.
> > guc-execq-timed-out-job or the middle of it (before or
> > during the explicit kill) or not at all. Thus, today, the
> > above flow takes a manual capture first before triggering
> > the kill-job just in case we need it.
> > 
> > The structure layering of devcoredump internals are:
> > xe_devcoredump_snapshot -> xe_foo_snapshot (where foo
> > can be any data dump associated to the job was killed).
> > Foo includes the xe_hw_engine_snapshot. Since GuC-Error-Capture
> > provides just the register dump of an engine, GuC-Err-Capture
> > snapshots should be managed by the xe_hw_engine_snapshot.
> > That isn't the case today.
> > 
> > Furthermode, neither xe_devcoredump_snapshot nor
> Furthermore?
alan: will fix
> > xe_hw_engine_snapshot even exists at the start of
> > guc-submission-execq-timed-out-job. Thus, the first
> > manual capture node has no home. However, today,
> > GuC-Error-Capture stores capture snapshots off the
> > top-level xe_devcoredump_snapshot's matched_node.
> > GuC-Error-Capture also had absorbed the function for
> > xe_hw_engine_snapshot generation.
> >       NOTE: Existing code isn't broken because xe_devcoredump
> >       is not dynamically allocated and designed to hold a
> >       single event at a time (i.e. single engine dump).
> >       But it's not scalable for future improvement.
> > 
> > Thus this patch:
> > 1. Moves "matched_node" from xe_devcoredump_snapshot to
> >     xe_hw_engine_snapshot.
> > 2. Relocates the functions for xe_hw_engine_snapshot generation
> >     and printing back to xe_hw_engine.c. However, split out the
> >     register dump printing so it stays within GuC-Error-Capture
> >     (so we don't need to maintain two sets of register lists).
> > 3. Keep both the manual and firmware capture nodes within
> >     GuC-Error-Capture subsystem's linked list until
> >     xe_hw_engine_snapshot gets and puts them later.
> > 4. Give xe_hw_engine_snapshot the control and ability to
> >     query GuC-Error-Capture for matching snapshots while choosing
> >     between manual vs firmware capture getting/putting node.
> > 5. While at it, relocate (and rename) key structures, enums
> >     and function protos to xe_guc_capture_snapshot_types.h
> >     (as an inter-module header) for xe_hw_engine_snapshot to use.
> > 6. Since xe_hw_engine_snapshot can also be called by via debugfs
> >     without a job, create a new function that does a manual capture
> >     of engine registers without any associated job.
> > 
> > Signed-off-by: Alan Previn <alan.previn.teres.alexis@intel.com>
> > ---
> >   drivers/gpu/drm/xe/xe_devcoredump.c           |   3 -
> >   drivers/gpu/drm/xe/xe_devcoredump_types.h     |   6 -
> >   drivers/gpu/drm/xe/xe_guc_capture.c           | 397 ++++++++----------
> >   drivers/gpu/drm/xe/xe_guc_capture.h           |  10 +-
> >   .../drm/xe/xe_guc_capture_snapshot_types.h    |  68 +++
> >   drivers/gpu/drm/xe/xe_guc_submit.c            |  21 +-
> >   drivers/gpu/drm/xe/xe_hw_engine.c             | 117 ++++--
> >   drivers/gpu/drm/xe/xe_hw_engine.h             |   4 +-
> >   drivers/gpu/drm/xe/xe_hw_engine_types.h       |  13 +-
> >   9 files changed, 353 insertions(+), 286 deletions(-)
> >   create mode 100644 drivers/gpu/drm/xe/xe_guc_capture_snapshot_types.h
> > 
> > diff --git a/drivers/gpu/drm/xe/xe_devcoredump.c b/drivers/gpu/drm/xe/xe_devcoredump.c
> > index 0e5edf14a241..b98d71e670ca 100644
> > --- a/drivers/gpu/drm/xe/xe_devcoredump.c
> > +++ b/drivers/gpu/drm/xe/xe_devcoredump.c
> > @@ -144,9 +144,6 @@ static void xe_devcoredump_snapshot_free(struct xe_devcoredump_snapshot *ss)
> >         xe_guc_ct_snapshot_free(ss->guc.ct);
> >         ss->guc.ct = NULL;
> >   
> > -       xe_guc_capture_put_matched_nodes(&ss->gt->uc.guc);
> > -       ss->matched_node = NULL;
> > -
> >         xe_guc_exec_queue_snapshot_free(ss->ge);
> >         ss->ge = NULL;
> >   
> > diff --git a/drivers/gpu/drm/xe/xe_devcoredump_types.h b/drivers/gpu/drm/xe/xe_devcoredump_types.h
> > index be4d59ea9ac8..06ac75ce63dd 100644
> > --- a/drivers/gpu/drm/xe/xe_devcoredump_types.h
> > +++ b/drivers/gpu/drm/xe/xe_devcoredump_types.h
> > @@ -49,12 +49,6 @@ struct xe_devcoredump_snapshot {
> >         struct xe_hw_engine_snapshot *hwe[XE_NUM_HW_ENGINES];
> >         /** @job: Snapshot of job state */
> >         struct xe_sched_job_snapshot *job;
> > -       /**
> > -        * @matched_node: The matched capture node for timedout job
> > -        * this single-node tracker works because devcoredump will always only
> > -        * produce one hw-engine capture per devcoredump event
> > -        */
> > -       struct __guc_capture_parsed_output *matched_node;
> >         /** @vm: Snapshot of VM state */
> >         struct xe_vm_snapshot *vm;
> >   
> > diff --git a/drivers/gpu/drm/xe/xe_guc_capture.c b/drivers/gpu/drm/xe/xe_guc_capture.c
> > index f87755af545f..691fc72a5c9e 100644
> > --- a/drivers/gpu/drm/xe/xe_guc_capture.c
> > +++ b/drivers/gpu/drm/xe/xe_guc_capture.c
> > @@ -26,6 +26,7 @@
> >   #include "xe_guc_ads.h"
> >   #include "xe_guc_capture.h"
> >   #include "xe_guc_capture_types.h"
> > +#include "xe_guc_capture_snapshot_types.h"
> >   #include "xe_guc_ct.h"
> >   #include "xe_guc_exec_queue_types.h"
> >   #include "xe_guc_log.h"
> > @@ -53,40 +54,6 @@ struct __guc_capture_bufstate {
> >         u32 wr;
> >   };
> >   
> > -/*
> > - * struct __guc_capture_parsed_output - extracted error capture node
> > - *
> > - * A single unit of extracted error-capture output data grouped together
> > - * at an engine-instance level. We keep these nodes in a linked list.
> > - * See cachelist and outlist below.
> > - */
> > -struct __guc_capture_parsed_output {
> > -       /*
> > -        * A single set of 3 capture lists: a global-list
> > -        * an engine-class-list and an engine-instance list.
> > -        * outlist in __guc_capture_parsed_output will keep
> > -        * a linked list of these nodes that will eventually
> > -        * be detached from outlist and attached into to
> > -        * xe_codedump in response to a context reset
> > -        */
> > -       struct list_head link;
> > -       bool is_partial;
> > -       u32 eng_class;
> > -       u32 eng_inst;
> > -       u32 guc_id;
> > -       u32 lrca;
> > -       u32 type;
> > -       bool locked;
> > -       enum xe_hw_engine_snapshot_source_id source;
> > -       struct gcap_reg_list_info {
> > -               u32 vfid;
> > -               u32 num_regs;
> > -               struct guc_mmio_reg *regs;
> > -       } reginfo[GUC_STATE_CAPTURE_TYPE_MAX];
> > -#define GCAP_PARSED_REGLIST_INDEX_GLOBAL   BIT(GUC_STATE_CAPTURE_TYPE_GLOBAL)
> > -#define GCAP_PARSED_REGLIST_INDEX_ENGCLASS BIT(GUC_STATE_CAPTURE_TYPE_ENGINE_CLASS)
> > -};
> > -
> >   /*
> >    * Define all device tables of GuC error capture register lists
> >    * NOTE:
> > @@ -286,7 +253,7 @@ struct xe_guc_state_capture {
> >   
> >   static void
> >   guc_capture_remove_stale_matches_from_list(struct xe_guc_state_capture *gc,
> > -                                          struct __guc_capture_parsed_output *node);
> > +                                          struct xe_guc_capture_snapshot *node);
> >   
> >   static const struct __guc_mmio_reg_descr_group *
> >   guc_capture_get_device_reglist(struct xe_device *xe)
> > @@ -840,7 +807,7 @@ static void check_guc_capture_size(struct xe_guc *guc)
> >   }
> >   
> >   static void
> > -guc_capture_add_node_to_list(struct __guc_capture_parsed_output *node,
> > +guc_capture_add_node_to_list(struct xe_guc_capture_snapshot *node,
> >                              struct list_head *list)
> >   {
> >         list_add(&node->link, list);
> > @@ -848,7 +815,7 @@ guc_capture_add_node_to_list(struct __guc_capture_parsed_output *node,
> >   
> >   static void
> >   guc_capture_add_node_to_outlist(struct xe_guc_state_capture *gc,
> > -                               struct __guc_capture_parsed_output *node)
> > +                               struct xe_guc_capture_snapshot *node)
> >   {
> >         guc_capture_remove_stale_matches_from_list(gc, node);
> >         guc_capture_add_node_to_list(node, &gc->outlist);
> > @@ -856,17 +823,17 @@ guc_capture_add_node_to_outlist(struct xe_guc_state_capture *gc,
> >   
> >   static void
> >   guc_capture_add_node_to_cachelist(struct xe_guc_state_capture *gc,
> > -                                 struct __guc_capture_parsed_output *node)
> > +                                 struct xe_guc_capture_snapshot *node)
> >   {
> >         guc_capture_add_node_to_list(node, &gc->cachelist);
> >   }
> >   
> >   static void
> >   guc_capture_free_outlist_node(struct xe_guc_state_capture *gc,
> > -                             struct __guc_capture_parsed_output *n)
> > +                             struct xe_guc_capture_snapshot *n)
> >   {
> >         if (n) {
> > -               n->locked = 0;
> > +               n->locked = false;
> >                 list_del(&n->link);
> >                 /* put node back to cache list */
> >                 guc_capture_add_node_to_cachelist(gc, n);
> > @@ -875,9 +842,9 @@ guc_capture_free_outlist_node(struct xe_guc_state_capture *gc,
> >   
> >   static void
> >   guc_capture_remove_stale_matches_from_list(struct xe_guc_state_capture *gc,
> > -                                          struct __guc_capture_parsed_output *node)
> > +                                          struct xe_guc_capture_snapshot *node)
> >   {
> > -       struct __guc_capture_parsed_output *n, *ntmp;
> > +       struct xe_guc_capture_snapshot *n, *ntmp;
> >         int guc_id = node->guc_id;
> >   
> >         list_for_each_entry_safe(n, ntmp, &gc->outlist, link) {
> > @@ -887,7 +854,7 @@ guc_capture_remove_stale_matches_from_list(struct xe_guc_state_capture *gc,
> >   }
> >   
> >   static void
> > -guc_capture_init_node(struct xe_guc *guc, struct __guc_capture_parsed_output *node)
> > +guc_capture_init_node(struct xe_guc *guc, struct xe_guc_capture_snapshot *node)
> >   {
> >         struct guc_mmio_reg *tmp[GUC_STATE_CAPTURE_TYPE_MAX];
> >         int i;
> > @@ -934,24 +901,31 @@ guc_capture_init_node(struct xe_guc *guc, struct __guc_capture_parsed_output *no
> >    *                   This node is created from a pre-allocated list of blank nodes in
> >    *                   guc->capture->cachelist and populated with the error-capture
> >    *                   data from GuC and then it's added into guc->capture->outlist linked
> > - *                   list. This list is used for matchup and printout by xe_devcoredump_read
> > - *                   and xe_engine_snapshot_print, (when user invokes the devcoredump sysfs).
> > + *                   list. This node (dumped-register-lists) will be requested later by
> > + *                   xe_hwe_engine_snapshot creation.
> >    *
> > - * GUC --> notify context reset:
> > - * -----------------------------
> > + * DRM Scheduler job-timeout OR GuC-notify guc-id reset:
> > + * -----------------------------------------------------
> >    *     --> guc_exec_queue_timedout_job
> > - *                   L--> xe_devcoredump
> > - *                          L--> devcoredump_snapshot
> > - *                               --> xe_hw_engine_snapshot_capture
> > - *                               --> xe_engine_manual_capture(For manual capture)
> > + *             L--> alloc D: xe_guc_capture_snapshot_store_manual_job
> > + *                           (only if "alloc C" above didn't happen)
> > + *             L--> devcoredump_snapshot
> > + *                      --> xe_engine_snapshot_capture_for_queue(q) ..
> > + *                               --> xe_guc_capture_snapshot_get(q)
> > + *                                   use "alloc C" or else "alloc D"
> > + *                               --> store in xe_hw_engine_snapshot->matched_node
> >    *
> > - * User Sysfs / Debugfs
> > - * --------------------
> > - *      --> xe_devcoredump_read->
> > + * User Devcoredump Sysfs
> > + * ----------------------
> > + *      --> xe_devcoredump_read-> (user cats devcoredump)
> >    *             L--> xxx_snapshot_print
> >    *                    L--> xe_engine_snapshot_print
> > - *                         Print register lists values saved at
> > - *                         guc->capture->outlist
> > + *                           L --> xe_guc_capture_snapshot_print (for printing register
> > + *                                 lists values of xe_hw_engine_snapshot->matched_node)
> > + *      --> xe_devcoredump_free (user clears devcoredump)
> > + *             L--> xe_devcoredump_free -> xe_devcoredump_snapshot_free
> > + *                    L--> xe_hw_engine_snapshot_free
> > + *                           L--> xe_guc_capture_snapshot_put(matched_node)
> >    *
> >    */
> >   
> > @@ -1066,13 +1040,13 @@ guc_capture_log_get_register(struct xe_guc *guc, struct __guc_capture_bufstate *
> >         return 0;
> >   }
> >   
> > -static struct __guc_capture_parsed_output *
> > +static struct xe_guc_capture_snapshot *
> >   guc_capture_get_prealloc_node(struct xe_guc *guc)
> >   {
> > -       struct __guc_capture_parsed_output *found = NULL;
> > +       struct xe_guc_capture_snapshot *found = NULL;
> >   
> >         if (!list_empty(&guc->capture->cachelist)) {
> > -               struct __guc_capture_parsed_output *n, *ntmp;
> > +               struct xe_guc_capture_snapshot *n, *ntmp;
> >   
> >                 /* get first avail node from the cache list */
> >                 list_for_each_entry_safe(n, ntmp, &guc->capture->cachelist, link) {
> > @@ -1080,7 +1054,7 @@ guc_capture_get_prealloc_node(struct xe_guc *guc)
> >                         break;
> >                 }
> >         } else {
> > -               struct __guc_capture_parsed_output *n, *ntmp;
> > +               struct xe_guc_capture_snapshot *n, *ntmp;
> >   
> >                 /*
> >                  * traverse reversed and steal back the oldest node already
> > @@ -1099,11 +1073,11 @@ guc_capture_get_prealloc_node(struct xe_guc *guc)
> >         return found;
> >   }
> >   
> > -static struct __guc_capture_parsed_output *
> > -guc_capture_clone_node(struct xe_guc *guc, struct __guc_capture_parsed_output *original,
> > +static struct xe_guc_capture_snapshot *
> > +guc_capture_clone_node(struct xe_guc *guc, struct xe_guc_capture_snapshot *original,
> >                        u32 keep_reglist_mask)
> >   {
> > -       struct __guc_capture_parsed_output *new;
> > +       struct xe_guc_capture_snapshot *new;
> >         int i;
> >   
> >         new = guc_capture_get_prealloc_node(guc);
> > @@ -1145,7 +1119,7 @@ guc_capture_extract_reglists(struct xe_guc *guc, struct __guc_capture_bufstate *
> >         struct xe_gt *gt = guc_to_gt(guc);
> >         struct guc_state_capture_group_header_t ghdr = {0};
> >         struct guc_state_capture_header_t hdr = {0};
> > -       struct __guc_capture_parsed_output *node = NULL;
> > +       struct xe_guc_capture_snapshot *node = NULL;
> >         struct guc_mmio_reg *regs = NULL;
> >         int i, numlists, numregs, ret = 0;
> >         enum guc_state_capture_type datatype;
> > @@ -1438,11 +1412,11 @@ void xe_guc_capture_process(struct xe_guc *guc)
> >                 __guc_capture_process_output(guc);
> >   }
> >   
> > -static struct __guc_capture_parsed_output *
> > +static struct xe_guc_capture_snapshot *
> >   guc_capture_alloc_one_node(struct xe_guc *guc)
> >   {
> >         struct drm_device *drm = guc_to_drm(guc);
> > -       struct __guc_capture_parsed_output *new;
> > +       struct xe_guc_capture_snapshot *new;
> >         int i;
> >   
> >         new = drmm_kzalloc(drm, sizeof(*new), GFP_KERNEL);
> > @@ -1467,7 +1441,7 @@ guc_capture_alloc_one_node(struct xe_guc *guc)
> >   static void
> >   __guc_capture_create_prealloc_nodes(struct xe_guc *guc)
> >   {
> > -       struct __guc_capture_parsed_output *node = NULL;
> > +       struct xe_guc_capture_snapshot *node = NULL;
> >         int i;
> >   
> >         for (i = 0; i < PREALLOC_NODES_MAX_COUNT; ++i) {
> All above is about renaming structure or comments, that's fine.
alan: yes, thats right, this plumbing refactor allows the xe_hw_engine_capture
to get and put a guc-matching-node or manual-capture-node and exposing a handle
type to an external subsystem means we should prefix it with the standard
naming "xe_guc" in front.
 
> 
> > @@ -1564,35 +1538,18 @@ read_reg_to_node(struct xe_hw_engine *hwe, const struct __guc_mmio_reg_descr_gro
> >         }
> >   }
> >   
> > -/**
> > - * xe_engine_manual_capture - Take a manual engine snapshot from engine.
> > - * @hwe: Xe HW Engine.
> > - * @snapshot: The engine snapshot
> > - *
> > - * Take engine snapshot from engine read.
> > - *
> > - * Returns: None
> > - */
> > -void
> > -xe_engine_manual_capture(struct xe_hw_engine *hwe, struct xe_hw_engine_snapshot *snapshot)
> > +static struct xe_guc_capture_snapshot *
> > +guc_capture_get_manual_snapshot(struct xe_guc *guc, struct xe_hw_engine *hwe)
> >   {
> >         struct xe_gt *gt = hwe->gt;
> > -       struct xe_device *xe = gt_to_xe(gt);
> > -       struct xe_guc *guc = &gt->uc.guc;
> > -       struct xe_devcoredump *devcoredump = &xe->devcoredump;
> >         enum guc_capture_list_class_type capture_class;
> >         const struct __guc_mmio_reg_descr_group *list;
> > -       struct __guc_capture_parsed_output *new;
> > +       struct xe_guc_capture_snapshot *new;
> >         enum guc_state_capture_type type;
> > -       u16 guc_id = 0;
> > -       u32 lrca = 0;
> > -
> > -       if (IS_SRIOV_VF(xe))
> > -               return;
> >   
> >         new = guc_capture_get_prealloc_node(guc);
> >         if (!new)
> > -               return;
> > +               return NULL;
> >   
> >         capture_class = xe_engine_class_to_guc_capture_class(hwe->class);
> >         for (type = GUC_STATE_CAPTURE_TYPE_GLOBAL; type < GUC_STATE_CAPTURE_TYPE_MAX; type++) {
> > @@ -1626,26 +1583,83 @@ xe_engine_manual_capture(struct xe_hw_engine *hwe, struct xe_hw_engine_snapshot
> >                 }
> >         }
> >   
> > -       if (devcoredump && devcoredump->captured) {
> > -               struct xe_guc_submit_exec_queue_snapshot *ge = devcoredump->snapshot.ge;
> > +       new->eng_class = xe_engine_class_to_guc_class(hwe->class);
> > +       new->eng_inst = hwe->instance;
> >   
> > -               if (ge) {
> > -                       guc_id = ge->guc.id;
> > -                       if (ge->lrc[0])
> > -                               lrca = ge->lrc[0]->context_desc;
> > -               }
> > +       return new;
> > +}
> > +
> > +/**
> > + * xe_guc_capture_snapshot_store_and_get_manual_hwe - Generate and get manual engine register dump
> > + * @guc: Target GuC for manual capture
> > + * @hwe: The engine instance to capture from
> > + *
> > + * Generate a manual GuC-Error-Capture snapshot of engine instance + engine class registers
> > + * without any queue association. This capture node is not stored in outlist or cachelist,
> > + * Returns: New capture node and caller must "put"
> > + */
> > +struct xe_guc_capture_snapshot *
> > +xe_guc_capture_snapshot_store_and_get_manual_hwe(struct xe_guc *guc, struct xe_hw_engine *hwe)
> > +{
> > +       struct xe_guc_capture_snapshot *new;
> > +
> > +       new = guc_capture_get_manual_snapshot(guc, hwe);
> > +       if (!new)
> > +               return NULL;
> > +
> > +       new->guc_id = 0;
> > +       new->lrca = 0;
> > +       new->is_partial = 0;
> > +       new->source = XE_ENGINE_CAPTURE_SOURCE_MANUAL;
> > +
> > +       return new;
> > +}
> > +
> > +/**
> > + * xe_guc_capture_snapshot_store_manual_job - Generate and store a manual engine register dump
> > + * @guc: Target GuC for manual capture
> > + * @q: Associated xe_exec_queue to simulate a manual capture on its behalf.
> > + *
> > + * Generate a manual GuC-Error-Capture snapshot of engine instance + engine class registers
> > + * for the engine of the given exec queue. Stores this node in internal outlist for future
> > + * retrieval with the ability to match up against the same queue.
> > + *
> > + * Returns: None
> > + */
> > +void
> > +xe_guc_capture_snapshot_store_manual_job(struct xe_guc *guc, struct xe_exec_queue *q)
> > +{
> > +       struct xe_guc_capture_snapshot *new;
> > +       struct xe_gt *gt = guc_to_gt(guc);
> > +       struct xe_hw_engine *hwe;
> > +       enum xe_hw_engine_id id;
> > +
> > +       if (q) {
> > +               xe_gt_warn(gt, "Manual GuC Error capture requested with invalid job\n");
> > +               return;
> >         }
> Need to do SRIOV check here or at timedout job
>         if (IS_SRIOV_VF(xe))
>                 return;
> for compareration, the existing implementation is
> guc_exec_queue_timedout_job
>         xe_engine_snapshot_capture_for_queue
> which did the SRIOV check.
> 
alan: good catch - thanks - I'll add that bailout.

> >   
> > -       new->eng_class = xe_engine_class_to_guc_class(hwe->class);
> > -       new->eng_inst = hwe->instance;
> > -       new->guc_id = guc_id;
> > -       new->lrca = lrca;
> > +       /* Find hwe for the queue */
> > +       for_each_hw_engine(hwe, gt, id) {
> > +               if (hwe != q->hwe)
> > +                       continue;
> > +               break;
> > +       }
> > +
> > +       new = guc_capture_get_manual_snapshot(guc, hwe);
> > +       if (!new)
> > +               return;
> > +
> > +       new->guc_id = q->guc->id;
> > +       new->lrca = xe_lrc_ggtt_addr(q->lrc[0]);
> >         new->is_partial = 0;
> > -       new->locked = 1;
> > +       /* lock manual captures until devcoredump-engine puts it */
> > +       new->locked = true;
> >         new->source = XE_ENGINE_CAPTURE_SOURCE_MANUAL;
> >   
> >         guc_capture_add_node_to_outlist(guc->capture, new);
> > -       devcoredump->snapshot.matched_node = new;
> > +
> > +       return;
> >   }
> >   
> >   static struct guc_mmio_reg *
> > @@ -1666,24 +1680,16 @@ guc_capture_find_reg(struct gcap_reg_list_info *reginfo, u32 addr, u32 flags)
> >   }
> >   
> >   static void
> > -snapshot_print_by_list_order(struct xe_hw_engine_snapshot *snapshot, struct drm_printer *p,
> > -                            u32 type, const struct __guc_mmio_reg_descr_group *list)
> > +print_noderegs_by_list_order(struct xe_guc *guc, struct gcap_reg_list_info *reginfo,
> > +                            const struct __guc_mmio_reg_descr_group *list, struct drm_printer *p)
> >   {
> > -       struct xe_gt *gt = snapshot->hwe->gt;
> > -       struct xe_device *xe = gt_to_xe(gt);
> > -       struct xe_guc *guc = &gt->uc.guc;
> > -       struct xe_devcoredump *devcoredump = &xe->devcoredump;
> > -       struct xe_devcoredump_snapshot *devcore_snapshot = &devcoredump->snapshot;
> > -       struct gcap_reg_list_info *reginfo = NULL;
> >         u32 last_value, i;
> >         bool is_ext;
> >   
> >         if (!list || list->num_regs == 0)
> >                 return;
> > -       XE_WARN_ON(!devcore_snapshot->matched_node);
> >   
> >         is_ext = list == guc->capture->extlists;
> > -       reginfo = &devcore_snapshot->matched_node->reginfo[type];
> >   
> >         /*
> >          * loop through descriptor first and find the register in the node
> > @@ -1717,7 +1723,7 @@ snapshot_print_by_list_order(struct xe_hw_engine_snapshot *snapshot, struct drm_
> >   
> >                         group = FIELD_GET(GUC_REGSET_STEERING_GROUP, reg_desc->flags);
> >                         instance = FIELD_GET(GUC_REGSET_STEERING_INSTANCE, reg_desc->flags);
> > -                       dss = xe_gt_mcr_steering_info_to_dss_id(gt, group, instance);
> > +                       dss = xe_gt_mcr_steering_info_to_dss_id(guc_to_gt(guc), group, instance);
> >   
> >                         drm_printf(p, "\t%s[%u]: 0x%08x\n", reg_desc->regname, dss, value);
> >                 } else {
> > @@ -1727,74 +1733,65 @@ snapshot_print_by_list_order(struct xe_hw_engine_snapshot *snapshot, struct drm_
> >   }
> >   
> >   /**
> > - * xe_engine_snapshot_print - Print out a given Xe HW Engine snapshot.
> > - * @snapshot: Xe HW Engine snapshot object.
> > + * xe_guc_capture_snapshot_print - Print out a the contents of a provided Guc-Err-Capture node
> > + * @guc : Target GuC for operation.
> > + * @node: GuC Error Capture register dump node.
> >    * @p: drm_printer where it will be printed out.
> >    *
> > - * This function prints out a given Xe HW Engine snapshot object.
> > + * This function prints out a register dump of a GuC-Err-Capture node that was retrieved
> > + * earlier either by GuC-FW reporting or by manual capture depending on how the
> > + * caller (typically xe_hw_engine_snapshot) was invoked and used.
> >    */
> > -void xe_engine_snapshot_print(struct xe_hw_engine_snapshot *snapshot, struct drm_printer *p)
> > +
> > +void xe_guc_capture_snapshot_print(struct xe_guc *guc, struct xe_guc_capture_snapshot *node,
> > +                                  struct drm_printer *p)
> >   {
> >         const char *grptype[GUC_STATE_CAPTURE_GROUP_TYPE_MAX] = {
> >                 "full-capture",
> >                 "partial-capture"
> >         };
> > -       int type;
> >         const struct __guc_mmio_reg_descr_group *list;
> > -       enum guc_capture_list_class_type capture_class;
> > -
> >         struct xe_gt *gt;
> > -       struct xe_device *xe;
> > -       struct xe_devcoredump *devcoredump;
> > -       struct xe_devcoredump_snapshot *devcore_snapshot;
> > +       int type;
> >   
> > -       if (!snapshot)
> > +       if (!guc)
> >                 return;
> > -
> > -       gt = snapshot->hwe->gt;
> > -       xe = gt_to_xe(gt);
> > -       devcoredump = &xe->devcoredump;
> > -       devcore_snapshot = &devcoredump->snapshot;
> > -
> > -       if (!devcore_snapshot->matched_node)
> > +       gt = guc_to_gt(guc);
> > +       if (!node) {
> > +               xe_gt_warn(gt, "GuC Capture printing without node!\n");
> >                 return;
> > +       }
> > +       if (!p) {
> > +               xe_gt_warn(gt, "GuC Capture printing without printer!\n");
> > +               return;
> > +       }
> >   
> > -       xe_gt_assert(gt, snapshot->hwe);
> > -
> > -       capture_class = xe_engine_class_to_guc_capture_class(snapshot->hwe->class);
> > -
> > -       drm_printf(p, "%s (physical), logical instance=%d\n",
> > -                  snapshot->name ? snapshot->name : "",
> > -                  snapshot->logical_instance);
> >         drm_printf(p, "\tCapture_source: %s\n",
> > -                  devcore_snapshot->matched_node->source == XE_ENGINE_CAPTURE_SOURCE_GUC ?
> > +                  node->source == XE_ENGINE_CAPTURE_SOURCE_GUC ?
> >                    "GuC" : "Manual");
> > -       drm_printf(p, "\tCoverage: %s\n", grptype[devcore_snapshot->matched_node->is_partial]);
> > -       drm_printf(p, "\tForcewake: domain 0x%x, ref %d\n",
> > -                  snapshot->forcewake.domain, snapshot->forcewake.ref);
> > -       drm_printf(p, "\tReserved: %s\n",
> > -                  str_yes_no(snapshot->kernel_reserved));
> I see this change seperate capture related print into this function.
> I like this idea.
alan: yeah, it makes it better for the layering design while allowing
xe_hw_engine_snapshot to be the owner of guc-error-capture node get/print/put.

> 
> > +       drm_printf(p, "\tCoverage: %s\n", grptype[node->is_partial]);
> >   
> >         for (type = GUC_STATE_CAPTURE_TYPE_GLOBAL; type < GUC_STATE_CAPTURE_TYPE_MAX; type++) {
> >                 list = xe_guc_capture_get_reg_desc_list(gt, GUC_CAPTURE_LIST_INDEX_PF, type,
> > -                                                       capture_class, false);
> > -               snapshot_print_by_list_order(snapshot, p, type, list);
> > +                                                       node->eng_class, false);
> > +               print_noderegs_by_list_order(guc, &node->reginfo[type], list, p);
> >         }
> >   
> > -       if (capture_class == GUC_CAPTURE_LIST_CLASS_RENDER_COMPUTE) {
> > +       if (node->eng_class == GUC_CAPTURE_LIST_CLASS_RENDER_COMPUTE) {
> > +               type = GUC_STATE_CAPTURE_TYPE_ENGINE_CLASS;
> >                 list = xe_guc_capture_get_reg_desc_list(gt, GUC_CAPTURE_LIST_INDEX_PF,
> > -                                                       GUC_STATE_CAPTURE_TYPE_ENGINE_CLASS,
> > -                                                       capture_class, true);
> > -               snapshot_print_by_list_order(snapshot, p, GUC_STATE_CAPTURE_TYPE_ENGINE_CLASS,
> > -                                            list);
> > +                                                       type, node->eng_class, true);
> > +               print_noderegs_by_list_order(guc, &node->reginfo[type], list, p);
> >         }
> > -
> >         drm_puts(p, "\n");
> >   }
> >   
> >   /**
> > - * xe_guc_capture_get_matching_and_lock - Matching GuC capture for the queue.
> > - * @q: The exec queue object
> > + * xe_guc_capture_snapshot_get - Matching GuC capture for the queue.
> > + *
> > + * @guc: The GuC being searched for a matching guc-error-capture snapshot.
> > + * @q: The exec queue object that provides engine, guc-id and lrca to match (can be NULL!)
> > + * @src: The source of the GuC-error-Capture snapshot to retrieve;
> >    *
> >    * Search within the capture outlist for the queue, could be used for check if
> >    * GuC capture is ready for the queue.
> > @@ -1802,28 +1799,31 @@ void xe_engine_snapshot_print(struct xe_hw_engine_snapshot *snapshot, struct drm
> >    *
> >    * Returns: found guc-capture node ptr else NULL
> >    */
> > -struct __guc_capture_parsed_output *
> > -xe_guc_capture_get_matching_and_lock(struct xe_exec_queue *q)
> > +struct xe_guc_capture_snapshot *
> > +xe_guc_capture_snapshot_get(struct xe_guc *guc, struct xe_exec_queue *q,
> > +                           enum xe_guc_capture_snapshot_source src)
> >   {
> >         struct xe_hw_engine *hwe;
> >         enum xe_hw_engine_id id;
> > +       struct xe_gt *gt;
> >         struct xe_device *xe;
> >         u16 guc_class = GUC_LAST_ENGINE_CLASS + 1;
> > -       struct xe_devcoredump_snapshot *ss;
> >   
> > -       if (!q || !q->gt)
> > +       if (!guc)
> >                 return NULL;
> >   
> > -       xe = gt_to_xe(q->gt);
> > -       if (xe->wedged.mode >= 2 || !xe_device_uc_enabled(xe) || IS_SRIOV_VF(xe))
> > +       gt = guc_to_gt(guc);
> > +       if (q && q->gt != gt) {
> > +               xe_gt_warn(gt, "Guc-Err-Capture being querried with incorrect queue's GT!");
> >                 return NULL;
> > +       }
> >   
> > -       ss = &xe->devcoredump.snapshot;
> > -       if (ss->matched_node && ss->matched_node->source == XE_ENGINE_CAPTURE_SOURCE_GUC)
> > -               return ss->matched_node;
> > +       xe = gt_to_xe(gt);
> > +       if (xe->wedged.mode >= 2 || !xe_device_uc_enabled(xe) || IS_SRIOV_VF(xe))
> > +               return NULL;
> >   
> >         /* Find hwe for the queue */
> > -       for_each_hw_engine(hwe, q->gt, id) {
> > +       for_each_hw_engine(hwe, gt, id) {
> >                 if (hwe != q->hwe)
> >                         continue;
> >                 guc_class = xe_engine_class_to_guc_class(hwe->class);
> > @@ -1831,8 +1831,7 @@ xe_guc_capture_get_matching_and_lock(struct xe_exec_queue *q)
> >         }
> >   
> >         if (guc_class <= GUC_LAST_ENGINE_CLASS) {
> > -               struct __guc_capture_parsed_output *n, *ntmp;
> > -               struct xe_guc *guc =  &q->gt->uc.guc;
> > +               struct xe_guc_capture_snapshot *n, *ntmp;
> >                 u16 guc_id = q->guc->id;
> >                 u32 lrca = xe_lrc_ggtt_addr(q->lrc[0]);
> >   
> > @@ -1844,8 +1843,8 @@ xe_guc_capture_get_matching_and_lock(struct xe_exec_queue *q)
> >                 list_for_each_entry_safe(n, ntmp, &guc->capture->outlist, link) {
> >                         if (n->eng_class == guc_class && n->eng_inst == hwe->instance &&
> >                             n->guc_id == guc_id && n->lrca == lrca &&
> > -                           n->source == XE_ENGINE_CAPTURE_SOURCE_GUC) {
> > -                               n->locked = 1;
> > +                           n->source == src) {
> > +                               n->locked = true;
> >                                 return n;
> >                         }
> >                 }
> > @@ -1853,77 +1852,19 @@ xe_guc_capture_get_matching_and_lock(struct xe_exec_queue *q)
> >         return NULL;
> >   }
> >   
> > -/**
> > - * xe_engine_snapshot_capture_for_queue - Take snapshot of associated engine
> > - * @q: The exec queue object
> > - *
> > - * Take snapshot of associated HW Engine
> > - *
> > - * Returns: None.
> > - */
> > -void
> > -xe_engine_snapshot_capture_for_queue(struct xe_exec_queue *q)
> > -{
> > -       struct xe_device *xe = gt_to_xe(q->gt);
> > -       struct xe_devcoredump *coredump = &xe->devcoredump;
> > -       struct xe_hw_engine *hwe;
> > -       enum xe_hw_engine_id id;
> > -       u32 adj_logical_mask = q->logical_mask;
> > -
> > -       if (IS_SRIOV_VF(xe))
> > -               return;
> > -
> > -       for_each_hw_engine(hwe, q->gt, id) {
> > -               if (hwe->class != q->hwe->class ||
> > -                   !(BIT(hwe->logical_instance) & adj_logical_mask)) {
> > -                       coredump->snapshot.hwe[id] = NULL;
> > -                       continue;
> > -               }
> > -
> > -               if (!coredump->snapshot.hwe[id]) {
> > -                       coredump->snapshot.hwe[id] =
> > -                               xe_hw_engine_snapshot_capture(hwe, q);
> > -               } else {
> > -                       struct __guc_capture_parsed_output *new;
> > -
> > -                       new = xe_guc_capture_get_matching_and_lock(q);
> > -                       if (new) {
> > -                               struct xe_guc *guc =  &q->gt->uc.guc;
> > -
> > -                               /*
> > -                                * If we are in here, it means we found a fresh
> > -                                * GuC-err-capture node for this engine after
> > -                                * previously failing to find a match in the
> > -                                * early part of guc_exec_queue_timedout_job.
> > -                                * Thus we must free the manually captured node
> > -                                */
> > -                               guc_capture_free_outlist_node(guc->capture,
> > -                                                             coredump->snapshot.matched_node);
> > -                               coredump->snapshot.matched_node = new;
> > -                       }
> > -               }
> > -
> > -               break;
> > -       }
> > -}
> > -
> >   /*
> > - * xe_guc_capture_put_matched_nodes - Cleanup macthed nodes
> > + * xe_guc_capture_snapshot_put - Release GuC Capture matched node from a prior snapshot_get
> >    * @guc: The GuC object
> > + * @node: The node to release back to GuC
> >    *
> >    * Free matched node and all nodes with the equal guc_id from
> >    * GuC captured outlist
> >    */
> > -void xe_guc_capture_put_matched_nodes(struct xe_guc *guc)
> > +void xe_guc_capture_snapshot_put(struct xe_guc *guc, struct xe_guc_capture_snapshot *n)
> >   {
> > -       struct xe_device *xe = guc_to_xe(guc);
> > -       struct xe_devcoredump *devcoredump = &xe->devcoredump;
> > -       struct __guc_capture_parsed_output *n = devcoredump->snapshot.matched_node;
> > -
> >         if (n) {
> >                 guc_capture_remove_stale_matches_from_list(guc->capture, n);
> >                 guc_capture_free_outlist_node(guc->capture, n);
> > -               devcoredump->snapshot.matched_node = NULL;
> >         }
> >   }
> >   
> > diff --git a/drivers/gpu/drm/xe/xe_guc_capture.h b/drivers/gpu/drm/xe/xe_guc_capture.h
> > index 20a078dc4b85..e85af277be9c 100644
> > --- a/drivers/gpu/drm/xe/xe_guc_capture.h
> > +++ b/drivers/gpu/drm/xe/xe_guc_capture.h
> > @@ -11,10 +11,7 @@
> >   #include "xe_guc.h"
> >   #include "xe_guc_fwif.h"
> >   
> > -struct xe_exec_queue;
> >   struct xe_guc;
> > -struct xe_hw_engine;
> > -struct xe_hw_engine_snapshot;
> >   
> >   static inline enum guc_capture_list_class_type xe_guc_class_to_capture_class(u16 class)
> >   {
> > @@ -44,18 +41,13 @@ void xe_guc_capture_process(struct xe_guc *guc);
> >   int xe_guc_capture_getlist(struct xe_guc *guc, u32 owner, u32 type,
> >                            enum guc_capture_list_class_type capture_class, void **outptr);
> >   int xe_guc_capture_getlistsize(struct xe_guc *guc, u32 owner, u32 type,
> > -                              enum guc_capture_list_class_type capture_class, size_t *size);
> > +                                  enum guc_capture_list_class_type capture_class, size_t *size);
> >   int xe_guc_capture_getnullheader(struct xe_guc *guc, void **outptr, size_t *size);
> >   size_t xe_guc_capture_ads_input_worst_size(struct xe_guc *guc);
> >   const struct __guc_mmio_reg_descr_group *
> >   xe_guc_capture_get_reg_desc_list(struct xe_gt *gt, u32 owner, u32 type,
> >                                  enum guc_capture_list_class_type capture_class, bool is_ext);
> > -struct __guc_capture_parsed_output *xe_guc_capture_get_matching_and_lock(struct xe_exec_queue *q);
> > -void xe_engine_manual_capture(struct xe_hw_engine *hwe, struct xe_hw_engine_snapshot *snapshot);
> > -void xe_engine_snapshot_print(struct xe_hw_engine_snapshot *snapshot, struct drm_printer *p);
> > -void xe_engine_snapshot_capture_for_queue(struct xe_exec_queue *q);
> >   void xe_guc_capture_steered_list_init(struct xe_guc *guc);
> > -void xe_guc_capture_put_matched_nodes(struct xe_guc *guc);
> >   int xe_guc_capture_init(struct xe_guc *guc);
> >   
> >   #endif
> > diff --git a/drivers/gpu/drm/xe/xe_guc_capture_snapshot_types.h b/drivers/gpu/drm/xe/xe_guc_capture_snapshot_types.h
> > new file mode 100644
> > index 000000000000..76159cb8fcab
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/xe_guc_capture_snapshot_types.h
> > @@ -0,0 +1,68 @@
> > +/* SPDX-License-Identifier: MIT */
> > +/*
> > + * Copyright © 2021-2024 Intel Corporation
> > + */
> > +
> > +#ifndef _XE_GUC_CAPTURE_SNAPSHOT_TYPES_H
> > +#define _XE_GUC_CAPTURE_SNAPSHOT_TYPES_H
> > +
> > +#include <linux/types.h>
> > +#include <abi/guc_capture_abi.h>
> > +#include "xe_guc_fwif.h"
> > +
> > +struct drm_printer;
> > +struct guc_mmio_reg;
> > +struct xe_guc;
> > +struct xe_exec_queue;
> > +struct xe_hw_engine;
> > +
> > +enum xe_guc_capture_snapshot_source {
> > +       XE_ENGINE_CAPTURE_SOURCE_MANUAL,
> > +       XE_ENGINE_CAPTURE_SOURCE_GUC
> > +};
> > +
> > +/*
> > + * struct xe_guc_capture_snapshot - extracted error capture node
> > + *
> > + * A single unit of extracted error-capture output data grouped together
> > + * at an engine-instance level. We keep these nodes in a linked list.
> > + * See cachelist and outlist below.
> > + */
> > +struct xe_guc_capture_snapshot {
> > +       /*
> > +        * A single set of 3 capture lists: a global-list
> > +        * an engine-class-list and an engine-instance list.
> > +        * outlist in __guc_capture_parsed_output will keep
> > +        * a linked list of these nodes that will eventually
> > +        * be detached from outlist and attached into to
> > +        * xe_codedump in response to a context reset
> > +        */
> > +       struct list_head link;
> > +       bool is_partial;
> > +       u32 eng_class;
> > +       u32 eng_inst;
> > +       u32 guc_id;
> > +       u32 lrca;
> > +       u32 type;
> > +       bool locked;
> > +       enum xe_guc_capture_snapshot_source source;
> > +       struct gcap_reg_list_info {
> > +               u32 vfid;
> > +               u32 num_regs;
> > +               struct guc_mmio_reg *regs;
> > +       } reginfo[GUC_STATE_CAPTURE_TYPE_MAX];
> > +#define GCAP_PARSED_REGLIST_INDEX_GLOBAL   BIT(GUC_STATE_CAPTURE_TYPE_GLOBAL)
> > +#define GCAP_PARSED_REGLIST_INDEX_ENGCLASS BIT(GUC_STATE_CAPTURE_TYPE_ENGINE_CLASS)
> > +};
> > +
> > +struct xe_guc_capture_snapshot *
> > +xe_guc_capture_snapshot_get(struct xe_guc *guc, struct xe_exec_queue *q,
> > +                           enum xe_guc_capture_snapshot_source src);
> > +void xe_guc_capture_snapshot_print(struct xe_guc *guc, struct xe_guc_capture_snapshot *node,
> > +                                  struct drm_printer *p);
> > +void xe_guc_capture_snapshot_put(struct xe_guc *guc, struct xe_guc_capture_snapshot *snapshot);
> > +void xe_guc_capture_snapshot_store_manual_job(struct xe_guc *guc, struct xe_exec_queue *q);
> > +struct xe_guc_capture_snapshot *
> > +xe_guc_capture_snapshot_store_and_get_manual_hwe(struct xe_guc *guc, struct xe_hw_engine *hwe);
> > +
> > +#endif
> > diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c
> > index f9ecee5364d8..30c2bdf51958 100644
> > --- a/drivers/gpu/drm/xe/xe_guc_submit.c
> > +++ b/drivers/gpu/drm/xe/xe_guc_submit.c
> > @@ -28,6 +28,7 @@
> >   #include "xe_gt_printk.h"
> >   #include "xe_guc.h"
> >   #include "xe_guc_capture.h"
> > +#include "xe_guc_capture_snapshot_types.h"
> >   #include "xe_guc_ct.h"
> >   #include "xe_guc_exec_queue_types.h"
> >   #include "xe_guc_id_mgr.h"
> > @@ -1033,7 +1034,6 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
> >         struct xe_gpu_scheduler *sched = &q->guc->sched;
> >         struct xe_guc *guc = exec_queue_to_guc(q);
> >         const char *process_name = "no process";
> > -       struct xe_device *xe = guc_to_xe(guc);
> >         unsigned int fw_ref;
> >         int err = -ETIME;
> >         pid_t pid = -1;
> > @@ -1062,18 +1062,23 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
> >                 exec_queue_destroyed(q);
> >   
> >         /*
> > -        * If devcoredump not captured and GuC capture for the job is not ready
> > -        * do manual capture first and decide later if we need to use it
> > +        * If the queue has't been killed yet or we do not have a firmware-reported
> > +        * GuC-Error-Capture node for the matching job, request GuC-Error-Capture to
> > +        * store a manual capture within its internal list with a job-match.
> > +        * xe_hw_engine_snapshot will decide later if it's needed.
> >          */
> > -       if (!exec_queue_killed(q) && !xe->devcoredump.captured &&
> > -           !xe_guc_capture_get_matching_and_lock(q)) {
> > +       if (!exec_queue_killed(q) ||
> > > or && ?
> If we already got GuC capture, no need for manual capture
> 
> > +           !xe_guc_capture_snapshot_get(guc, q, XE_ENGINE_CAPTURE_SOURCE_GUC)) {
> I see !xe->devcoredump.captured check is missing, any concerns?
> Right now, if devcoredump already captured, we don't need the manual 
> capture.
> 
alan: I was attempting to clean up the logic to make guc-error-capture
logic modular and agnostic, but on second thoughts, i realize its a very
quick and simple optimization that you have already done due diligence in
testing and verifying. That said, i will fix this and revert back to the
original logic. 

> >                 /* take force wake before engine register manual capture */
> >                 fw_ref = xe_force_wake_get(gt_to_fw(q->gt), XE_FORCEWAKE_ALL);
> >                 if (!xe_force_wake_ref_has_domain(fw_ref, XE_FORCEWAKE_ALL))
> >                         xe_gt_info(q->gt, "failed to get forcewake for coredump capture\n");
> > -
> > -               xe_engine_snapshot_capture_for_queue(q);
> > -
> > +               /*
> > +                * This will generate a manual capture node and store it in
> > +                * This GuC Error Capture link-list as if it came from GuC
> > +                * but with a source-id == manual-capture
> > +                */
> > +               xe_guc_capture_snapshot_store_manual_job(guc, q);
> >                 xe_force_wake_put(gt_to_fw(q->gt), fw_ref);
> >         }
> >   
> > diff --git a/drivers/gpu/drm/xe/xe_hw_engine.c b/drivers/gpu/drm/xe/xe_hw_engine.c
> > index c4b0dc3be39c..ddd91627e623 100644
> > --- a/drivers/gpu/drm/xe/xe_hw_engine.c
> > +++ b/drivers/gpu/drm/xe/xe_hw_engine.c
> > @@ -24,7 +24,8 @@
> >   #include "xe_gt_printk.h"
> >   #include "xe_gt_mcr.h"
> >   #include "xe_gt_topology.h"
> > -#include "xe_guc_capture.h"
> > +//#include "xe_guc_capture.h"
> > +#include "xe_guc_capture_snapshot_types.h"
> >   #include "xe_hw_engine_group.h"
> >   #include "xe_hw_fence.h"
> >   #include "xe_irq.h"
> > @@ -827,9 +828,9 @@ void xe_hw_engine_handle_irq(struct xe_hw_engine *hwe, u16 intr_vec)
> >   }
> >   
> >   /**
> > - * xe_hw_engine_snapshot_capture - Take a quick snapshot of the HW Engine.
> > + * hw_engine_snapshot_capture - Take a quick snapshot of the HW Engine.
> >    * @hwe: Xe HW Engine.
> > - * @q: The exec queue object.
> > + * @q: The exec queue object. (can be NULL for debugfs engine-register dump)
> >    *
> >    * This can be printed out in a later stage like during dev_coredump
> >    * analysis.
> > @@ -837,11 +838,12 @@ void xe_hw_engine_handle_irq(struct xe_hw_engine *hwe, u16 intr_vec)
> >    * Returns: a Xe HW Engine snapshot object that must be freed by the
> >    * caller, using `xe_hw_engine_snapshot_free`.
> >    */
> > -struct xe_hw_engine_snapshot *
> > -xe_hw_engine_snapshot_capture(struct xe_hw_engine *hwe, struct xe_exec_queue *q)
> > +static struct xe_hw_engine_snapshot *
> > +hw_engine_snapshot_capture(struct xe_hw_engine *hwe, struct xe_exec_queue *q)
> >   {
> >         struct xe_hw_engine_snapshot *snapshot;
> > -       struct __guc_capture_parsed_output *node;
> > +       struct xe_guc_capture_snapshot *manual_node;
> > +       struct xe_guc *guc;
> >   
> >         if (!xe_hw_engine_is_valid(hwe))
> >                 return NULL;
> > @@ -865,25 +867,66 @@ xe_hw_engine_snapshot_capture(struct xe_hw_engine *hwe, struct xe_exec_queue *q)
> >                 return snapshot;
> >   
> >         if (q) {
> > -               /* If got guc capture, set source to GuC */
> > -               node = xe_guc_capture_get_matching_and_lock(q);
> > -               if (node) {
> > -                       struct xe_device *xe = gt_to_xe(hwe->gt);
> > -                       struct xe_devcoredump *coredump = &xe->devcoredump;
> > -
> > -                       coredump->snapshot.matched_node = node;
> > -                       xe_gt_dbg(hwe->gt, "Found and locked GuC-err-capture node");
> > -                       return snapshot;
> > +               guc = &q->gt->uc.guc;
> > +               /* First find the pre-kill manual GuC-Err-Capture node for this job */
> > +               manual_node = xe_guc_capture_snapshot_get(guc, q,
> > +                                                         XE_ENGINE_CAPTURE_SOURCE_MANUAL);
> > +
> > +               /* Next, look for the GuC-Firmware reported node for this job */
> > +               snapshot->matched_node = xe_guc_capture_snapshot_get(guc, q,
> > +                                                                    XE_ENGINE_CAPTURE_SOURCE_GUC);
> > +               if (!snapshot->matched_node) {
> > +                       xe_gt_dbg(hwe->gt, "Can't find GUC-Sourced err-capture node");
> > +                       snapshot->matched_node = manual_node;
> > +               } else if (manual_node) {
> > +                       /* looks like we don't need the manually-captured node, return it */
> > +                       xe_guc_capture_snapshot_put(guc, manual_node);
> >                 }
> >         }
> >   
> > -       /* otherwise, do manual capture */
> > -       xe_engine_manual_capture(hwe, snapshot);
> > -       xe_gt_dbg(hwe->gt, "Proceeding with manual engine snapshot");
> > +       if (!snapshot->matched_node) {
> > +               guc = &hwe->gt->uc.guc;
> > +               /*
> > +                * Fallback path - do an immediate jobless manual engine capture.
> > +                * This will happen when debugfs is triggered to force an engine dump.
> > +                */
> > +               snapshot->matched_node = xe_guc_capture_snapshot_store_and_get_manual_hwe(guc, hwe);
> > +               xe_gt_dbg(hwe->gt, "Fallback to jobless-manual-err-capture node");
> > +       }
> >   
> >         return snapshot;
> >   }
> >   
> > +/**
> > + * xe_engine_snapshot_capture_for_queue - Take snapshot of associated engine
> > + * @q: The exec queue object
> > + *
> > + * Take snapshot of associated HW Engine
> > + *
> > + * Returns: None.
> > + */
> > +void
> > +xe_engine_snapshot_capture_for_queue(struct xe_exec_queue *q)
> > +{
> > +       struct xe_device *xe = gt_to_xe(q->gt);
> > +       struct xe_devcoredump *coredump = &xe->devcoredump;
> > +       struct xe_hw_engine *hwe;
> > +       enum xe_hw_engine_id id;
> > +       u32 adj_logical_mask = q->logical_mask;
> > +
> > +       if (IS_SRIOV_VF(xe))
> > +               return;
> > +
> > +       for_each_hw_engine(hwe, q->gt, id) {
> > +               if (hwe->class != q->hwe->class ||
> > +                   !(BIT(hwe->logical_instance) & adj_logical_mask)) {
> > +                       coredump->snapshot.hwe[id] = NULL;
> > +                       continue;
> > +               }
> > +               coredump->snapshot.hwe[id] = hw_engine_snapshot_capture(hwe, q);
> > +       }
> > +}
> > +
> >   /**
> >    * xe_hw_engine_snapshot_free - Free all allocated objects for a given snapshot.
> >    * @snapshot: Xe HW Engine snapshot object.
> > @@ -898,17 +941,41 @@ void xe_hw_engine_snapshot_free(struct xe_hw_engine_snapshot *snapshot)
> >                 return;
> >   
> >         gt = snapshot->hwe->gt;
> > -       /*
> > -        * xe_guc_capture_put_matched_nodes is called here and from
> > -        * xe_devcoredump_snapshot_free, to cover the 2 calling paths
> > -        * of hw_engines - debugfs and devcoredump free.
> > -        */
> > -       xe_guc_capture_put_matched_nodes(&gt->uc.guc);
> > +       xe_guc_capture_snapshot_put(&gt->uc.guc, snapshot->matched_node);
> > +       snapshot->matched_node = NULL;
> >   
> >         kfree(snapshot->name);
> >         kfree(snapshot);
> >   }
> >   
> > +/**
> > + * xe_engine_snapshot_print - Print out a given Xe HW Engine snapshot.
> > + * @snapshot: Xe HW Engine snapshot object.
> > + * @p: drm_printer where it will be printed out.
> > + *
> > + * This function prints out a given Xe HW Engine snapshot object.
> > + */
> > +void xe_engine_snapshot_print(struct xe_hw_engine_snapshot *snapshot, struct drm_printer *p)
> > +{
> > +       struct xe_gt *gt;
> > +
> > +       if (!snapshot)
> > +               return;
> > +
> > +       gt = snapshot->hwe->gt;
> > +
> > +       drm_printf(p, "%s (physical), logical instance=%d\n",
> > +                  snapshot->name ? snapshot->name : "",
> > +                  snapshot->logical_instance);
> > +       drm_printf(p, "\tForcewake: domain 0x%x, ref %d\n",
> > +                  snapshot->forcewake.domain, snapshot->forcewake.ref);
> > +       drm_printf(p, "\tReserved: %s\n",
> > +                  str_yes_no(snapshot->kernel_reserved));
> > +       drm_puts(p, "\n");
> > +
> > +       xe_guc_capture_snapshot_print(&gt->uc.guc, snapshot->matched_node, p);
> > +}
> > +
> >   /**
> >    * xe_hw_engine_print - Xe HW Engine Print.
> >    * @hwe: Hardware Engine.
> > @@ -920,7 +987,7 @@ void xe_hw_engine_print(struct xe_hw_engine *hwe, struct drm_printer *p)
> >   {
> >         struct xe_hw_engine_snapshot *snapshot;
> >   
> > -       snapshot = xe_hw_engine_snapshot_capture(hwe, NULL);
> > +       snapshot = hw_engine_snapshot_capture(hwe, NULL);
> >         xe_engine_snapshot_print(snapshot, p);
> >         xe_hw_engine_snapshot_free(snapshot);
> >   }
> > diff --git a/drivers/gpu/drm/xe/xe_hw_engine.h b/drivers/gpu/drm/xe/xe_hw_engine.h
> > index 6b5f9fa2a594..845153fbc149 100644
> > --- a/drivers/gpu/drm/xe/xe_hw_engine.h
> > +++ b/drivers/gpu/drm/xe/xe_hw_engine.h
> > @@ -55,9 +55,9 @@ void xe_hw_engine_handle_irq(struct xe_hw_engine *hwe, u16 intr_vec);
> >   void xe_hw_engine_enable_ring(struct xe_hw_engine *hwe);
> >   u32 xe_hw_engine_mask_per_class(struct xe_gt *gt,
> >                                 enum xe_engine_class engine_class);
> > -struct xe_hw_engine_snapshot *
> > -xe_hw_engine_snapshot_capture(struct xe_hw_engine *hwe, struct xe_exec_queue *q);
> > +void xe_engine_snapshot_capture_for_queue(struct xe_exec_queue *q);
> >   void xe_hw_engine_snapshot_free(struct xe_hw_engine_snapshot *snapshot);
> > +void xe_engine_snapshot_print(struct xe_hw_engine_snapshot *snapshot, struct drm_printer *p);
> >   void xe_hw_engine_print(struct xe_hw_engine *hwe, struct drm_printer *p);
> >   void xe_hw_engine_setup_default_lrc_state(struct xe_hw_engine *hwe);
> >   
> > diff --git a/drivers/gpu/drm/xe/xe_hw_engine_types.h b/drivers/gpu/drm/xe/xe_hw_engine_types.h
> > index e14bee95e364..ea6b60c819d4 100644
> > --- a/drivers/gpu/drm/xe/xe_hw_engine_types.h
> > +++ b/drivers/gpu/drm/xe/xe_hw_engine_types.h
> > @@ -152,11 +152,7 @@ struct xe_hw_engine {
> >         struct xe_hw_engine_group *hw_engine_group;
> >   };
> >   
> > -enum xe_hw_engine_snapshot_source_id {
> > -       XE_ENGINE_CAPTURE_SOURCE_MANUAL,
> > -       XE_ENGINE_CAPTURE_SOURCE_GUC
> > -};
> > -
> > +struct xe_guc_capture_snapshot;
> >   /**
> >    * struct xe_hw_engine_snapshot - Hardware engine snapshot
> >    *
> > @@ -180,6 +176,13 @@ struct xe_hw_engine_snapshot {
> >         u32 mmio_base;
> >         /** @kernel_reserved: Engine reserved, can't be used by userspace */
> >         bool kernel_reserved;
> > +       /**
> > +        * @matched_node: GuC Capture snapshot:
> > +        * The matched capture node for the timedout job
> > +        * this single-node tracker works because devcoredump will always only
> > +        * produce one hw-engine capture per devcoredump event
> > +        */
> > +       struct xe_guc_capture_snapshot *matched_node;
> >   };
> >   
> >   #endif
> 


^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2024-12-03  3:12 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-17 18:43 [PATCH 0/1] Maintenence of devcoredump <-> GuC-Err-Capture plumbing Alan Previn
2024-11-17 18:44 ` [PATCH 1/1] drm/xe/guc/capture: " Alan Previn
2024-11-26 17:09   ` Dong, Zhanjun
2024-12-03  3:12     ` Teres Alexis, Alan Previn
2024-11-18  2:22 ` ✓ CI.Patch_applied: success for " Patchwork
2024-11-18  2:22 ` ✗ CI.checkpatch: warning " Patchwork
2024-11-18  2:23 ` ✓ CI.KUnit: success " Patchwork
2024-11-18  2:41 ` ✓ CI.Build: " Patchwork
2024-11-18  2:42 ` ✗ CI.Hooks: failure " Patchwork
2024-11-18  2:43 ` ✓ CI.checksparse: success " Patchwork
2024-11-18  3:02 ` ✓ CI.BAT: " Patchwork
2024-11-18  4:03 ` ✗ CI.FULL: failure " Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox