intel-xe.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 0/3] VF double migration
@ 2025-11-20 14:51 Satyanarayana K V P
  2025-11-20 14:51 ` [PATCH v5 1/3] drm/xe/vf: Enable VF migration only on supported GuC versions Satyanarayana K V P
                   ` (5 more replies)
  0 siblings, 6 replies; 11+ messages in thread
From: Satyanarayana K V P @ 2025-11-20 14:51 UTC (permalink / raw)
  To: intel-xe; +Cc: Satyanarayana K V P

In scenarios involving double migration, the VF KMD may encounter
situations where it is instructed to re-migrate before having the
opportunity to send RESFIX_DONE for the initial migration. This can occur
when the fix-up for the prior migration is still underway, but the VF KMD
is migrated again.

Consequently, this may lead to the possibility of sending two migration
notifications (i.e., pending fix-up for the first migration and a second
notification for the new migration). Upon receiving the first RES_FIX
notification, the GuC will resume VF submission on the GPU, potentially
resulting in undefined behavior, such as system hangs or crashes.

To avoid these hangs, a new VF2GUC action `VF2GUC_RESFIX_START` is
sent along with marker and when GUC receives the same marker with
`VF2GUC_RESFIX_DONE`action, it starts scheduling work loads from VF.

---
V4 -> V5:
- Fixed review comments (Michal W).
- Created new function vf_migration_init_late().
- Fixed minor debug log levels and documentation part.
- Moved complete marker logic to vf_post_migration_resfix_start_marker()
- Updated debugfs entries.

V3 -> V4:
- Gated Save/restore on Guc version 70.54.0
- Enabled RESFIX_START by default.
- Updated RESFIX_DONE documention.

V2 -> V3:
- Fixed review comments (Michal W).
- Updated commit message.
- Fixed CI.BAT issues.
- Added helper function to assert on unsupported GUC versions.
- Added debugfs entries to test VF double migration.

V1 -> V2:
- Squashed "Enable RESFIX start marker only on supported GUC
versions" commit into a single commit. (Matt B)
- Use fault injection for testing VF double  migration feature (Matt B).

Satyanarayana K V P (3):
  drm/xe/vf: Enable VF migration only on supported GuC versions
  drm/xe/vf: Introduce RESFIX start marker support
  drm/xe/vf: Add debugfs entries to test VF double migration

 .../gpu/drm/xe/abi/guc_actions_sriov_abi.h    |  67 ++++++++--
 drivers/gpu/drm/xe/xe_gt_sriov_vf.c           | 122 +++++++++++++++---
 drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.c   |   5 +
 drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h     |  13 ++
 drivers/gpu/drm/xe/xe_sriov_vf.c              |  36 +++++-
 5 files changed, 209 insertions(+), 34 deletions(-)

-- 
2.51.0


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

* [PATCH v5 1/3] drm/xe/vf: Enable VF migration only on supported GuC versions
  2025-11-20 14:51 [PATCH v5 0/3] VF double migration Satyanarayana K V P
@ 2025-11-20 14:51 ` Satyanarayana K V P
  2025-11-20 21:18   ` Michal Wajdeczko
  2025-11-20 14:52 ` [PATCH v5 2/3] drm/xe/vf: Introduce RESFIX start marker support Satyanarayana K V P
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 11+ messages in thread
From: Satyanarayana K V P @ 2025-11-20 14:51 UTC (permalink / raw)
  To: intel-xe; +Cc: Satyanarayana K V P, Michal Wajdeczko, Matthew Brost, Tomasz Lis

Enable VF migration starting with GuC 70.54.0 (compatibility version
1.27.0).

Signed-off-by: Satyanarayana K V P <satyanarayana.k.v.p@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Tomasz Lis <tomasz.lis@intel.com>

---
V4 -> V5:
- Created new function vf_migration_init_late() (Michal W).

V3 -> V4:
- New commit

V2 -> V3:
- None.

V1 -> V2:
- None.
---
 drivers/gpu/drm/xe/xe_sriov_vf.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_sriov_vf.c b/drivers/gpu/drm/xe/xe_sriov_vf.c
index 284ce37ca92d..13cacdbbf2d2 100644
--- a/drivers/gpu/drm/xe/xe_sriov_vf.c
+++ b/drivers/gpu/drm/xe/xe_sriov_vf.c
@@ -170,6 +170,20 @@ void xe_sriov_vf_init_early(struct xe_device *xe)
 	vf_migration_init_early(xe);
 }
 
+static void vf_migration_init_late(struct xe_device *xe)
+{
+	struct xe_gt *gt = xe_root_mmio_gt(xe);
+	struct xe_uc_fw_version guc_version;
+
+	xe_gt_sriov_vf_guc_versions(gt, NULL, &guc_version);
+	if (MAKE_GUC_VER_STRUCT(guc_version) < MAKE_GUC_VER(1, 27, 0)) {
+		xe_sriov_vf_migration_disable(xe,
+					      "requires GUC ABI >= 1.27.0, but only %u.%u.%u found",
+					      guc_version.major, guc_version.minor,
+					      guc_version.patch);
+	}
+}
+
 /**
  * xe_sriov_vf_init_late() - SR-IOV VF late initialization functions.
  * @xe: the &xe_device to initialize
@@ -180,6 +194,7 @@ void xe_sriov_vf_init_early(struct xe_device *xe)
  */
 int xe_sriov_vf_init_late(struct xe_device *xe)
 {
+	vf_migration_init_late(xe);
 	return xe_sriov_vf_ccs_init(xe);
 }
 
-- 
2.51.0


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

* [PATCH v5 2/3] drm/xe/vf: Introduce RESFIX start marker support
  2025-11-20 14:51 [PATCH v5 0/3] VF double migration Satyanarayana K V P
  2025-11-20 14:51 ` [PATCH v5 1/3] drm/xe/vf: Enable VF migration only on supported GuC versions Satyanarayana K V P
@ 2025-11-20 14:52 ` Satyanarayana K V P
  2025-11-20 21:37   ` Michal Wajdeczko
  2025-11-20 14:52 ` [PATCH v5 3/3] drm/xe/vf: Add debugfs entries to test VF double migration Satyanarayana K V P
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 11+ messages in thread
From: Satyanarayana K V P @ 2025-11-20 14:52 UTC (permalink / raw)
  To: intel-xe; +Cc: Satyanarayana K V P, Michal Wajdeczko, Matthew Brost, Tomasz Lis

In scenarios involving double migration, the VF KMD may encounter
situations where it is instructed to re-migrate before having the
opportunity to send RESFIX_DONE for the initial migration. This can occur
when the fix-up for the prior migration is still underway, but the VF KMD
is migrated again.

Consequently, this may lead to the possibility of sending two migration
notifications (i.e., pending fix-up for the first migration and a second
notification for the new migration). Upon receiving the first RES_FIX
notification, the GuC will resume VF submission on the GPU, potentially
resulting in undefined behavior, such as system hangs or crashes.

To avoid this, post migration, a marker is sent to the GUC prior to the
start of resource fixups to indicate start of resource fixups. The same
marker is sent along with RESFIX_DONE notification so that GUC can avoid
submitting jobs to HW in case of double migration.

Signed-off-by: Satyanarayana K V P <satyanarayana.k.v.p@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Tomasz Lis <tomasz.lis@intel.com>

---
V4 -> V5:
- Fixed review comments (Michal W).
- Fixed minor debug log levels and documentation part.
- Moved complete marker logic to vf_post_migration_resfix_start_marker()

V3 -> V4:
- Updated RESFIX_DONE action name and documenation part. (Michal W)
- Enable resfxi_start marked by default as sav/restore is gated on
Guc version 70.54.0

V2 -> V3:
- Fixed review comments (Michal W).
- Updated commit message.
- Fixed CI.BAT issues.
- Added helper function to assert on unsupported GUC versions.
- Updated RESFIX_DONE action name and documenation part.

V1 -> V2:
- Squashed "Enable RESFIX start marker only on supported GUC
versions" commit into a single commit. (Matt B)
---
 .../gpu/drm/xe/abi/guc_actions_sriov_abi.h    | 67 ++++++++++++---
 drivers/gpu/drm/xe/xe_gt_sriov_vf.c           | 85 +++++++++++++++----
 drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h     |  5 ++
 drivers/gpu/drm/xe/xe_sriov_vf.c              | 21 +++--
 4 files changed, 144 insertions(+), 34 deletions(-)

diff --git a/drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h b/drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h
index 0b28659d94e9..d9f21202e1a9 100644
--- a/drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h
+++ b/drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h
@@ -502,13 +502,17 @@
 #define VF2GUC_VF_RESET_RESPONSE_MSG_0_MBZ		GUC_HXG_RESPONSE_MSG_0_DATA0
 
 /**
- * DOC: VF2GUC_NOTIFY_RESFIX_DONE
+ * DOC: VF2GUC_RESFIX_DONE
  *
- * This action is used by VF to notify the GuC that the VF KMD has completed
- * post-migration recovery steps.
+ * This action is used by VF to inform the GuC that the VF KMD has completed
+ * post-migration recovery steps. From GuC VF compatibility 1.27.0 onwards, it
+ * shall only be sent after posting RESFIX_START and that both @MARKER fields
+ * must match.
  *
  * This message must be sent as `MMIO HXG Message`_.
  *
+ * Updated since GuC VF compatibility 1.27.0.
+ *
  *  +---+-------+--------------------------------------------------------------+
  *  |   | Bits  | Description                                                  |
  *  +===+=======+==============================================================+
@@ -516,9 +520,11 @@
  *  |   +-------+--------------------------------------------------------------+
  *  |   | 30:28 | TYPE = GUC_HXG_TYPE_REQUEST_                                 |
  *  |   +-------+--------------------------------------------------------------+
- *  |   | 27:16 | DATA0 = MBZ                                                  |
+ *  |   | 27:16 | DATA0 = MARKER = MBZ (only prior 1.27.0)                     |
  *  |   +-------+--------------------------------------------------------------+
- *  |   |  15:0 | ACTION = _`GUC_ACTION_VF2GUC_NOTIFY_RESFIX_DONE` = 0x5508    |
+ *  |   | 27:16 | DATA0 = MARKER - can't be zero (1.27.0+)                     |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   |  15:0 | ACTION = _`GUC_ACTION_VF2GUC_RESFIX_DONE` = 0x5508           |
  *  +---+-------+--------------------------------------------------------------+
  *
  *  +---+-------+--------------------------------------------------------------+
@@ -531,13 +537,13 @@
  *  |   |  27:0 | DATA0 = MBZ                                                  |
  *  +---+-------+--------------------------------------------------------------+
  */
-#define GUC_ACTION_VF2GUC_NOTIFY_RESFIX_DONE		0x5508u
+#define GUC_ACTION_VF2GUC_RESFIX_DONE			0x5508u
 
-#define VF2GUC_NOTIFY_RESFIX_DONE_REQUEST_MSG_LEN	GUC_HXG_REQUEST_MSG_MIN_LEN
-#define VF2GUC_NOTIFY_RESFIX_DONE_REQUEST_MSG_0_MBZ	GUC_HXG_REQUEST_MSG_0_DATA0
+#define VF2GUC_RESFIX_DONE_REQUEST_MSG_LEN		GUC_HXG_REQUEST_MSG_MIN_LEN
+#define VF2GUC_RESFIX_DONE_REQUEST_MSG_0_MARKER		GUC_HXG_REQUEST_MSG_0_DATA0
 
-#define VF2GUC_NOTIFY_RESFIX_DONE_RESPONSE_MSG_LEN	GUC_HXG_RESPONSE_MSG_MIN_LEN
-#define VF2GUC_NOTIFY_RESFIX_DONE_RESPONSE_MSG_0_MBZ	GUC_HXG_RESPONSE_MSG_0_DATA0
+#define VF2GUC_RESFIX_DONE_RESPONSE_MSG_LEN		GUC_HXG_RESPONSE_MSG_MIN_LEN
+#define VF2GUC_RESFIX_DONE_RESPONSE_MSG_0_MBZ		GUC_HXG_RESPONSE_MSG_0_DATA0
 
 /**
  * DOC: VF2GUC_QUERY_SINGLE_KLV
@@ -656,4 +662,45 @@
 #define PF2GUC_SAVE_RESTORE_VF_RESPONSE_MSG_LEN		GUC_HXG_RESPONSE_MSG_MIN_LEN
 #define PF2GUC_SAVE_RESTORE_VF_RESPONSE_MSG_0_USED	GUC_HXG_RESPONSE_MSG_0_DATA0
 
+/**
+ * DOC: VF2GUC_RESFIX_START
+ *
+ * This action is used by VF to inform the GuC that the VF KMD will be starting
+ * post-migration recovery fixups. The @MARKER sent with this action must match
+ * with the MARKER posted in the VF2GUC_RESFIX_DONE message.
+ *
+ * This message must be sent as `MMIO HXG Message`_.
+ *
+ * Available since GuC VF compatibility 1.27.0.
+ *
+ *  +---+-------+--------------------------------------------------------------+
+ *  |   | Bits  | Description                                                  |
+ *  +===+=======+==============================================================+
+ *  | 0 |    31 | ORIGIN = GUC_HXG_ORIGIN_HOST_                                |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   | 30:28 | TYPE = GUC_HXG_TYPE_REQUEST_                                 |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   | 27:16 | DATA0 = MARKER - can't be zero                               |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   |  15:0 | ACTION = _`GUC_ACTION_VF2GUC_RESFIX_START` = 0x550F          |
+ *  +---+-------+--------------------------------------------------------------+
+ *
+ *  +---+-------+--------------------------------------------------------------+
+ *  |   | Bits  | Description                                                  |
+ *  +===+=======+==============================================================+
+ *  | 0 |    31 | ORIGIN = GUC_HXG_ORIGIN_GUC_                                 |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   | 30:28 | TYPE = GUC_HXG_TYPE_RESPONSE_SUCCESS_                        |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   |  27:0 | DATA0 = MBZ                                                  |
+ *  +---+-------+--------------------------------------------------------------+
+ */
+#define GUC_ACTION_VF2GUC_RESFIX_START			0x550Fu
+
+#define VF2GUC_RESFIX_START_REQUEST_MSG_LEN		GUC_HXG_REQUEST_MSG_MIN_LEN
+#define VF2GUC_RESFIX_START_REQUEST_MSG_0_MARKER	GUC_HXG_REQUEST_MSG_0_DATA0
+
+#define VF2GUC_RESFIX_START_RESPONSE_MSG_LEN		GUC_HXG_RESPONSE_MSG_MIN_LEN
+#define VF2GUC_RESFIX_START_RESPONSE_MSG_0_MBZ		GUC_HXG_RESPONSE_MSG_0_DATA0
+
 #endif
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
index 4c73a077d314..1cd3d8204c15 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
@@ -299,12 +299,13 @@ void xe_gt_sriov_vf_guc_versions(struct xe_gt *gt,
 		*found = gt->sriov.vf.guc_version;
 }
 
-static int guc_action_vf_notify_resfix_done(struct xe_guc *guc)
+static int guc_action_vf_notify_resfix_start(struct xe_guc *guc, u16 marker)
 {
 	u32 request[GUC_HXG_REQUEST_MSG_MIN_LEN] = {
 		FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
 		FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_REQUEST) |
-		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, GUC_ACTION_VF2GUC_NOTIFY_RESFIX_DONE),
+		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, GUC_ACTION_VF2GUC_RESFIX_START) |
+		FIELD_PREP(VF2GUC_RESFIX_START_REQUEST_MSG_0_MARKER, marker),
 	};
 	int ret;
 
@@ -313,30 +314,54 @@ static int guc_action_vf_notify_resfix_done(struct xe_guc *guc)
 	return ret > 0 ? -EPROTO : ret;
 }
 
-/**
- * vf_notify_resfix_done - Notify GuC about resource fixups apply completed.
- * @gt: the &xe_gt struct instance linked to target GuC
- *
- * Returns: 0 if the operation completed successfully, or a negative error
- * code otherwise.
- */
-static int vf_notify_resfix_done(struct xe_gt *gt)
+static int vf_notify_resfix_start(struct xe_gt *gt, u16 marker)
 {
 	struct xe_guc *guc = &gt->uc.guc;
 	int err;
 
 	xe_gt_assert(gt, IS_SRIOV_VF(gt_to_xe(gt)));
 
-	err = guc_action_vf_notify_resfix_done(guc);
+	xe_gt_sriov_dbg_verbose(gt, "Sending resfix start marker %u\n", marker);
+
+	err = guc_action_vf_notify_resfix_start(guc, marker);
 	if (unlikely(err))
-		xe_gt_sriov_err(gt, "Failed to notify GuC about resource fixup done (%pe)\n",
+		xe_gt_sriov_err(gt, "Failed to notify GuC about resource fixup start (%pe)\n",
 				ERR_PTR(err));
-	else
-		xe_gt_sriov_dbg_verbose(gt, "sent GuC resource fixup done\n");
 
 	return err;
 }
 
+static int guc_action_vf_notify_resfix_done(struct xe_guc *guc, u16 marker)
+{
+	u32 request[GUC_HXG_REQUEST_MSG_MIN_LEN] = {
+		FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
+		FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_REQUEST) |
+		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, GUC_ACTION_VF2GUC_RESFIX_DONE) |
+		FIELD_PREP(VF2GUC_RESFIX_DONE_REQUEST_MSG_0_MARKER, marker),
+	};
+	int ret;
+
+	ret = xe_guc_mmio_send(guc, request, ARRAY_SIZE(request));
+
+	return ret > 0 ? -EPROTO : ret;
+}
+
+static int vf_notify_resfix_done(struct xe_gt *gt, u16 marker)
+{
+	struct xe_guc *guc = &gt->uc.guc;
+	int err;
+
+	xe_gt_assert(gt, IS_SRIOV_VF(gt_to_xe(gt)));
+
+	xe_gt_sriov_dbg_verbose(gt, "Sending resfix done marker %u\n", marker);
+
+	err = guc_action_vf_notify_resfix_done(guc, marker);
+	if (unlikely(err))
+		xe_gt_sriov_err(gt, "Recovery failed at GuC RESFIX_DONE step (%pe)\n",
+				ERR_PTR(err));
+	return err;
+}
+
 static int guc_action_query_single_klv(struct xe_guc *guc, u32 key,
 				       u32 *value, u32 value_len)
 {
@@ -1183,7 +1208,7 @@ static void vf_post_migration_abort(struct xe_gt *gt)
 	xe_guc_submit_pause_abort(&gt->uc.guc);
 }
 
-static int vf_post_migration_notify_resfix_done(struct xe_gt *gt)
+static int vf_post_migration_notify_resfix_done(struct xe_gt *gt, u16 marker)
 {
 	bool skip_resfix = false;
 
@@ -1206,14 +1231,32 @@ static int vf_post_migration_notify_resfix_done(struct xe_gt *gt)
 	 */
 	xe_irq_resume(gt_to_xe(gt));
 
-	return vf_notify_resfix_done(gt);
+	return vf_notify_resfix_done(gt, marker);
+}
+
+/*
+ * Increment the startup marker again if it overflows, since GUC
+ * requires a non-zero marker to be set.
+ */
+static u16 vf_post_migration_resfix_start_marker(struct xe_gt *gt)
+{
+	u16 marker;
+
+	xe_gt_assert(gt, IS_SRIOV_VF(gt_to_xe(gt)));
+
+	marker = ++gt->sriov.vf.migration.resfix_marker;
+	if (unlikely(!marker))
+		marker = ++gt->sriov.vf.migration.resfix_marker;
+
+	return marker;
 }
 
 static void vf_post_migration_recovery(struct xe_gt *gt)
 {
 	struct xe_device *xe = gt_to_xe(gt);
-	int err;
+	u16 marker;
 	bool retry;
+	int err;
 
 	xe_gt_sriov_dbg(gt, "migration recovery in progress\n");
 
@@ -1227,13 +1270,19 @@ static void vf_post_migration_recovery(struct xe_gt *gt)
 		goto fail;
 	}
 
+	marker = vf_post_migration_resfix_start_marker(gt);
+
+	err = vf_notify_resfix_start(gt, marker);
+	if (err)
+		goto fail;
+
 	err = vf_post_migration_fixups(gt);
 	if (err)
 		goto fail;
 
 	vf_post_migration_rearm(gt);
 
-	err = vf_post_migration_notify_resfix_done(gt);
+	err = vf_post_migration_notify_resfix_done(gt, marker);
 	if (err && err != -EAGAIN)
 		goto fail;
 
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h b/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h
index 420b0e6089de..66c0062a42c6 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h
@@ -52,6 +52,11 @@ struct xe_gt_sriov_vf_migration {
 	wait_queue_head_t wq;
 	/** @scratch: Scratch memory for VF recovery */
 	void *scratch;
+	/**
+	 * @resfix_marker: Marker sent on start and on end of post-migration
+	 * steps.
+	 */
+	u16 resfix_marker;
 	/** @recovery_teardown: VF post migration recovery is being torn down */
 	bool recovery_teardown;
 	/** @recovery_queued: VF post migration recovery in queued */
diff --git a/drivers/gpu/drm/xe/xe_sriov_vf.c b/drivers/gpu/drm/xe/xe_sriov_vf.c
index 13cacdbbf2d2..2994b233e0cf 100644
--- a/drivers/gpu/drm/xe/xe_sriov_vf.c
+++ b/drivers/gpu/drm/xe/xe_sriov_vf.c
@@ -49,11 +49,13 @@
  *
  * As soon as Virtual GPU of the VM starts, the VF driver within receives
  * the MIGRATED interrupt and schedules post-migration recovery worker.
- * That worker queries GuC for new provisioning (using MMIO communication),
+ * That worker sends `VF2GUC_RESFIX_START` action along with non-zero
+ * marker, queries GuC for new provisioning (using MMIO communication),
  * and applies fixups to any non-virtualized resources used by the VF.
  *
  * When the VF driver is ready to continue operation on the newly connected
- * hardware, it sends `VF2GUC_NOTIFY_RESFIX_DONE` which causes it to
+ * hardware, it sends `VF2GUC_RESFIX_DONE` action along with the same
+ * marker which was sent with `VF2GUC_RESFIX_START` which causes it to
  * enter the long awaited `VF_RUNNING` state, and therefore start handling
  * CTB messages and scheduling workloads from the VF::
  *
@@ -102,19 +104,26 @@
  *      |                              [ ]        new VF provisioning  [ ]
  *      |                              [ ]---------------------------> [ ]
  *      |                               |                              [ ]
+ *      |                               |   VF2GUC_RESFIX_START        [ ]
+ *      |                              [ ] <---------------------------[ ]
+ *      |                              [ ]                             [ ]
+ *      |                              [ ]                     success [ ]
+ *      |                              [ ]---------------------------> [ ]
  *      |                               |       VF driver applies post [ ]
  *      |                               |      migration fixups -------[ ]
  *      |                               |                       |      [ ]
  *      |                               |                       -----> [ ]
  *      |                               |                              [ ]
- *      |                               |    VF2GUC_NOTIFY_RESFIX_DONE [ ]
+ *      |                               |    VF2GUC_RESFIX_DONE        [ ]
  *      |                              [ ] <---------------------------[ ]
  *      |                              [ ]                             [ ]
  *      |                              [ ]  GuC sets new VF state to   [ ]
- *      |                              [ ]------- VF_RUNNING           [ ]
- *      |                              [ ]      |                      [ ]
+ *      |                              [ ]------- VF_RUNNING on marker [ ]
+ *      |                              [ ]      |  match               [ ]
  *      |                              [ ] <-----                      [ ]
- *      |                              [ ]                     success [ ]
+ *      |                              [ ]   success (on marker match) [ ]
+ *      |                              [ ]---------------------------> [ ]
+ *      |                              [ ]  error (on marker mismatch) [ ]
  *      |                              [ ]---------------------------> [ ]
  *      |                               |                               |
  *      |                               |                               |
-- 
2.51.0


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

* [PATCH v5 3/3] drm/xe/vf: Add debugfs entries to test VF double migration
  2025-11-20 14:51 [PATCH v5 0/3] VF double migration Satyanarayana K V P
  2025-11-20 14:51 ` [PATCH v5 1/3] drm/xe/vf: Enable VF migration only on supported GuC versions Satyanarayana K V P
  2025-11-20 14:52 ` [PATCH v5 2/3] drm/xe/vf: Introduce RESFIX start marker support Satyanarayana K V P
@ 2025-11-20 14:52 ` Satyanarayana K V P
  2025-11-20 21:53   ` Michal Wajdeczko
  2025-11-20 16:01 ` ✓ CI.KUnit: success for VF double migration (rev5) Patchwork
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 11+ messages in thread
From: Satyanarayana K V P @ 2025-11-20 14:52 UTC (permalink / raw)
  To: intel-xe; +Cc: Satyanarayana K V P, Michal Wajdeczko, Matthew Brost, Tomasz Lis

VF migration sends a marker to the GUC before resource fixups begin,
and repeats the marker with the RESFIX_DONE notification. This prevents
the GUC from submitting jobs during double migration events.

To reliably test double migration, a second migration must be triggered
while fixups from the first migration are still in progress. Since fixups
complete quickly, reproducing this scenario is difficult. Introduce
debugfs controls to add delays in the post-fixup phase, creating a
deterministic window for subsequent migrations.

New debugfs entries:
	/sys/kernel/debug/dri/<card>/
	├── gt0
	│   ├── vf
	│   │   ├── resfix_stoppers

- resfix_stoppers: Predefined checkpoints that allow the migration process
to pause at specific stages. The stages are given below.

VF_MIGRATION_WAIT_BEFORE_RESFIX_START	- BIT(0)
VF_MIGRATION_WAIT_BEFORE_FIXUPS		- BIT(1)
VF_MIGRATION_WAIT_BEFORE_RESTART_JOBS	- BIT(2)
VF_MIGRATION_WAIT_BEFORE_RESFIX_DONE	- BIT(3)

Each state will pause with a 1-second delay per iteration, continuing until
its corresponding bit is cleared or a maximum of 10 iterations is reached.

Signed-off-by: Satyanarayana K V P <satyanarayana.k.v.p@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Tomasz Lis <tomasz.lis@intel.com>

---
V4 -> V5:
- Updated debugfs entries (Michal W).

V3 -> V4:
- New commit

V2 -> V3:
- None.

V1 -> V2:
- None.
---
 drivers/gpu/drm/xe/xe_gt_sriov_vf.c         | 37 +++++++++++++++++++++
 drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.c |  5 +++
 drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h   |  8 +++++
 3 files changed, 50 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
index 1cd3d8204c15..0f25091f4949 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
@@ -5,6 +5,7 @@
 
 #include <linux/bitfield.h>
 #include <linux/bsearch.h>
+#include <linux/delay.h>
 
 #include <drm/drm_managed.h>
 #include <drm/drm_print.h>
@@ -1234,6 +1235,34 @@ static int vf_post_migration_notify_resfix_done(struct xe_gt *gt, u16 marker)
 	return vf_notify_resfix_done(gt, marker);
 }
 
+#define VF_MIGRATION_WAIT_NO_WAIT			0
+#define VF_MIGRATION_WAIT_BEFORE_RESFIX_START		BIT(0)
+#define VF_MIGRATION_WAIT_BEFORE_FIXUPS		BIT(1)
+#define VF_MIGRATION_WAIT_BEFORE_RESTART_JOBS		BIT(2)
+#define VF_MIGRATION_WAIT_BEFORE_RESFIX_DONE		BIT(3)
+
+#define VF_MIGRATION_WAIT_DELAY_PER_ITER_IN_MS		1000
+#define VF_MIGRATION_WAIT_DELAY_MAX_ITERS		10
+
+#ifdef CONFIG_DRM_XE_DEBUG
+static inline void vf_post_migration_inject_wait(struct xe_gt *gt, int wait)
+{
+	uint delay_ms = VF_MIGRATION_WAIT_DELAY_PER_ITER_IN_MS;
+	int max_delay_iter = VF_MIGRATION_WAIT_DELAY_MAX_ITERS;
+
+	while ((gt->sriov.vf.migration.debug.resfix_stoppers &  wait) &&
+	       max_delay_iter--) {
+		xe_gt_dbg(gt,
+			  "*TESTING* injecting delay resfix_stoppers = 0x%x, remaining iters = %d\n",
+			  gt->sriov.vf.migration.debug.resfix_stoppers, max_delay_iter);
+
+		msleep(delay_ms);
+	}
+}
+#else
+static inline void vf_post_migration_inject_wait(struct xe_gt *gt, int wait) { }
+#endif
+
 /*
  * Increment the startup marker again if it overflows, since GUC
  * requires a non-zero marker to be set.
@@ -1270,18 +1299,26 @@ static void vf_post_migration_recovery(struct xe_gt *gt)
 		goto fail;
 	}
 
+	vf_post_migration_inject_wait(gt, VF_MIGRATION_WAIT_BEFORE_RESFIX_START);
+
 	marker = vf_post_migration_resfix_start_marker(gt);
 
 	err = vf_notify_resfix_start(gt, marker);
 	if (err)
 		goto fail;
 
+	vf_post_migration_inject_wait(gt, VF_MIGRATION_WAIT_BEFORE_FIXUPS);
+
 	err = vf_post_migration_fixups(gt);
 	if (err)
 		goto fail;
 
+	vf_post_migration_inject_wait(gt, VF_MIGRATION_WAIT_BEFORE_RESTART_JOBS);
+
 	vf_post_migration_rearm(gt);
 
+	vf_post_migration_inject_wait(gt, VF_MIGRATION_WAIT_BEFORE_RESFIX_DONE);
+
 	err = vf_post_migration_notify_resfix_done(gt, marker);
 	if (err && err != -EAGAIN)
 		goto fail;
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.c
index 2ed5b6780d30..66d5ffd0e371 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.c
@@ -69,4 +69,9 @@ void xe_gt_sriov_vf_debugfs_register(struct xe_gt *gt, struct dentry *root)
 	vfdentry->d_inode->i_private = gt;
 
 	drm_debugfs_create_files(vf_info, ARRAY_SIZE(vf_info), vfdentry, minor);
+
+	if (IS_ENABLED(CONFIG_DRM_XE_DEBUG)) {
+		debugfs_create_x8("resfix_stoppers", 0600, vfdentry,
+				  &gt->sriov.vf.migration.debug.resfix_stoppers);
+	}
 }
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h b/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h
index 66c0062a42c6..3ece00f74e46 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h
@@ -52,6 +52,14 @@ struct xe_gt_sriov_vf_migration {
 	wait_queue_head_t wq;
 	/** @scratch: Scratch memory for VF recovery */
 	void *scratch;
+	/** @debug: Debug hooks for delaying migration */
+	struct {
+		/**
+		 * @debug.resfix_stoppers: Stop and wait at different stages
+		 * during post migration recovery
+		 */
+		u8 resfix_stoppers;
+	} debug;
 	/**
 	 * @resfix_marker: Marker sent on start and on end of post-migration
 	 * steps.
-- 
2.51.0


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

* ✓ CI.KUnit: success for VF double migration (rev5)
  2025-11-20 14:51 [PATCH v5 0/3] VF double migration Satyanarayana K V P
                   ` (2 preceding siblings ...)
  2025-11-20 14:52 ` [PATCH v5 3/3] drm/xe/vf: Add debugfs entries to test VF double migration Satyanarayana K V P
@ 2025-11-20 16:01 ` Patchwork
  2025-11-20 16:40 ` ✓ Xe.CI.BAT: " Patchwork
  2025-11-20 21:10 ` ✗ Xe.CI.Full: failure " Patchwork
  5 siblings, 0 replies; 11+ messages in thread
From: Patchwork @ 2025-11-20 16:01 UTC (permalink / raw)
  To: Satyanarayana K V P; +Cc: intel-xe

== Series Details ==

Series: VF double migration (rev5)
URL   : https://patchwork.freedesktop.org/series/156339/
State : success

== Summary ==

+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[16:00:29] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[16:00:33] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[16:01:04] Starting KUnit Kernel (1/1)...
[16:01:04] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[16:01:04] ================== guc_buf (11 subtests) ===================
[16:01:04] [PASSED] test_smallest
[16:01:04] [PASSED] test_largest
[16:01:04] [PASSED] test_granular
[16:01:04] [PASSED] test_unique
[16:01:04] [PASSED] test_overlap
[16:01:04] [PASSED] test_reusable
[16:01:04] [PASSED] test_too_big
[16:01:04] [PASSED] test_flush
[16:01:04] [PASSED] test_lookup
[16:01:04] [PASSED] test_data
[16:01:04] [PASSED] test_class
[16:01:04] ===================== [PASSED] guc_buf =====================
[16:01:04] =================== guc_dbm (7 subtests) ===================
[16:01:04] [PASSED] test_empty
[16:01:04] [PASSED] test_default
[16:01:04] ======================== test_size  ========================
[16:01:04] [PASSED] 4
[16:01:04] [PASSED] 8
[16:01:04] [PASSED] 32
[16:01:04] [PASSED] 256
[16:01:04] ==================== [PASSED] test_size ====================
[16:01:04] ======================= test_reuse  ========================
[16:01:04] [PASSED] 4
[16:01:04] [PASSED] 8
[16:01:04] [PASSED] 32
[16:01:04] [PASSED] 256
[16:01:04] =================== [PASSED] test_reuse ====================
[16:01:04] =================== test_range_overlap  ====================
[16:01:04] [PASSED] 4
[16:01:04] [PASSED] 8
[16:01:04] [PASSED] 32
[16:01:04] [PASSED] 256
[16:01:04] =============== [PASSED] test_range_overlap ================
[16:01:04] =================== test_range_compact  ====================
[16:01:04] [PASSED] 4
[16:01:04] [PASSED] 8
[16:01:04] [PASSED] 32
[16:01:04] [PASSED] 256
[16:01:04] =============== [PASSED] test_range_compact ================
[16:01:04] ==================== test_range_spare  =====================
[16:01:04] [PASSED] 4
[16:01:04] [PASSED] 8
[16:01:04] [PASSED] 32
[16:01:04] [PASSED] 256
[16:01:04] ================ [PASSED] test_range_spare =================
[16:01:04] ===================== [PASSED] guc_dbm =====================
[16:01:04] =================== guc_idm (6 subtests) ===================
[16:01:04] [PASSED] bad_init
[16:01:04] [PASSED] no_init
[16:01:04] [PASSED] init_fini
[16:01:04] [PASSED] check_used
[16:01:04] [PASSED] check_quota
[16:01:04] [PASSED] check_all
[16:01:04] ===================== [PASSED] guc_idm =====================
[16:01:04] ================== no_relay (3 subtests) ===================
[16:01:04] [PASSED] xe_drops_guc2pf_if_not_ready
[16:01:04] [PASSED] xe_drops_guc2vf_if_not_ready
[16:01:04] [PASSED] xe_rejects_send_if_not_ready
[16:01:04] ==================== [PASSED] no_relay =====================
[16:01:04] ================== pf_relay (14 subtests) ==================
[16:01:04] [PASSED] pf_rejects_guc2pf_too_short
[16:01:04] [PASSED] pf_rejects_guc2pf_too_long
[16:01:04] [PASSED] pf_rejects_guc2pf_no_payload
[16:01:04] [PASSED] pf_fails_no_payload
[16:01:04] [PASSED] pf_fails_bad_origin
[16:01:04] [PASSED] pf_fails_bad_type
[16:01:04] [PASSED] pf_txn_reports_error
[16:01:04] [PASSED] pf_txn_sends_pf2guc
[16:01:04] [PASSED] pf_sends_pf2guc
[16:01:04] [SKIPPED] pf_loopback_nop
[16:01:04] [SKIPPED] pf_loopback_echo
[16:01:04] [SKIPPED] pf_loopback_fail
[16:01:04] [SKIPPED] pf_loopback_busy
[16:01:04] [SKIPPED] pf_loopback_retry
[16:01:04] ==================== [PASSED] pf_relay =====================
[16:01:04] ================== vf_relay (3 subtests) ===================
[16:01:04] [PASSED] vf_rejects_guc2vf_too_short
[16:01:04] [PASSED] vf_rejects_guc2vf_too_long
[16:01:04] [PASSED] vf_rejects_guc2vf_no_payload
[16:01:04] ==================== [PASSED] vf_relay =====================
[16:01:04] ================ pf_gt_config (6 subtests) =================
[16:01:04] [PASSED] fair_contexts_1vf
[16:01:04] [PASSED] fair_doorbells_1vf
[16:01:04] [PASSED] fair_ggtt_1vf
[16:01:04] ====================== fair_contexts  ======================
[16:01:04] [PASSED] 1 VF
[16:01:04] [PASSED] 2 VFs
[16:01:04] [PASSED] 3 VFs
[16:01:04] [PASSED] 4 VFs
[16:01:04] [PASSED] 5 VFs
[16:01:04] [PASSED] 6 VFs
[16:01:04] [PASSED] 7 VFs
[16:01:04] [PASSED] 8 VFs
[16:01:04] [PASSED] 9 VFs
[16:01:04] [PASSED] 10 VFs
[16:01:04] [PASSED] 11 VFs
[16:01:04] [PASSED] 12 VFs
[16:01:04] [PASSED] 13 VFs
[16:01:04] [PASSED] 14 VFs
[16:01:04] [PASSED] 15 VFs
[16:01:04] [PASSED] 16 VFs
[16:01:04] [PASSED] 17 VFs
[16:01:04] [PASSED] 18 VFs
[16:01:04] [PASSED] 19 VFs
[16:01:04] [PASSED] 20 VFs
[16:01:04] [PASSED] 21 VFs
[16:01:04] [PASSED] 22 VFs
[16:01:04] [PASSED] 23 VFs
[16:01:04] [PASSED] 24 VFs
[16:01:04] [PASSED] 25 VFs
[16:01:04] [PASSED] 26 VFs
[16:01:04] [PASSED] 27 VFs
[16:01:04] [PASSED] 28 VFs
[16:01:04] [PASSED] 29 VFs
[16:01:04] [PASSED] 30 VFs
[16:01:04] [PASSED] 31 VFs
[16:01:04] [PASSED] 32 VFs
[16:01:04] [PASSED] 33 VFs
[16:01:04] [PASSED] 34 VFs
[16:01:04] [PASSED] 35 VFs
[16:01:04] [PASSED] 36 VFs
[16:01:04] [PASSED] 37 VFs
[16:01:04] [PASSED] 38 VFs
[16:01:04] [PASSED] 39 VFs
[16:01:04] [PASSED] 40 VFs
[16:01:04] [PASSED] 41 VFs
[16:01:04] [PASSED] 42 VFs
[16:01:04] [PASSED] 43 VFs
[16:01:04] [PASSED] 44 VFs
[16:01:04] [PASSED] 45 VFs
[16:01:04] [PASSED] 46 VFs
[16:01:04] [PASSED] 47 VFs
[16:01:04] [PASSED] 48 VFs
[16:01:04] [PASSED] 49 VFs
[16:01:04] [PASSED] 50 VFs
[16:01:04] [PASSED] 51 VFs
[16:01:04] [PASSED] 52 VFs
[16:01:04] [PASSED] 53 VFs
[16:01:04] [PASSED] 54 VFs
[16:01:04] [PASSED] 55 VFs
[16:01:04] [PASSED] 56 VFs
[16:01:04] [PASSED] 57 VFs
[16:01:04] [PASSED] 58 VFs
[16:01:04] [PASSED] 59 VFs
[16:01:04] [PASSED] 60 VFs
[16:01:04] [PASSED] 61 VFs
[16:01:04] [PASSED] 62 VFs
[16:01:04] [PASSED] 63 VFs
[16:01:04] ================== [PASSED] fair_contexts ==================
[16:01:04] ===================== fair_doorbells  ======================
[16:01:04] [PASSED] 1 VF
[16:01:04] [PASSED] 2 VFs
[16:01:04] [PASSED] 3 VFs
[16:01:04] [PASSED] 4 VFs
[16:01:04] [PASSED] 5 VFs
[16:01:04] [PASSED] 6 VFs
[16:01:04] [PASSED] 7 VFs
[16:01:04] [PASSED] 8 VFs
[16:01:04] [PASSED] 9 VFs
[16:01:04] [PASSED] 10 VFs
[16:01:04] [PASSED] 11 VFs
[16:01:04] [PASSED] 12 VFs
[16:01:04] [PASSED] 13 VFs
[16:01:04] [PASSED] 14 VFs
[16:01:04] [PASSED] 15 VFs
[16:01:04] [PASSED] 16 VFs
[16:01:04] [PASSED] 17 VFs
[16:01:04] [PASSED] 18 VFs
[16:01:04] [PASSED] 19 VFs
[16:01:04] [PASSED] 20 VFs
[16:01:04] [PASSED] 21 VFs
[16:01:04] [PASSED] 22 VFs
[16:01:04] [PASSED] 23 VFs
[16:01:04] [PASSED] 24 VFs
[16:01:04] [PASSED] 25 VFs
[16:01:04] [PASSED] 26 VFs
[16:01:04] [PASSED] 27 VFs
[16:01:04] [PASSED] 28 VFs
[16:01:04] [PASSED] 29 VFs
[16:01:04] [PASSED] 30 VFs
[16:01:04] [PASSED] 31 VFs
[16:01:04] [PASSED] 32 VFs
[16:01:04] [PASSED] 33 VFs
[16:01:04] [PASSED] 34 VFs
[16:01:04] [PASSED] 35 VFs
[16:01:04] [PASSED] 36 VFs
[16:01:04] [PASSED] 37 VFs
[16:01:04] [PASSED] 38 VFs
[16:01:04] [PASSED] 39 VFs
[16:01:04] [PASSED] 40 VFs
[16:01:04] [PASSED] 41 VFs
[16:01:04] [PASSED] 42 VFs
[16:01:04] [PASSED] 43 VFs
[16:01:04] [PASSED] 44 VFs
[16:01:04] [PASSED] 45 VFs
[16:01:04] [PASSED] 46 VFs
[16:01:04] [PASSED] 47 VFs
[16:01:04] [PASSED] 48 VFs
[16:01:04] [PASSED] 49 VFs
[16:01:04] [PASSED] 50 VFs
[16:01:04] [PASSED] 51 VFs
[16:01:04] [PASSED] 52 VFs
[16:01:04] [PASSED] 53 VFs
[16:01:04] [PASSED] 54 VFs
[16:01:04] [PASSED] 55 VFs
[16:01:04] [PASSED] 56 VFs
[16:01:04] [PASSED] 57 VFs
[16:01:04] [PASSED] 58 VFs
[16:01:04] [PASSED] 59 VFs
[16:01:04] [PASSED] 60 VFs
[16:01:04] [PASSED] 61 VFs
[16:01:04] [PASSED] 62 VFs
[16:01:04] [PASSED] 63 VFs
[16:01:04] ================= [PASSED] fair_doorbells ==================
[16:01:04] ======================== fair_ggtt  ========================
[16:01:04] [PASSED] 1 VF
[16:01:04] [PASSED] 2 VFs
[16:01:04] [PASSED] 3 VFs
[16:01:04] [PASSED] 4 VFs
[16:01:04] [PASSED] 5 VFs
[16:01:04] [PASSED] 6 VFs
[16:01:04] [PASSED] 7 VFs
[16:01:04] [PASSED] 8 VFs
[16:01:04] [PASSED] 9 VFs
[16:01:04] [PASSED] 10 VFs
[16:01:04] [PASSED] 11 VFs
[16:01:04] [PASSED] 12 VFs
[16:01:04] [PASSED] 13 VFs
[16:01:04] [PASSED] 14 VFs
[16:01:04] [PASSED] 15 VFs
[16:01:04] [PASSED] 16 VFs
[16:01:04] [PASSED] 17 VFs
[16:01:04] [PASSED] 18 VFs
[16:01:04] [PASSED] 19 VFs
[16:01:04] [PASSED] 20 VFs
[16:01:04] [PASSED] 21 VFs
[16:01:04] [PASSED] 22 VFs
[16:01:04] [PASSED] 23 VFs
[16:01:04] [PASSED] 24 VFs
[16:01:04] [PASSED] 25 VFs
[16:01:04] [PASSED] 26 VFs
[16:01:04] [PASSED] 27 VFs
[16:01:04] [PASSED] 28 VFs
[16:01:04] [PASSED] 29 VFs
[16:01:04] [PASSED] 30 VFs
[16:01:04] [PASSED] 31 VFs
[16:01:04] [PASSED] 32 VFs
[16:01:04] [PASSED] 33 VFs
[16:01:04] [PASSED] 34 VFs
[16:01:04] [PASSED] 35 VFs
[16:01:04] [PASSED] 36 VFs
[16:01:04] [PASSED] 37 VFs
[16:01:04] [PASSED] 38 VFs
[16:01:04] [PASSED] 39 VFs
[16:01:04] [PASSED] 40 VFs
[16:01:04] [PASSED] 41 VFs
[16:01:04] [PASSED] 42 VFs
[16:01:04] [PASSED] 43 VFs
[16:01:04] [PASSED] 44 VFs
[16:01:04] [PASSED] 45 VFs
[16:01:04] [PASSED] 46 VFs
[16:01:04] [PASSED] 47 VFs
[16:01:04] [PASSED] 48 VFs
[16:01:04] [PASSED] 49 VFs
[16:01:04] [PASSED] 50 VFs
[16:01:04] [PASSED] 51 VFs
[16:01:04] [PASSED] 52 VFs
[16:01:04] [PASSED] 53 VFs
[16:01:04] [PASSED] 54 VFs
[16:01:04] [PASSED] 55 VFs
[16:01:04] [PASSED] 56 VFs
[16:01:04] [PASSED] 57 VFs
[16:01:04] [PASSED] 58 VFs
[16:01:04] [PASSED] 59 VFs
[16:01:04] [PASSED] 60 VFs
[16:01:04] [PASSED] 61 VFs
[16:01:04] [PASSED] 62 VFs
[16:01:04] [PASSED] 63 VFs
[16:01:04] ==================== [PASSED] fair_ggtt ====================
[16:01:04] ================== [PASSED] pf_gt_config ===================
[16:01:04] ===================== lmtt (1 subtest) =====================
[16:01:04] ======================== test_ops  =========================
[16:01:04] [PASSED] 2-level
[16:01:04] [PASSED] multi-level
[16:01:04] ==================== [PASSED] test_ops =====================
[16:01:04] ====================== [PASSED] lmtt =======================
[16:01:04] ================= pf_service (11 subtests) =================
[16:01:04] [PASSED] pf_negotiate_any
[16:01:04] [PASSED] pf_negotiate_base_match
[16:01:04] [PASSED] pf_negotiate_base_newer
[16:01:04] [PASSED] pf_negotiate_base_next
[16:01:04] [SKIPPED] pf_negotiate_base_older
[16:01:04] [PASSED] pf_negotiate_base_prev
[16:01:04] [PASSED] pf_negotiate_latest_match
[16:01:04] [PASSED] pf_negotiate_latest_newer
[16:01:04] [PASSED] pf_negotiate_latest_next
[16:01:04] [SKIPPED] pf_negotiate_latest_older
[16:01:04] [SKIPPED] pf_negotiate_latest_prev
[16:01:04] =================== [PASSED] pf_service ====================
[16:01:04] ================= xe_guc_g2g (2 subtests) ==================
[16:01:04] ============== xe_live_guc_g2g_kunit_default  ==============
[16:01:04] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[16:01:04] ============== xe_live_guc_g2g_kunit_allmem  ===============
[16:01:04] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[16:01:04] =================== [SKIPPED] xe_guc_g2g ===================
[16:01:04] =================== xe_mocs (2 subtests) ===================
[16:01:04] ================ xe_live_mocs_kernel_kunit  ================
[16:01:04] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[16:01:04] ================ xe_live_mocs_reset_kunit  =================
[16:01:04] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[16:01:04] ==================== [SKIPPED] xe_mocs =====================
[16:01:04] ================= xe_migrate (2 subtests) ==================
[16:01:04] ================= xe_migrate_sanity_kunit  =================
[16:01:04] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[16:01:04] ================== xe_validate_ccs_kunit  ==================
[16:01:04] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[16:01:04] =================== [SKIPPED] xe_migrate ===================
[16:01:04] ================== xe_dma_buf (1 subtest) ==================
[16:01:04] ==================== xe_dma_buf_kunit  =====================
[16:01:04] ================ [SKIPPED] xe_dma_buf_kunit ================
[16:01:04] =================== [SKIPPED] xe_dma_buf ===================
[16:01:04] ================= xe_bo_shrink (1 subtest) =================
[16:01:04] =================== xe_bo_shrink_kunit  ====================
[16:01:04] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[16:01:04] ================== [SKIPPED] xe_bo_shrink ==================
[16:01:04] ==================== xe_bo (2 subtests) ====================
[16:01:04] ================== xe_ccs_migrate_kunit  ===================
[16:01:04] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[16:01:04] ==================== xe_bo_evict_kunit  ====================
[16:01:04] =============== [SKIPPED] xe_bo_evict_kunit ================
[16:01:04] ===================== [SKIPPED] xe_bo ======================
[16:01:04] ==================== args (11 subtests) ====================
[16:01:04] [PASSED] count_args_test
[16:01:04] [PASSED] call_args_example
[16:01:04] [PASSED] call_args_test
[16:01:04] [PASSED] drop_first_arg_example
[16:01:04] [PASSED] drop_first_arg_test
[16:01:04] [PASSED] first_arg_example
[16:01:04] [PASSED] first_arg_test
[16:01:04] [PASSED] last_arg_example
[16:01:04] [PASSED] last_arg_test
[16:01:04] [PASSED] pick_arg_example
[16:01:04] [PASSED] sep_comma_example
[16:01:04] ====================== [PASSED] args =======================
[16:01:04] =================== xe_pci (3 subtests) ====================
[16:01:04] ==================== check_graphics_ip  ====================
[16:01:04] [PASSED] 12.00 Xe_LP
[16:01:04] [PASSED] 12.10 Xe_LP+
[16:01:04] [PASSED] 12.55 Xe_HPG
[16:01:04] [PASSED] 12.60 Xe_HPC
[16:01:04] [PASSED] 12.70 Xe_LPG
[16:01:04] [PASSED] 12.71 Xe_LPG
[16:01:04] [PASSED] 12.74 Xe_LPG+
[16:01:04] [PASSED] 20.01 Xe2_HPG
[16:01:04] [PASSED] 20.02 Xe2_HPG
[16:01:04] [PASSED] 20.04 Xe2_LPG
[16:01:04] [PASSED] 30.00 Xe3_LPG
[16:01:04] [PASSED] 30.01 Xe3_LPG
[16:01:04] [PASSED] 30.03 Xe3_LPG
[16:01:04] [PASSED] 30.04 Xe3_LPG
[16:01:04] [PASSED] 30.05 Xe3_LPG
[16:01:04] [PASSED] 35.11 Xe3p_XPC
[16:01:04] ================ [PASSED] check_graphics_ip ================
[16:01:04] ===================== check_media_ip  ======================
[16:01:04] [PASSED] 12.00 Xe_M
[16:01:04] [PASSED] 12.55 Xe_HPM
[16:01:04] [PASSED] 13.00 Xe_LPM+
[16:01:04] [PASSED] 13.01 Xe2_HPM
[16:01:04] [PASSED] 20.00 Xe2_LPM
[16:01:04] [PASSED] 30.00 Xe3_LPM
[16:01:04] [PASSED] 30.02 Xe3_LPM
[16:01:04] [PASSED] 35.00 Xe3p_LPM
[16:01:04] [PASSED] 35.03 Xe3p_HPM
[16:01:04] ================= [PASSED] check_media_ip ==================
[16:01:04] =================== check_platform_desc  ===================
[16:01:04] [PASSED] 0x9A60 (TIGERLAKE)
[16:01:04] [PASSED] 0x9A68 (TIGERLAKE)
[16:01:04] [PASSED] 0x9A70 (TIGERLAKE)
[16:01:04] [PASSED] 0x9A40 (TIGERLAKE)
[16:01:04] [PASSED] 0x9A49 (TIGERLAKE)
[16:01:04] [PASSED] 0x9A59 (TIGERLAKE)
[16:01:04] [PASSED] 0x9A78 (TIGERLAKE)
[16:01:04] [PASSED] 0x9AC0 (TIGERLAKE)
[16:01:04] [PASSED] 0x9AC9 (TIGERLAKE)
[16:01:04] [PASSED] 0x9AD9 (TIGERLAKE)
[16:01:04] [PASSED] 0x9AF8 (TIGERLAKE)
[16:01:04] [PASSED] 0x4C80 (ROCKETLAKE)
[16:01:04] [PASSED] 0x4C8A (ROCKETLAKE)
[16:01:04] [PASSED] 0x4C8B (ROCKETLAKE)
[16:01:04] [PASSED] 0x4C8C (ROCKETLAKE)
[16:01:04] [PASSED] 0x4C90 (ROCKETLAKE)
[16:01:04] [PASSED] 0x4C9A (ROCKETLAKE)
[16:01:04] [PASSED] 0x4680 (ALDERLAKE_S)
[16:01:04] [PASSED] 0x4682 (ALDERLAKE_S)
[16:01:04] [PASSED] 0x4688 (ALDERLAKE_S)
[16:01:04] [PASSED] 0x468A (ALDERLAKE_S)
[16:01:04] [PASSED] 0x468B (ALDERLAKE_S)
[16:01:04] [PASSED] 0x4690 (ALDERLAKE_S)
[16:01:04] [PASSED] 0x4692 (ALDERLAKE_S)
[16:01:04] [PASSED] 0x4693 (ALDERLAKE_S)
[16:01:04] [PASSED] 0x46A0 (ALDERLAKE_P)
[16:01:04] [PASSED] 0x46A1 (ALDERLAKE_P)
[16:01:04] [PASSED] 0x46A2 (ALDERLAKE_P)
[16:01:04] [PASSED] 0x46A3 (ALDERLAKE_P)
[16:01:04] [PASSED] 0x46A6 (ALDERLAKE_P)
[16:01:04] [PASSED] 0x46A8 (ALDERLAKE_P)
[16:01:04] [PASSED] 0x46AA (ALDERLAKE_P)
[16:01:04] [PASSED] 0x462A (ALDERLAKE_P)
[16:01:04] [PASSED] 0x4626 (ALDERLAKE_P)
[16:01:04] [PASSED] 0x4628 (ALDERLAKE_P)
[16:01:04] [PASSED] 0x46B0 (ALDERLAKE_P)
stty: 'standard input': Inappropriate ioctl for device
[16:01:04] [PASSED] 0x46B1 (ALDERLAKE_P)
[16:01:04] [PASSED] 0x46B2 (ALDERLAKE_P)
[16:01:04] [PASSED] 0x46B3 (ALDERLAKE_P)
[16:01:04] [PASSED] 0x46C0 (ALDERLAKE_P)
[16:01:04] [PASSED] 0x46C1 (ALDERLAKE_P)
[16:01:04] [PASSED] 0x46C2 (ALDERLAKE_P)
[16:01:04] [PASSED] 0x46C3 (ALDERLAKE_P)
[16:01:04] [PASSED] 0x46D0 (ALDERLAKE_N)
[16:01:04] [PASSED] 0x46D1 (ALDERLAKE_N)
[16:01:04] [PASSED] 0x46D2 (ALDERLAKE_N)
[16:01:04] [PASSED] 0x46D3 (ALDERLAKE_N)
[16:01:04] [PASSED] 0x46D4 (ALDERLAKE_N)
[16:01:04] [PASSED] 0xA721 (ALDERLAKE_P)
[16:01:04] [PASSED] 0xA7A1 (ALDERLAKE_P)
[16:01:04] [PASSED] 0xA7A9 (ALDERLAKE_P)
[16:01:04] [PASSED] 0xA7AC (ALDERLAKE_P)
[16:01:04] [PASSED] 0xA7AD (ALDERLAKE_P)
[16:01:04] [PASSED] 0xA720 (ALDERLAKE_P)
[16:01:04] [PASSED] 0xA7A0 (ALDERLAKE_P)
[16:01:04] [PASSED] 0xA7A8 (ALDERLAKE_P)
[16:01:04] [PASSED] 0xA7AA (ALDERLAKE_P)
[16:01:04] [PASSED] 0xA7AB (ALDERLAKE_P)
[16:01:04] [PASSED] 0xA780 (ALDERLAKE_S)
[16:01:04] [PASSED] 0xA781 (ALDERLAKE_S)
[16:01:04] [PASSED] 0xA782 (ALDERLAKE_S)
[16:01:04] [PASSED] 0xA783 (ALDERLAKE_S)
[16:01:04] [PASSED] 0xA788 (ALDERLAKE_S)
[16:01:04] [PASSED] 0xA789 (ALDERLAKE_S)
[16:01:04] [PASSED] 0xA78A (ALDERLAKE_S)
[16:01:04] [PASSED] 0xA78B (ALDERLAKE_S)
[16:01:04] [PASSED] 0x4905 (DG1)
[16:01:04] [PASSED] 0x4906 (DG1)
[16:01:04] [PASSED] 0x4907 (DG1)
[16:01:04] [PASSED] 0x4908 (DG1)
[16:01:04] [PASSED] 0x4909 (DG1)
[16:01:04] [PASSED] 0x56C0 (DG2)
[16:01:04] [PASSED] 0x56C2 (DG2)
[16:01:04] [PASSED] 0x56C1 (DG2)
[16:01:04] [PASSED] 0x7D51 (METEORLAKE)
[16:01:04] [PASSED] 0x7DD1 (METEORLAKE)
[16:01:04] [PASSED] 0x7D41 (METEORLAKE)
[16:01:04] [PASSED] 0x7D67 (METEORLAKE)
[16:01:04] [PASSED] 0xB640 (METEORLAKE)
[16:01:04] [PASSED] 0x56A0 (DG2)
[16:01:04] [PASSED] 0x56A1 (DG2)
[16:01:04] [PASSED] 0x56A2 (DG2)
[16:01:04] [PASSED] 0x56BE (DG2)
[16:01:04] [PASSED] 0x56BF (DG2)
[16:01:04] [PASSED] 0x5690 (DG2)
[16:01:04] [PASSED] 0x5691 (DG2)
[16:01:04] [PASSED] 0x5692 (DG2)
[16:01:04] [PASSED] 0x56A5 (DG2)
[16:01:04] [PASSED] 0x56A6 (DG2)
[16:01:04] [PASSED] 0x56B0 (DG2)
[16:01:04] [PASSED] 0x56B1 (DG2)
[16:01:04] [PASSED] 0x56BA (DG2)
[16:01:04] [PASSED] 0x56BB (DG2)
[16:01:04] [PASSED] 0x56BC (DG2)
[16:01:04] [PASSED] 0x56BD (DG2)
[16:01:04] [PASSED] 0x5693 (DG2)
[16:01:04] [PASSED] 0x5694 (DG2)
[16:01:04] [PASSED] 0x5695 (DG2)
[16:01:04] [PASSED] 0x56A3 (DG2)
[16:01:04] [PASSED] 0x56A4 (DG2)
[16:01:04] [PASSED] 0x56B2 (DG2)
[16:01:04] [PASSED] 0x56B3 (DG2)
[16:01:04] [PASSED] 0x5696 (DG2)
[16:01:04] [PASSED] 0x5697 (DG2)
[16:01:04] [PASSED] 0xB69 (PVC)
[16:01:04] [PASSED] 0xB6E (PVC)
[16:01:04] [PASSED] 0xBD4 (PVC)
[16:01:04] [PASSED] 0xBD5 (PVC)
[16:01:04] [PASSED] 0xBD6 (PVC)
[16:01:04] [PASSED] 0xBD7 (PVC)
[16:01:04] [PASSED] 0xBD8 (PVC)
[16:01:04] [PASSED] 0xBD9 (PVC)
[16:01:04] [PASSED] 0xBDA (PVC)
[16:01:04] [PASSED] 0xBDB (PVC)
[16:01:04] [PASSED] 0xBE0 (PVC)
[16:01:04] [PASSED] 0xBE1 (PVC)
[16:01:04] [PASSED] 0xBE5 (PVC)
[16:01:04] [PASSED] 0x7D40 (METEORLAKE)
[16:01:04] [PASSED] 0x7D45 (METEORLAKE)
[16:01:04] [PASSED] 0x7D55 (METEORLAKE)
[16:01:04] [PASSED] 0x7D60 (METEORLAKE)
[16:01:04] [PASSED] 0x7DD5 (METEORLAKE)
[16:01:04] [PASSED] 0x6420 (LUNARLAKE)
[16:01:04] [PASSED] 0x64A0 (LUNARLAKE)
[16:01:04] [PASSED] 0x64B0 (LUNARLAKE)
[16:01:04] [PASSED] 0xE202 (BATTLEMAGE)
[16:01:04] [PASSED] 0xE209 (BATTLEMAGE)
[16:01:04] [PASSED] 0xE20B (BATTLEMAGE)
[16:01:04] [PASSED] 0xE20C (BATTLEMAGE)
[16:01:04] [PASSED] 0xE20D (BATTLEMAGE)
[16:01:04] [PASSED] 0xE210 (BATTLEMAGE)
[16:01:04] [PASSED] 0xE211 (BATTLEMAGE)
[16:01:04] [PASSED] 0xE212 (BATTLEMAGE)
[16:01:04] [PASSED] 0xE216 (BATTLEMAGE)
[16:01:04] [PASSED] 0xE220 (BATTLEMAGE)
[16:01:04] [PASSED] 0xE221 (BATTLEMAGE)
[16:01:04] [PASSED] 0xE222 (BATTLEMAGE)
[16:01:04] [PASSED] 0xE223 (BATTLEMAGE)
[16:01:04] [PASSED] 0xB080 (PANTHERLAKE)
[16:01:04] [PASSED] 0xB081 (PANTHERLAKE)
[16:01:04] [PASSED] 0xB082 (PANTHERLAKE)
[16:01:04] [PASSED] 0xB083 (PANTHERLAKE)
[16:01:04] [PASSED] 0xB084 (PANTHERLAKE)
[16:01:04] [PASSED] 0xB085 (PANTHERLAKE)
[16:01:04] [PASSED] 0xB086 (PANTHERLAKE)
[16:01:04] [PASSED] 0xB087 (PANTHERLAKE)
[16:01:04] [PASSED] 0xB08F (PANTHERLAKE)
[16:01:04] [PASSED] 0xB090 (PANTHERLAKE)
[16:01:04] [PASSED] 0xB0A0 (PANTHERLAKE)
[16:01:04] [PASSED] 0xB0B0 (PANTHERLAKE)
[16:01:04] [PASSED] 0xD740 (NOVALAKE_S)
[16:01:04] [PASSED] 0xD741 (NOVALAKE_S)
[16:01:04] [PASSED] 0xD742 (NOVALAKE_S)
[16:01:04] [PASSED] 0xD743 (NOVALAKE_S)
[16:01:04] [PASSED] 0xD744 (NOVALAKE_S)
[16:01:04] [PASSED] 0xD745 (NOVALAKE_S)
[16:01:04] [PASSED] 0x674C (CRESCENTISLAND)
[16:01:04] [PASSED] 0xFD80 (PANTHERLAKE)
[16:01:04] [PASSED] 0xFD81 (PANTHERLAKE)
[16:01:04] =============== [PASSED] check_platform_desc ===============
[16:01:04] ===================== [PASSED] xe_pci ======================
[16:01:04] =================== xe_rtp (2 subtests) ====================
[16:01:04] =============== xe_rtp_process_to_sr_tests  ================
[16:01:04] [PASSED] coalesce-same-reg
[16:01:04] [PASSED] no-match-no-add
[16:01:04] [PASSED] match-or
[16:01:04] [PASSED] match-or-xfail
[16:01:04] [PASSED] no-match-no-add-multiple-rules
[16:01:04] [PASSED] two-regs-two-entries
[16:01:04] [PASSED] clr-one-set-other
[16:01:04] [PASSED] set-field
[16:01:04] [PASSED] conflict-duplicate
[16:01:04] [PASSED] conflict-not-disjoint
[16:01:04] [PASSED] conflict-reg-type
[16:01:04] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[16:01:04] ================== xe_rtp_process_tests  ===================
[16:01:04] [PASSED] active1
[16:01:04] [PASSED] active2
[16:01:04] [PASSED] active-inactive
[16:01:04] [PASSED] inactive-active
[16:01:04] [PASSED] inactive-1st_or_active-inactive
[16:01:04] [PASSED] inactive-2nd_or_active-inactive
[16:01:04] [PASSED] inactive-last_or_active-inactive
[16:01:04] [PASSED] inactive-no_or_active-inactive
[16:01:04] ============== [PASSED] xe_rtp_process_tests ===============
[16:01:04] ===================== [PASSED] xe_rtp ======================
[16:01:04] ==================== xe_wa (1 subtest) =====================
[16:01:04] ======================== xe_wa_gt  =========================
[16:01:04] [PASSED] TIGERLAKE B0
[16:01:04] [PASSED] DG1 A0
[16:01:04] [PASSED] DG1 B0
[16:01:04] [PASSED] ALDERLAKE_S A0
[16:01:04] [PASSED] ALDERLAKE_S B0
[16:01:04] [PASSED] ALDERLAKE_S C0
[16:01:04] [PASSED] ALDERLAKE_S D0
[16:01:04] [PASSED] ALDERLAKE_P A0
[16:01:04] [PASSED] ALDERLAKE_P B0
[16:01:04] [PASSED] ALDERLAKE_P C0
[16:01:04] [PASSED] ALDERLAKE_S RPLS D0
[16:01:04] [PASSED] ALDERLAKE_P RPLU E0
[16:01:04] [PASSED] DG2 G10 C0
[16:01:04] [PASSED] DG2 G11 B1
[16:01:04] [PASSED] DG2 G12 A1
[16:01:04] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[16:01:04] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[16:01:04] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[16:01:04] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[16:01:04] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[16:01:04] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[16:01:04] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[16:01:04] ==================== [PASSED] xe_wa_gt =====================
[16:01:04] ====================== [PASSED] xe_wa ======================
[16:01:04] ============================================================
[16:01:04] Testing complete. Ran 510 tests: passed: 492, skipped: 18
[16:01:04] Elapsed time: 35.138s total, 4.196s configuring, 30.425s building, 0.464s running

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

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

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



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

* ✓ Xe.CI.BAT: success for VF double migration (rev5)
  2025-11-20 14:51 [PATCH v5 0/3] VF double migration Satyanarayana K V P
                   ` (3 preceding siblings ...)
  2025-11-20 16:01 ` ✓ CI.KUnit: success for VF double migration (rev5) Patchwork
@ 2025-11-20 16:40 ` Patchwork
  2025-11-20 21:10 ` ✗ Xe.CI.Full: failure " Patchwork
  5 siblings, 0 replies; 11+ messages in thread
From: Patchwork @ 2025-11-20 16:40 UTC (permalink / raw)
  To: Satyanarayana K V P; +Cc: intel-xe

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

== Series Details ==

Series: VF double migration (rev5)
URL   : https://patchwork.freedesktop.org/series/156339/
State : success

== Summary ==

CI Bug Log - changes from xe-4134-13909978d70fc4ded88b778a313b68ad86ba881a_BAT -> xe-pw-156339v5_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (13 -> 13)
------------------------------

  No changes in participating hosts

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

  Here are the changes found in xe-pw-156339v5_BAT that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@xe_waitfence@abstime:
    - bat-dg2-oem2:       [PASS][1] -> [TIMEOUT][2] ([Intel XE#6506])
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4134-13909978d70fc4ded88b778a313b68ad86ba881a/bat-dg2-oem2/igt@xe_waitfence@abstime.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/bat-dg2-oem2/igt@xe_waitfence@abstime.html

  
  [Intel XE#6506]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6506


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

  * Linux: xe-4134-13909978d70fc4ded88b778a313b68ad86ba881a -> xe-pw-156339v5

  IGT_8636: 254cd102396ff95d61f2ebe49fc09128878bf483 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-4134-13909978d70fc4ded88b778a313b68ad86ba881a: 13909978d70fc4ded88b778a313b68ad86ba881a
  xe-pw-156339v5: 156339v5

== Logs ==

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

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

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

* ✗ Xe.CI.Full: failure for VF double migration (rev5)
  2025-11-20 14:51 [PATCH v5 0/3] VF double migration Satyanarayana K V P
                   ` (4 preceding siblings ...)
  2025-11-20 16:40 ` ✓ Xe.CI.BAT: " Patchwork
@ 2025-11-20 21:10 ` Patchwork
  5 siblings, 0 replies; 11+ messages in thread
From: Patchwork @ 2025-11-20 21:10 UTC (permalink / raw)
  To: Satyanarayana K V P; +Cc: intel-xe

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

== Series Details ==

Series: VF double migration (rev5)
URL   : https://patchwork.freedesktop.org/series/156339/
State : failure

== Summary ==

CI Bug Log - changes from xe-4134-13909978d70fc4ded88b778a313b68ad86ba881a_FULL -> xe-pw-156339v5_FULL
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with xe-pw-156339v5_FULL absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in xe-pw-156339v5_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-156339v5_FULL:

### IGT changes ###

#### Possible regressions ####

  * igt@xe_eudebug_online@pagefault-read-stress:
    - shard-adlp:         NOTRUN -> [SKIP][1]
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@xe_eudebug_online@pagefault-read-stress.html

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

  Here are the changes found in xe-pw-156339v5_FULL that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip:
    - shard-adlp:         NOTRUN -> [SKIP][2] ([Intel XE#1124]) +1 other test skip
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-mtl-mc-ccs:
    - shard-adlp:         NOTRUN -> [SKIP][3] ([Intel XE#455] / [Intel XE#787]) +7 other tests skip
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@kms_ccs@crc-primary-basic-4-tiled-mtl-mc-ccs.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-mtl-mc-ccs@pipe-c-hdmi-a-1:
    - shard-adlp:         NOTRUN -> [SKIP][4] ([Intel XE#787]) +11 other tests skip
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@kms_ccs@crc-primary-basic-4-tiled-mtl-mc-ccs@pipe-c-hdmi-a-1.html

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-d-hdmi-a-6:
    - shard-dg2-set2:     NOTRUN -> [INCOMPLETE][5] ([Intel XE#1727] / [Intel XE#2705] / [Intel XE#3113] / [Intel XE#4212])
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-dg2-464/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-d-hdmi-a-6.html

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-d-dp-4:
    - shard-dg2-set2:     NOTRUN -> [INCOMPLETE][6] ([Intel XE#6168] / [i915#14968])
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-dg2-463/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-d-dp-4.html

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-d-hdmi-a-6:
    - shard-dg2-set2:     NOTRUN -> [DMESG-WARN][7] ([Intel XE#1727] / [Intel XE#3113])
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-dg2-463/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-d-hdmi-a-6.html

  * igt@kms_chamelium_frames@hdmi-crc-single:
    - shard-adlp:         NOTRUN -> [SKIP][8] ([Intel XE#373]) +1 other test skip
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@kms_chamelium_frames@hdmi-crc-single.html

  * igt@kms_dirtyfb@psr-dirtyfb-ioctl:
    - shard-adlp:         NOTRUN -> [SKIP][9] ([Intel XE#455]) +4 other tests skip
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@kms_dirtyfb@psr-dirtyfb-ioctl.html

  * igt@kms_flip@2x-flip-vs-dpms:
    - shard-adlp:         NOTRUN -> [SKIP][10] ([Intel XE#310]) +1 other test skip
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@kms_flip@2x-flip-vs-dpms.html

  * igt@kms_flip@basic-plain-flip@b-hdmi-a1:
    - shard-adlp:         [PASS][11] -> [DMESG-WARN][12] ([Intel XE#4543]) +1 other test dmesg-warn
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4134-13909978d70fc4ded88b778a313b68ad86ba881a/shard-adlp-2/igt@kms_flip@basic-plain-flip@b-hdmi-a1.html
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-4/igt@kms_flip@basic-plain-flip@b-hdmi-a1.html

  * igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-mmap-wc:
    - shard-adlp:         NOTRUN -> [SKIP][13] ([Intel XE#651])
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-blt:
    - shard-adlp:         NOTRUN -> [SKIP][14] ([Intel XE#656]) +5 other tests skip
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@psr-indfb-scaledprimary:
    - shard-adlp:         NOTRUN -> [SKIP][15] ([Intel XE#653]) +2 other tests skip
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@kms_frontbuffer_tracking@psr-indfb-scaledprimary.html

  * igt@kms_joiner@invalid-modeset-force-ultra-joiner:
    - shard-adlp:         NOTRUN -> [SKIP][16] ([Intel XE#2925])
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@kms_joiner@invalid-modeset-force-ultra-joiner.html

  * igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
    - shard-adlp:         NOTRUN -> [SKIP][17] ([Intel XE#356])
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-hdmi-a-1:
    - shard-adlp:         [PASS][18] -> [DMESG-WARN][19] ([Intel XE#2953] / [Intel XE#4173]) +2 other tests dmesg-warn
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4134-13909978d70fc4ded88b778a313b68ad86ba881a/shard-adlp-6/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-hdmi-a-1.html
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-2/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-hdmi-a-1.html

  * igt@kms_psr2_sf@fbc-pr-overlay-plane-update-sf-dmg-area:
    - shard-adlp:         NOTRUN -> [SKIP][20] ([Intel XE#1406] / [Intel XE#1489]) +1 other test skip
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@kms_psr2_sf@fbc-pr-overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr@fbc-pr-no-drrs:
    - shard-adlp:         NOTRUN -> [SKIP][21] ([Intel XE#1406] / [Intel XE#2850] / [Intel XE#929]) +1 other test skip
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@kms_psr@fbc-pr-no-drrs.html

  * igt@xe_compute_preempt@compute-preempt-many:
    - shard-adlp:         NOTRUN -> [SKIP][22] ([Intel XE#6360])
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@xe_compute_preempt@compute-preempt-many.html

  * igt@xe_copy_basic@mem-set-linear-0x8fffe:
    - shard-adlp:         NOTRUN -> [SKIP][23] ([Intel XE#5503])
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@xe_copy_basic@mem-set-linear-0x8fffe.html

  * igt@xe_evict@evict-beng-large-multi-vm-cm:
    - shard-adlp:         NOTRUN -> [SKIP][24] ([Intel XE#261])
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@xe_evict@evict-beng-large-multi-vm-cm.html

  * igt@xe_evict_ccs@evict-overcommit-standalone-instantfree-reopen:
    - shard-adlp:         NOTRUN -> [SKIP][25] ([Intel XE#688])
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@xe_evict_ccs@evict-overcommit-standalone-instantfree-reopen.html

  * igt@xe_exec_basic@multigpu-once-basic:
    - shard-adlp:         NOTRUN -> [SKIP][26] ([Intel XE#1392] / [Intel XE#5575])
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@xe_exec_basic@multigpu-once-basic.html

  * igt@xe_exec_fault_mode@many-basic-imm:
    - shard-adlp:         NOTRUN -> [SKIP][27] ([Intel XE#288] / [Intel XE#5561]) +4 other tests skip
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@xe_exec_fault_mode@many-basic-imm.html

  * igt@xe_exec_mix_modes@exec-simple-batch-store-lr:
    - shard-adlp:         NOTRUN -> [SKIP][28] ([Intel XE#2360])
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@xe_exec_mix_modes@exec-simple-batch-store-lr.html

  * igt@xe_exec_system_allocator@many-execqueues-mmap-nomemset:
    - shard-adlp:         NOTRUN -> [SKIP][29] ([Intel XE#4915]) +45 other tests skip
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@xe_exec_system_allocator@many-execqueues-mmap-nomemset.html

  * igt@xe_exec_threads@threads-rebind:
    - shard-adlp:         [PASS][30] -> [ABORT][31] ([Intel XE#3970])
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4134-13909978d70fc4ded88b778a313b68ad86ba881a/shard-adlp-9/igt@xe_exec_threads@threads-rebind.html
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-6/igt@xe_exec_threads@threads-rebind.html

  * igt@xe_fault_injection@probe-fail-guc-xe_guc_ct_send_recv:
    - shard-adlp:         NOTRUN -> [ABORT][32] ([Intel XE#5466] / [Intel XE#5530])
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@xe_fault_injection@probe-fail-guc-xe_guc_ct_send_recv.html

  * igt@xe_oa@stress-open-close:
    - shard-adlp:         NOTRUN -> [SKIP][33] ([Intel XE#3573])
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@xe_oa@stress-open-close.html

  * igt@xe_pat@display-vs-wb-transient:
    - shard-adlp:         NOTRUN -> [SKIP][34] ([Intel XE#1337] / [Intel XE#5572])
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-9/igt@xe_pat@display-vs-wb-transient.html

  
#### Possible fixes ####

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-a-hdmi-a-6:
    - shard-dg2-set2:     [INCOMPLETE][35] ([Intel XE#1727] / [Intel XE#3113] / [Intel XE#6168]) -> [PASS][36]
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4134-13909978d70fc4ded88b778a313b68ad86ba881a/shard-dg2-435/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-a-hdmi-a-6.html
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-dg2-464/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-a-hdmi-a-6.html

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-b-dp-4:
    - shard-dg2-set2:     [INCOMPLETE][37] ([Intel XE#6168]) -> [PASS][38]
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4134-13909978d70fc4ded88b778a313b68ad86ba881a/shard-dg2-433/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-b-dp-4.html
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-dg2-463/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-b-dp-4.html

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-b-hdmi-a-6:
    - shard-dg2-set2:     [DMESG-WARN][39] ([Intel XE#1727] / [Intel XE#3113]) -> [PASS][40]
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4134-13909978d70fc4ded88b778a313b68ad86ba881a/shard-dg2-433/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-b-hdmi-a-6.html
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-dg2-463/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-b-hdmi-a-6.html

  * igt@kms_color@ctm-blue-to-red:
    - shard-adlp:         [DMESG-WARN][41] ([Intel XE#2953] / [Intel XE#4173]) -> [PASS][42] +5 other tests pass
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4134-13909978d70fc4ded88b778a313b68ad86ba881a/shard-adlp-2/igt@kms_color@ctm-blue-to-red.html
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-4/igt@kms_color@ctm-blue-to-red.html

  * igt@kms_flip@dpms-off-confusion:
    - shard-adlp:         [DMESG-WARN][43] ([Intel XE#4543]) -> [PASS][44] +1 other test pass
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4134-13909978d70fc4ded88b778a313b68ad86ba881a/shard-adlp-6/igt@kms_flip@dpms-off-confusion.html
   [44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-2/igt@kms_flip@dpms-off-confusion.html

  * igt@kms_flip@flip-vs-expired-vblank@c-edp1:
    - shard-lnl:          [FAIL][45] ([Intel XE#301] / [Intel XE#3149]) -> [PASS][46] +1 other test pass
   [45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4134-13909978d70fc4ded88b778a313b68ad86ba881a/shard-lnl-2/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html
   [46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html

  * igt@xe_pmu@engine-activity-accuracy-90@engine-drm_xe_engine_class_compute0:
    - shard-lnl:          [FAIL][47] ([Intel XE#6251]) -> [PASS][48] +3 other tests pass
   [47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4134-13909978d70fc4ded88b778a313b68ad86ba881a/shard-lnl-4/igt@xe_pmu@engine-activity-accuracy-90@engine-drm_xe_engine_class_compute0.html
   [48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-lnl-5/igt@xe_pmu@engine-activity-accuracy-90@engine-drm_xe_engine_class_compute0.html

  
#### Warnings ####

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs:
    - shard-dg2-set2:     [INCOMPLETE][49] ([Intel XE#1727] / [Intel XE#3113] / [Intel XE#4345] / [Intel XE#6168]) -> [INCOMPLETE][50] ([Intel XE#1727] / [Intel XE#2705] / [Intel XE#3113] / [Intel XE#4212] / [Intel XE#4345])
   [49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4134-13909978d70fc4ded88b778a313b68ad86ba881a/shard-dg2-435/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs.html
   [50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-dg2-464/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs.html

  * igt@xe_exec_reset@cm-cat-error:
    - shard-adlp:         [DMESG-WARN][51] ([Intel XE#3868]) -> [DMESG-FAIL][52] ([Intel XE#3868])
   [51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4134-13909978d70fc4ded88b778a313b68ad86ba881a/shard-adlp-9/igt@xe_exec_reset@cm-cat-error.html
   [52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156339v5/shard-adlp-6/igt@xe_exec_reset@cm-cat-error.html

  
  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [Intel XE#1337]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1337
  [Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
  [Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
  [Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
  [Intel XE#1727]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1727
  [Intel XE#2360]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2360
  [Intel XE#261]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/261
  [Intel XE#2705]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2705
  [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#2925]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2925
  [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#310]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/310
  [Intel XE#3113]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3113
  [Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
  [Intel XE#356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/356
  [Intel XE#3573]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3573
  [Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
  [Intel XE#3868]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3868
  [Intel XE#3970]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3970
  [Intel XE#4173]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4173
  [Intel XE#4212]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4212
  [Intel XE#4345]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4345
  [Intel XE#4543]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4543
  [Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
  [Intel XE#4915]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4915
  [Intel XE#5466]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5466
  [Intel XE#5503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5503
  [Intel XE#5530]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5530
  [Intel XE#5561]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5561
  [Intel XE#5572]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5572
  [Intel XE#5575]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5575
  [Intel XE#6168]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6168
  [Intel XE#6251]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6251
  [Intel XE#6360]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6360
  [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#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
  [Intel XE#929]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/929
  [i915#14968]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14968


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

  * Linux: xe-4134-13909978d70fc4ded88b778a313b68ad86ba881a -> xe-pw-156339v5

  IGT_8636: 254cd102396ff95d61f2ebe49fc09128878bf483 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-4134-13909978d70fc4ded88b778a313b68ad86ba881a: 13909978d70fc4ded88b778a313b68ad86ba881a
  xe-pw-156339v5: 156339v5

== Logs ==

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

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

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

* Re: [PATCH v5 1/3] drm/xe/vf: Enable VF migration only on supported GuC versions
  2025-11-20 14:51 ` [PATCH v5 1/3] drm/xe/vf: Enable VF migration only on supported GuC versions Satyanarayana K V P
@ 2025-11-20 21:18   ` Michal Wajdeczko
  0 siblings, 0 replies; 11+ messages in thread
From: Michal Wajdeczko @ 2025-11-20 21:18 UTC (permalink / raw)
  To: Satyanarayana K V P, intel-xe; +Cc: Matthew Brost, Tomasz Lis



On 11/20/2025 3:51 PM, Satyanarayana K V P wrote:
> Enable VF migration starting with GuC 70.54.0 (compatibility version
> 1.27.0).

this is only says "what", for the "why" part we likely want to add:

" ... which supports additional VF2GUC_RESFIX_START message required
to handle migration recovery in a more robust way."

> 
> Signed-off-by: Satyanarayana K V P <satyanarayana.k.v.p@intel.com>
> Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Tomasz Lis <tomasz.lis@intel.com>
> 
> ---
> V4 -> V5:
> - Created new function vf_migration_init_late() (Michal W).
> 
> V3 -> V4:
> - New commit
> 
> V2 -> V3:
> - None.
> 
> V1 -> V2:
> - None.
> ---
>  drivers/gpu/drm/xe/xe_sriov_vf.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/drivers/gpu/drm/xe/xe_sriov_vf.c b/drivers/gpu/drm/xe/xe_sriov_vf.c
> index 284ce37ca92d..13cacdbbf2d2 100644
> --- a/drivers/gpu/drm/xe/xe_sriov_vf.c
> +++ b/drivers/gpu/drm/xe/xe_sriov_vf.c
> @@ -170,6 +170,20 @@ void xe_sriov_vf_init_early(struct xe_device *xe)
>  	vf_migration_init_early(xe);
>  }
>  
> +static void vf_migration_init_late(struct xe_device *xe)
> +{
> +	struct xe_gt *gt = xe_root_mmio_gt(xe);
> +	struct xe_uc_fw_version guc_version;

maybe we should call xe_sriov_vf_migration_supported() too?

> +
> +	xe_gt_sriov_vf_guc_versions(gt, NULL, &guc_version);
> +	if (MAKE_GUC_VER_STRUCT(guc_version) < MAKE_GUC_VER(1, 27, 0)) {
> +		xe_sriov_vf_migration_disable(xe,
> +					      "requires GUC ABI >= 1.27.0, but only %u.%u.%u found",

s/GUC/GuC

> +					      guc_version.major, guc_version.minor,
> +					      guc_version.patch);
> +	}

and return bool/true only if we still claim support for migration?

> +}
> +
>  /**
>   * xe_sriov_vf_init_late() - SR-IOV VF late initialization functions.
>   * @xe: the &xe_device to initialize
> @@ -180,6 +194,7 @@ void xe_sriov_vf_init_early(struct xe_device *xe)
>   */
>  int xe_sriov_vf_init_late(struct xe_device *xe)
>  {
> +	vf_migration_init_late(xe);

then here we can have:

	if (!vf_migration_init_late(xe))
		return 0;

>  	return xe_sriov_vf_ccs_init(xe);
>  }
>  


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

* Re: [PATCH v5 2/3] drm/xe/vf: Introduce RESFIX start marker support
  2025-11-20 14:52 ` [PATCH v5 2/3] drm/xe/vf: Introduce RESFIX start marker support Satyanarayana K V P
@ 2025-11-20 21:37   ` Michal Wajdeczko
  0 siblings, 0 replies; 11+ messages in thread
From: Michal Wajdeczko @ 2025-11-20 21:37 UTC (permalink / raw)
  To: Satyanarayana K V P, intel-xe; +Cc: Matthew Brost, Tomasz Lis



On 11/20/2025 3:52 PM, Satyanarayana K V P wrote:
> In scenarios involving double migration, the VF KMD may encounter
> situations where it is instructed to re-migrate before having the
> opportunity to send RESFIX_DONE for the initial migration. This can occur
> when the fix-up for the prior migration is still underway, but the VF KMD
> is migrated again.
> 
> Consequently, this may lead to the possibility of sending two migration
> notifications (i.e., pending fix-up for the first migration and a second
> notification for the new migration). Upon receiving the first RES_FIX
> notification, the GuC will resume VF submission on the GPU, potentially
> resulting in undefined behavior, such as system hangs or crashes.
> 
> To avoid this, post migration, a marker is sent to the GUC prior to the
> start of resource fixups to indicate start of resource fixups. The same
> marker is sent along with RESFIX_DONE notification so that GUC can avoid
> submitting jobs to HW in case of double migration.
> 
> Signed-off-by: Satyanarayana K V P <satyanarayana.k.v.p@intel.com>
> Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Tomasz Lis <tomasz.lis@intel.com>
> 
> ---
> V4 -> V5:
> - Fixed review comments (Michal W).
> - Fixed minor debug log levels and documentation part.
> - Moved complete marker logic to vf_post_migration_resfix_start_marker()
> 
> V3 -> V4:
> - Updated RESFIX_DONE action name and documenation part. (Michal W)
> - Enable resfxi_start marked by default as sav/restore is gated on
> Guc version 70.54.0
> 
> V2 -> V3:
> - Fixed review comments (Michal W).
> - Updated commit message.
> - Fixed CI.BAT issues.
> - Added helper function to assert on unsupported GUC versions.
> - Updated RESFIX_DONE action name and documenation part.
> 
> V1 -> V2:
> - Squashed "Enable RESFIX start marker only on supported GUC
> versions" commit into a single commit. (Matt B)
> ---
>  .../gpu/drm/xe/abi/guc_actions_sriov_abi.h    | 67 ++++++++++++---
>  drivers/gpu/drm/xe/xe_gt_sriov_vf.c           | 85 +++++++++++++++----
>  drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h     |  5 ++
>  drivers/gpu/drm/xe/xe_sriov_vf.c              | 21 +++--
>  4 files changed, 144 insertions(+), 34 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h b/drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h
> index 0b28659d94e9..d9f21202e1a9 100644
> --- a/drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h
> +++ b/drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h
> @@ -502,13 +502,17 @@
>  #define VF2GUC_VF_RESET_RESPONSE_MSG_0_MBZ		GUC_HXG_RESPONSE_MSG_0_DATA0
>  
>  /**
> - * DOC: VF2GUC_NOTIFY_RESFIX_DONE
> + * DOC: VF2GUC_RESFIX_DONE
>   *
> - * This action is used by VF to notify the GuC that the VF KMD has completed
> - * post-migration recovery steps.
> + * This action is used by VF to inform the GuC that the VF KMD has completed
> + * post-migration recovery steps. From GuC VF compatibility 1.27.0 onwards, it
> + * shall only be sent after posting RESFIX_START and that both @MARKER fields
> + * must match.
>   *
>   * This message must be sent as `MMIO HXG Message`_.
>   *
> + * Updated since GuC VF compatibility 1.27.0.
> + *
>   *  +---+-------+--------------------------------------------------------------+
>   *  |   | Bits  | Description                                                  |
>   *  +===+=======+==============================================================+
> @@ -516,9 +520,11 @@
>   *  |   +-------+--------------------------------------------------------------+
>   *  |   | 30:28 | TYPE = GUC_HXG_TYPE_REQUEST_                                 |
>   *  |   +-------+--------------------------------------------------------------+
> - *  |   | 27:16 | DATA0 = MBZ                                                  |
> + *  |   | 27:16 | DATA0 = MARKER = MBZ (only prior 1.27.0)                     |
>   *  |   +-------+--------------------------------------------------------------+
> - *  |   |  15:0 | ACTION = _`GUC_ACTION_VF2GUC_NOTIFY_RESFIX_DONE` = 0x5508    |
> + *  |   | 27:16 | DATA0 = MARKER - can't be zero (1.27.0+)                     |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   |  15:0 | ACTION = _`GUC_ACTION_VF2GUC_RESFIX_DONE` = 0x5508           |
>   *  +---+-------+--------------------------------------------------------------+
>   *
>   *  +---+-------+--------------------------------------------------------------+
> @@ -531,13 +537,13 @@
>   *  |   |  27:0 | DATA0 = MBZ                                                  |
>   *  +---+-------+--------------------------------------------------------------+
>   */
> -#define GUC_ACTION_VF2GUC_NOTIFY_RESFIX_DONE		0x5508u
> +#define GUC_ACTION_VF2GUC_RESFIX_DONE			0x5508u
>  
> -#define VF2GUC_NOTIFY_RESFIX_DONE_REQUEST_MSG_LEN	GUC_HXG_REQUEST_MSG_MIN_LEN
> -#define VF2GUC_NOTIFY_RESFIX_DONE_REQUEST_MSG_0_MBZ	GUC_HXG_REQUEST_MSG_0_DATA0
> +#define VF2GUC_RESFIX_DONE_REQUEST_MSG_LEN		GUC_HXG_REQUEST_MSG_MIN_LEN
> +#define VF2GUC_RESFIX_DONE_REQUEST_MSG_0_MARKER		GUC_HXG_REQUEST_MSG_0_DATA0
>  
> -#define VF2GUC_NOTIFY_RESFIX_DONE_RESPONSE_MSG_LEN	GUC_HXG_RESPONSE_MSG_MIN_LEN
> -#define VF2GUC_NOTIFY_RESFIX_DONE_RESPONSE_MSG_0_MBZ	GUC_HXG_RESPONSE_MSG_0_DATA0
> +#define VF2GUC_RESFIX_DONE_RESPONSE_MSG_LEN		GUC_HXG_RESPONSE_MSG_MIN_LEN
> +#define VF2GUC_RESFIX_DONE_RESPONSE_MSG_0_MBZ		GUC_HXG_RESPONSE_MSG_0_DATA0
>  
>  /**
>   * DOC: VF2GUC_QUERY_SINGLE_KLV
> @@ -656,4 +662,45 @@
>  #define PF2GUC_SAVE_RESTORE_VF_RESPONSE_MSG_LEN		GUC_HXG_RESPONSE_MSG_MIN_LEN
>  #define PF2GUC_SAVE_RESTORE_VF_RESPONSE_MSG_0_USED	GUC_HXG_RESPONSE_MSG_0_DATA0
>  
> +/**
> + * DOC: VF2GUC_RESFIX_START
> + *
> + * This action is used by VF to inform the GuC that the VF KMD will be starting
> + * post-migration recovery fixups. The @MARKER sent with this action must match
> + * with the MARKER posted in the VF2GUC_RESFIX_DONE message.
> + *
> + * This message must be sent as `MMIO HXG Message`_.
> + *
> + * Available since GuC VF compatibility 1.27.0.
> + *
> + *  +---+-------+--------------------------------------------------------------+
> + *  |   | Bits  | Description                                                  |
> + *  +===+=======+==============================================================+
> + *  | 0 |    31 | ORIGIN = GUC_HXG_ORIGIN_HOST_                                |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   | 30:28 | TYPE = GUC_HXG_TYPE_REQUEST_                                 |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   | 27:16 | DATA0 = MARKER - can't be zero                               |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   |  15:0 | ACTION = _`GUC_ACTION_VF2GUC_RESFIX_START` = 0x550F          |
> + *  +---+-------+--------------------------------------------------------------+
> + *
> + *  +---+-------+--------------------------------------------------------------+
> + *  |   | Bits  | Description                                                  |
> + *  +===+=======+==============================================================+
> + *  | 0 |    31 | ORIGIN = GUC_HXG_ORIGIN_GUC_                                 |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   | 30:28 | TYPE = GUC_HXG_TYPE_RESPONSE_SUCCESS_                        |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   |  27:0 | DATA0 = MBZ                                                  |
> + *  +---+-------+--------------------------------------------------------------+
> + */
> +#define GUC_ACTION_VF2GUC_RESFIX_START			0x550Fu
> +
> +#define VF2GUC_RESFIX_START_REQUEST_MSG_LEN		GUC_HXG_REQUEST_MSG_MIN_LEN
> +#define VF2GUC_RESFIX_START_REQUEST_MSG_0_MARKER	GUC_HXG_REQUEST_MSG_0_DATA0
> +
> +#define VF2GUC_RESFIX_START_RESPONSE_MSG_LEN		GUC_HXG_RESPONSE_MSG_MIN_LEN
> +#define VF2GUC_RESFIX_START_RESPONSE_MSG_0_MBZ		GUC_HXG_RESPONSE_MSG_0_DATA0
> +
>  #endif
> diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> index 4c73a077d314..1cd3d8204c15 100644
> --- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> +++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> @@ -299,12 +299,13 @@ void xe_gt_sriov_vf_guc_versions(struct xe_gt *gt,
>  		*found = gt->sriov.vf.guc_version;
>  }
>  
> -static int guc_action_vf_notify_resfix_done(struct xe_guc *guc)
> +static int guc_action_vf_notify_resfix_start(struct xe_guc *guc, u16 marker)

s/guc_action_vf_notify_resfix_start/guc_action_vf_resfix_start

>  {
>  	u32 request[GUC_HXG_REQUEST_MSG_MIN_LEN] = {
>  		FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
>  		FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_REQUEST) |
> -		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, GUC_ACTION_VF2GUC_NOTIFY_RESFIX_DONE),
> +		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, GUC_ACTION_VF2GUC_RESFIX_START) |
> +		FIELD_PREP(VF2GUC_RESFIX_START_REQUEST_MSG_0_MARKER, marker),
>  	};
>  	int ret;
>  
> @@ -313,30 +314,54 @@ static int guc_action_vf_notify_resfix_done(struct xe_guc *guc)
>  	return ret > 0 ? -EPROTO : ret;
>  }
>  
> -/**
> - * vf_notify_resfix_done - Notify GuC about resource fixups apply completed.
> - * @gt: the &xe_gt struct instance linked to target GuC
> - *
> - * Returns: 0 if the operation completed successfully, or a negative error
> - * code otherwise.
> - */
> -static int vf_notify_resfix_done(struct xe_gt *gt)
> +static int vf_notify_resfix_start(struct xe_gt *gt, u16 marker)
>  {
>  	struct xe_guc *guc = &gt->uc.guc;
>  	int err;
>  
>  	xe_gt_assert(gt, IS_SRIOV_VF(gt_to_xe(gt)));
>  
> -	err = guc_action_vf_notify_resfix_done(guc);
> +	xe_gt_sriov_dbg_verbose(gt, "Sending resfix start marker %u\n", marker);
> +
> +	err = guc_action_vf_notify_resfix_start(guc, marker);
>  	if (unlikely(err))
> -		xe_gt_sriov_err(gt, "Failed to notify GuC about resource fixup done (%pe)\n",
> +		xe_gt_sriov_err(gt, "Failed to notify GuC about resource fixup start (%pe)\n",
>  				ERR_PTR(err));
> -	else
> -		xe_gt_sriov_dbg_verbose(gt, "sent GuC resource fixup done\n");
>  
>  	return err;
>  }
>  
> +static int guc_action_vf_notify_resfix_done(struct xe_guc *guc, u16 marker)

s/guc_action_vf_notify_resfix_done/guc_action_vf_resfix_done

> +{
> +	u32 request[GUC_HXG_REQUEST_MSG_MIN_LEN] = {
> +		FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
> +		FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_REQUEST) |
> +		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, GUC_ACTION_VF2GUC_RESFIX_DONE) |
> +		FIELD_PREP(VF2GUC_RESFIX_DONE_REQUEST_MSG_0_MARKER, marker),
> +	};
> +	int ret;
> +
> +	ret = xe_guc_mmio_send(guc, request, ARRAY_SIZE(request));
> +
> +	return ret > 0 ? -EPROTO : ret;
> +}
> +
> +static int vf_notify_resfix_done(struct xe_gt *gt, u16 marker)
> +{
> +	struct xe_guc *guc = &gt->uc.guc;
> +	int err;
> +
> +	xe_gt_assert(gt, IS_SRIOV_VF(gt_to_xe(gt)));
> +
> +	xe_gt_sriov_dbg_verbose(gt, "Sending resfix done marker %u\n", marker);
> +
> +	err = guc_action_vf_notify_resfix_done(guc, marker);
> +	if (unlikely(err))
> +		xe_gt_sriov_err(gt, "Recovery failed at GuC RESFIX_DONE step (%pe)\n",
> +				ERR_PTR(err));
> +	return err;
> +}
> +
>  static int guc_action_query_single_klv(struct xe_guc *guc, u32 key,
>  				       u32 *value, u32 value_len)
>  {
> @@ -1183,7 +1208,7 @@ static void vf_post_migration_abort(struct xe_gt *gt)
>  	xe_guc_submit_pause_abort(&gt->uc.guc);
>  }
>  
> -static int vf_post_migration_notify_resfix_done(struct xe_gt *gt)
> +static int vf_post_migration_notify_resfix_done(struct xe_gt *gt, u16 marker)
>  {
>  	bool skip_resfix = false;
>  
> @@ -1206,14 +1231,32 @@ static int vf_post_migration_notify_resfix_done(struct xe_gt *gt)
>  	 */
>  	xe_irq_resume(gt_to_xe(gt));
>  
> -	return vf_notify_resfix_done(gt);
> +	return vf_notify_resfix_done(gt, marker);
> +}
> +
> +/*
> + * Increment the startup marker again if it overflows, since GUC
> + * requires a non-zero marker to be set.
> + */
> +static u16 vf_post_migration_resfix_start_marker(struct xe_gt *gt)
> +{
> +	u16 marker;
> +
> +	xe_gt_assert(gt, IS_SRIOV_VF(gt_to_xe(gt)));
> +
> +	marker = ++gt->sriov.vf.migration.resfix_marker;
> +	if (unlikely(!marker))
> +		marker = ++gt->sriov.vf.migration.resfix_marker;

in unlikely case that VF will be migrated 4096 times,
GuC will see marker as 0 since DATA0 field is 12-bit

> +
> +	return marker;
>  }
>  
>  static void vf_post_migration_recovery(struct xe_gt *gt)
>  {
>  	struct xe_device *xe = gt_to_xe(gt);
> -	int err;
> +	u16 marker;
>  	bool retry;
> +	int err;
>  
>  	xe_gt_sriov_dbg(gt, "migration recovery in progress\n");
>  
> @@ -1227,13 +1270,19 @@ static void vf_post_migration_recovery(struct xe_gt *gt)
>  		goto fail;
>  	}
>  
> +	marker = vf_post_migration_resfix_start_marker(gt);
> +
> +	err = vf_notify_resfix_start(gt, marker);
> +	if (err)
> +		goto fail;
> +
>  	err = vf_post_migration_fixups(gt);
>  	if (err)
>  		goto fail;
>  
>  	vf_post_migration_rearm(gt);
>  
> -	err = vf_post_migration_notify_resfix_done(gt);
> +	err = vf_post_migration_notify_resfix_done(gt, marker);
>  	if (err && err != -EAGAIN)
>  		goto fail;
>  
> diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h b/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h
> index 420b0e6089de..66c0062a42c6 100644
> --- a/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h
> +++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h
> @@ -52,6 +52,11 @@ struct xe_gt_sriov_vf_migration {
>  	wait_queue_head_t wq;
>  	/** @scratch: Scratch memory for VF recovery */
>  	void *scratch;
> +	/**
> +	 * @resfix_marker: Marker sent on start and on end of post-migration
> +	 * steps.
> +	 */
> +	u16 resfix_marker;
>  	/** @recovery_teardown: VF post migration recovery is being torn down */
>  	bool recovery_teardown;
>  	/** @recovery_queued: VF post migration recovery in queued */
> diff --git a/drivers/gpu/drm/xe/xe_sriov_vf.c b/drivers/gpu/drm/xe/xe_sriov_vf.c
> index 13cacdbbf2d2..2994b233e0cf 100644
> --- a/drivers/gpu/drm/xe/xe_sriov_vf.c
> +++ b/drivers/gpu/drm/xe/xe_sriov_vf.c
> @@ -49,11 +49,13 @@
>   *
>   * As soon as Virtual GPU of the VM starts, the VF driver within receives
>   * the MIGRATED interrupt and schedules post-migration recovery worker.
> - * That worker queries GuC for new provisioning (using MMIO communication),
> + * That worker sends `VF2GUC_RESFIX_START` action along with non-zero
> + * marker, queries GuC for new provisioning (using MMIO communication),
>   * and applies fixups to any non-virtualized resources used by the VF.
>   *
>   * When the VF driver is ready to continue operation on the newly connected
> - * hardware, it sends `VF2GUC_NOTIFY_RESFIX_DONE` which causes it to
> + * hardware, it sends `VF2GUC_RESFIX_DONE` action along with the same
> + * marker which was sent with `VF2GUC_RESFIX_START` which causes it to
>   * enter the long awaited `VF_RUNNING` state, and therefore start handling
>   * CTB messages and scheduling workloads from the VF::
>   *
> @@ -102,19 +104,26 @@
>   *      |                              [ ]        new VF provisioning  [ ]
>   *      |                              [ ]---------------------------> [ ]
>   *      |                               |                              [ ]
> + *      |                               |   VF2GUC_RESFIX_START        [ ]
> + *      |                              [ ] <---------------------------[ ]
> + *      |                              [ ]                             [ ]
> + *      |                              [ ]                     success [ ]
> + *      |                              [ ]---------------------------> [ ]
>   *      |                               |       VF driver applies post [ ]
>   *      |                               |      migration fixups -------[ ]
>   *      |                               |                       |      [ ]
>   *      |                               |                       -----> [ ]
>   *      |                               |                              [ ]
> - *      |                               |    VF2GUC_NOTIFY_RESFIX_DONE [ ]
> + *      |                               |    VF2GUC_RESFIX_DONE        [ ]
>   *      |                              [ ] <---------------------------[ ]
>   *      |                              [ ]                             [ ]
>   *      |                              [ ]  GuC sets new VF state to   [ ]
> - *      |                              [ ]------- VF_RUNNING           [ ]
> - *      |                              [ ]      |                      [ ]
> + *      |                              [ ]------- VF_RUNNING on marker [ ]
> + *      |                              [ ]      |  match               [ ]
>   *      |                              [ ] <-----                      [ ]
> - *      |                              [ ]                     success [ ]
> + *      |                              [ ]   success (on marker match) [ ]
> + *      |                              [ ]---------------------------> [ ]
> + *      |                              [ ]  error (on marker mismatch) [ ]
>   *      |                              [ ]---------------------------> [ ]

actually, we should distinguish between error case due to marker mismatch,
like sending START(A) and then DONE(B), vs actual double-migration case

only if latter we should restart the recovery sequence (and only case needs
to be shown in above diagram)

this means that we need to teach our CTB to correctly recognize VF_MIGRATED
status code and return different -errno

>   *      |                               |                               |
>   *      |                               |                               |


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

* Re: [PATCH v5 3/3] drm/xe/vf: Add debugfs entries to test VF double migration
  2025-11-20 14:52 ` [PATCH v5 3/3] drm/xe/vf: Add debugfs entries to test VF double migration Satyanarayana K V P
@ 2025-11-20 21:53   ` Michal Wajdeczko
  2025-11-21  7:21     ` Matthew Brost
  0 siblings, 1 reply; 11+ messages in thread
From: Michal Wajdeczko @ 2025-11-20 21:53 UTC (permalink / raw)
  To: Satyanarayana K V P, intel-xe; +Cc: Matthew Brost, Tomasz Lis



On 11/20/2025 3:52 PM, Satyanarayana K V P wrote:
> VF migration sends a marker to the GUC before resource fixups begin,
> and repeats the marker with the RESFIX_DONE notification. This prevents
> the GUC from submitting jobs during double migration events.
> 
> To reliably test double migration, a second migration must be triggered
> while fixups from the first migration are still in progress. Since fixups
> complete quickly, reproducing this scenario is difficult. Introduce
> debugfs controls to add delays in the post-fixup phase, creating a
> deterministic window for subsequent migrations.
> 
> New debugfs entries:
> 	/sys/kernel/debug/dri/<card>/
> 	├── gt0
> 	│   ├── vf
> 	│   │   ├── resfix_stoppers
> 
> - resfix_stoppers: Predefined checkpoints that allow the migration process
> to pause at specific stages. The stages are given below.
> 
> VF_MIGRATION_WAIT_BEFORE_RESFIX_START	- BIT(0)
> VF_MIGRATION_WAIT_BEFORE_FIXUPS		- BIT(1)
> VF_MIGRATION_WAIT_BEFORE_RESTART_JOBS	- BIT(2)
> VF_MIGRATION_WAIT_BEFORE_RESFIX_DONE	- BIT(3)
> 
> Each state will pause with a 1-second delay per iteration, continuing until
> its corresponding bit is cleared or a maximum of 10 iterations is reached.

fixed 10s might be still not always sufficient for the test

if you're afraid of locking down VF driver due to test bug that forget to clear the stop-bit,
then maybe we should look for some other solution ...

> 
> Signed-off-by: Satyanarayana K V P <satyanarayana.k.v.p@intel.com>
> Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Tomasz Lis <tomasz.lis@intel.com>
> 
> ---
> V4 -> V5:
> - Updated debugfs entries (Michal W).
> 
> V3 -> V4:
> - New commit
> 
> V2 -> V3:
> - None.
> 
> V1 -> V2:
> - None.
> ---
>  drivers/gpu/drm/xe/xe_gt_sriov_vf.c         | 37 +++++++++++++++++++++
>  drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.c |  5 +++
>  drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h   |  8 +++++
>  3 files changed, 50 insertions(+)
> 
> diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> index 1cd3d8204c15..0f25091f4949 100644
> --- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> +++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> @@ -5,6 +5,7 @@
>  
>  #include <linux/bitfield.h>
>  #include <linux/bsearch.h>
> +#include <linux/delay.h>
>  
>  #include <drm/drm_managed.h>
>  #include <drm/drm_print.h>
> @@ -1234,6 +1235,34 @@ static int vf_post_migration_notify_resfix_done(struct xe_gt *gt, u16 marker)
>  	return vf_notify_resfix_done(gt, marker);
>  }
>  
> +#define VF_MIGRATION_WAIT_NO_WAIT			0
> +#define VF_MIGRATION_WAIT_BEFORE_RESFIX_START		BIT(0)
> +#define VF_MIGRATION_WAIT_BEFORE_FIXUPS		BIT(1)
> +#define VF_MIGRATION_WAIT_BEFORE_RESTART_JOBS		BIT(2)
> +#define VF_MIGRATION_WAIT_BEFORE_RESFIX_DONE		BIT(3)
> +
> +#define VF_MIGRATION_WAIT_DELAY_PER_ITER_IN_MS		1000
> +#define VF_MIGRATION_WAIT_DELAY_MAX_ITERS		10
> +
> +#ifdef CONFIG_DRM_XE_DEBUG
> +static inline void vf_post_migration_inject_wait(struct xe_gt *gt, int wait)
> +{
> +	uint delay_ms = VF_MIGRATION_WAIT_DELAY_PER_ITER_IN_MS;
> +	int max_delay_iter = VF_MIGRATION_WAIT_DELAY_MAX_ITERS;
> +
> +	while ((gt->sriov.vf.migration.debug.resfix_stoppers &  wait) &&
> +	       max_delay_iter--) {
> +		xe_gt_dbg(gt,
> +			  "*TESTING* injecting delay resfix_stoppers = 0x%x, remaining iters = %d\n",
> +			  gt->sriov.vf.migration.debug.resfix_stoppers, max_delay_iter);
> +
> +		msleep(delay_ms);
> +	}
> +}
> +#else
> +static inline void vf_post_migration_inject_wait(struct xe_gt *gt, int wait) { }
> +#endif

we don't use "inline" in .c

> +
>  /*
>   * Increment the startup marker again if it overflows, since GUC
>   * requires a non-zero marker to be set.
> @@ -1270,18 +1299,26 @@ static void vf_post_migration_recovery(struct xe_gt *gt)
>  		goto fail;
>  	}
>  
> +	vf_post_migration_inject_wait(gt, VF_MIGRATION_WAIT_BEFORE_RESFIX_START);

can we code that in some nicer way:

	VF_MIGRATION_INJECT_WAIT(RESFIX_START);

#define VF_MIGRATION_INJECT_WAIT(_HERE) \
	vf_post_migration_inject_wait(VF_MIGRATION_WAIT_##_HERE)

> +
>  	marker = vf_post_migration_resfix_start_marker(gt);
>  
>  	err = vf_notify_resfix_start(gt, marker);
>  	if (err)
>  		goto fail;
>  
> +	vf_post_migration_inject_wait(gt, VF_MIGRATION_WAIT_BEFORE_FIXUPS);
> +
>  	err = vf_post_migration_fixups(gt);
>  	if (err)
>  		goto fail;
>  
> +	vf_post_migration_inject_wait(gt, VF_MIGRATION_WAIT_BEFORE_RESTART_JOBS);
> +
>  	vf_post_migration_rearm(gt);
>  
> +	vf_post_migration_inject_wait(gt, VF_MIGRATION_WAIT_BEFORE_RESFIX_DONE);
> +
>  	err = vf_post_migration_notify_resfix_done(gt, marker);
>  	if (err && err != -EAGAIN)
>  		goto fail;
> diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.c
> index 2ed5b6780d30..66d5ffd0e371 100644
> --- a/drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.c
> +++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.c
> @@ -69,4 +69,9 @@ void xe_gt_sriov_vf_debugfs_register(struct xe_gt *gt, struct dentry *root)
>  	vfdentry->d_inode->i_private = gt;
>  
>  	drm_debugfs_create_files(vf_info, ARRAY_SIZE(vf_info), vfdentry, minor);
> +
> +	if (IS_ENABLED(CONFIG_DRM_XE_DEBUG)) {
> +		debugfs_create_x8("resfix_stoppers", 0600, vfdentry,
> +				  &gt->sriov.vf.migration.debug.resfix_stoppers);
> +	}
>  }
> diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h b/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h
> index 66c0062a42c6..3ece00f74e46 100644
> --- a/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h
> +++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h
> @@ -52,6 +52,14 @@ struct xe_gt_sriov_vf_migration {
>  	wait_queue_head_t wq;
>  	/** @scratch: Scratch memory for VF recovery */
>  	void *scratch;
> +	/** @debug: Debug hooks for delaying migration */
> +	struct {
> +		/**
> +		 * @debug.resfix_stoppers: Stop and wait at different stages
> +		 * during post migration recovery
> +		 */
> +		u8 resfix_stoppers;
> +	} debug;
>  	/**
>  	 * @resfix_marker: Marker sent on start and on end of post-migration
>  	 * steps.

as this is still a quite invasive change, can you post a IGT patch which uses these stop-points to prove it works as expected?


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

* Re: [PATCH v5 3/3] drm/xe/vf: Add debugfs entries to test VF double migration
  2025-11-20 21:53   ` Michal Wajdeczko
@ 2025-11-21  7:21     ` Matthew Brost
  0 siblings, 0 replies; 11+ messages in thread
From: Matthew Brost @ 2025-11-21  7:21 UTC (permalink / raw)
  To: Michal Wajdeczko; +Cc: Satyanarayana K V P, intel-xe, Tomasz Lis

On Thu, Nov 20, 2025 at 10:53:02PM +0100, Michal Wajdeczko wrote:
> 
> 
> On 11/20/2025 3:52 PM, Satyanarayana K V P wrote:
> > VF migration sends a marker to the GUC before resource fixups begin,
> > and repeats the marker with the RESFIX_DONE notification. This prevents
> > the GUC from submitting jobs during double migration events.
> > 
> > To reliably test double migration, a second migration must be triggered
> > while fixups from the first migration are still in progress. Since fixups
> > complete quickly, reproducing this scenario is difficult. Introduce
> > debugfs controls to add delays in the post-fixup phase, creating a
> > deterministic window for subsequent migrations.
> > 
> > New debugfs entries:
> > 	/sys/kernel/debug/dri/<card>/
> > 	├── gt0
> > 	│   ├── vf
> > 	│   │   ├── resfix_stoppers
> > 
> > - resfix_stoppers: Predefined checkpoints that allow the migration process
> > to pause at specific stages. The stages are given below.
> > 
> > VF_MIGRATION_WAIT_BEFORE_RESFIX_START	- BIT(0)
> > VF_MIGRATION_WAIT_BEFORE_FIXUPS		- BIT(1)
> > VF_MIGRATION_WAIT_BEFORE_RESTART_JOBS	- BIT(2)
> > VF_MIGRATION_WAIT_BEFORE_RESFIX_DONE	- BIT(3)
> > 
> > Each state will pause with a 1-second delay per iteration, continuing until
> > its corresponding bit is cleared or a maximum of 10 iterations is reached.
> 
> fixed 10s might be still not always sufficient for the test
> 
> if you're afraid of locking down VF driver due to test bug that forget to clear the stop-bit,
> then maybe we should look for some other solution ...
> 
> > 
> > Signed-off-by: Satyanarayana K V P <satyanarayana.k.v.p@intel.com>
> > Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
> > Cc: Matthew Brost <matthew.brost@intel.com>
> > Cc: Tomasz Lis <tomasz.lis@intel.com>
> > 
> > ---
> > V4 -> V5:
> > - Updated debugfs entries (Michal W).
> > 
> > V3 -> V4:
> > - New commit
> > 
> > V2 -> V3:
> > - None.
> > 
> > V1 -> V2:
> > - None.
> > ---
> >  drivers/gpu/drm/xe/xe_gt_sriov_vf.c         | 37 +++++++++++++++++++++
> >  drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.c |  5 +++
> >  drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h   |  8 +++++
> >  3 files changed, 50 insertions(+)
> > 
> > diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> > index 1cd3d8204c15..0f25091f4949 100644
> > --- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> > +++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> > @@ -5,6 +5,7 @@
> >  
> >  #include <linux/bitfield.h>
> >  #include <linux/bsearch.h>
> > +#include <linux/delay.h>
> >  
> >  #include <drm/drm_managed.h>
> >  #include <drm/drm_print.h>
> > @@ -1234,6 +1235,34 @@ static int vf_post_migration_notify_resfix_done(struct xe_gt *gt, u16 marker)
> >  	return vf_notify_resfix_done(gt, marker);
> >  }
> >  
> > +#define VF_MIGRATION_WAIT_NO_WAIT			0
> > +#define VF_MIGRATION_WAIT_BEFORE_RESFIX_START		BIT(0)
> > +#define VF_MIGRATION_WAIT_BEFORE_FIXUPS		BIT(1)
> > +#define VF_MIGRATION_WAIT_BEFORE_RESTART_JOBS		BIT(2)
> > +#define VF_MIGRATION_WAIT_BEFORE_RESFIX_DONE		BIT(3)
> > +
> > +#define VF_MIGRATION_WAIT_DELAY_PER_ITER_IN_MS		1000
> > +#define VF_MIGRATION_WAIT_DELAY_MAX_ITERS		10
> > +
> > +#ifdef CONFIG_DRM_XE_DEBUG
> > +static inline void vf_post_migration_inject_wait(struct xe_gt *gt, int wait)
> > +{
> > +	uint delay_ms = VF_MIGRATION_WAIT_DELAY_PER_ITER_IN_MS;
> > +	int max_delay_iter = VF_MIGRATION_WAIT_DELAY_MAX_ITERS;
> > +
> > +	while ((gt->sriov.vf.migration.debug.resfix_stoppers &  wait) &&
> > +	       max_delay_iter--) {
> > +		xe_gt_dbg(gt,
> > +			  "*TESTING* injecting delay resfix_stoppers = 0x%x, remaining iters = %d\n",
> > +			  gt->sriov.vf.migration.debug.resfix_stoppers, max_delay_iter);
> > +
> > +		msleep(delay_ms);
> > +	}
> > +}
> > +#else
> > +static inline void vf_post_migration_inject_wait(struct xe_gt *gt, int wait) { }
> > +#endif
> 
> we don't use "inline" in .c
> 
> > +
> >  /*
> >   * Increment the startup marker again if it overflows, since GUC
> >   * requires a non-zero marker to be set.
> > @@ -1270,18 +1299,26 @@ static void vf_post_migration_recovery(struct xe_gt *gt)
> >  		goto fail;
> >  	}
> >  
> > +	vf_post_migration_inject_wait(gt, VF_MIGRATION_WAIT_BEFORE_RESFIX_START);
> 
> can we code that in some nicer way:
> 
> 	VF_MIGRATION_INJECT_WAIT(RESFIX_START);
> 
> #define VF_MIGRATION_INJECT_WAIT(_HERE) \
> 	vf_post_migration_inject_wait(VF_MIGRATION_WAIT_##_HERE)
> 
> > +
> >  	marker = vf_post_migration_resfix_start_marker(gt);
> >  
> >  	err = vf_notify_resfix_start(gt, marker);
> >  	if (err)
> >  		goto fail;
> >  
> > +	vf_post_migration_inject_wait(gt, VF_MIGRATION_WAIT_BEFORE_FIXUPS);
> > +
> >  	err = vf_post_migration_fixups(gt);
> >  	if (err)
> >  		goto fail;
> >  
> > +	vf_post_migration_inject_wait(gt, VF_MIGRATION_WAIT_BEFORE_RESTART_JOBS);
> > +
> >  	vf_post_migration_rearm(gt);
> >  
> > +	vf_post_migration_inject_wait(gt, VF_MIGRATION_WAIT_BEFORE_RESFIX_DONE);
> > +
> >  	err = vf_post_migration_notify_resfix_done(gt, marker);
> >  	if (err && err != -EAGAIN)
> >  		goto fail;
> > diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.c
> > index 2ed5b6780d30..66d5ffd0e371 100644
> > --- a/drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.c
> > +++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.c
> > @@ -69,4 +69,9 @@ void xe_gt_sriov_vf_debugfs_register(struct xe_gt *gt, struct dentry *root)
> >  	vfdentry->d_inode->i_private = gt;
> >  
> >  	drm_debugfs_create_files(vf_info, ARRAY_SIZE(vf_info), vfdentry, minor);
> > +
> > +	if (IS_ENABLED(CONFIG_DRM_XE_DEBUG)) {
> > +		debugfs_create_x8("resfix_stoppers", 0600, vfdentry,
> > +				  &gt->sriov.vf.migration.debug.resfix_stoppers);
> > +	}
> >  }
> > diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h b/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h
> > index 66c0062a42c6..3ece00f74e46 100644
> > --- a/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h
> > +++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h
> > @@ -52,6 +52,14 @@ struct xe_gt_sriov_vf_migration {
> >  	wait_queue_head_t wq;
> >  	/** @scratch: Scratch memory for VF recovery */
> >  	void *scratch;
> > +	/** @debug: Debug hooks for delaying migration */
> > +	struct {
> > +		/**
> > +		 * @debug.resfix_stoppers: Stop and wait at different stages
> > +		 * during post migration recovery
> > +		 */
> > +		u8 resfix_stoppers;
> > +	} debug;
> >  	/**
> >  	 * @resfix_marker: Marker sent on start and on end of post-migration
> >  	 * steps.
> 
> as this is still a quite invasive change, can you post a IGT patch which uses these stop-points to prove it works as expected?

I wouldn’t call this an invasive change, but I fully agree we need an
IGT + vmtb case here. If this is manually verified, it’s probably not a
blocker IMO. This really should go into the 6.19 PR if we can make it,
as I think everything for VF migration enablement is ready in 6.19,
right?

Matt

> 

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

end of thread, other threads:[~2025-11-21  7:21 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-20 14:51 [PATCH v5 0/3] VF double migration Satyanarayana K V P
2025-11-20 14:51 ` [PATCH v5 1/3] drm/xe/vf: Enable VF migration only on supported GuC versions Satyanarayana K V P
2025-11-20 21:18   ` Michal Wajdeczko
2025-11-20 14:52 ` [PATCH v5 2/3] drm/xe/vf: Introduce RESFIX start marker support Satyanarayana K V P
2025-11-20 21:37   ` Michal Wajdeczko
2025-11-20 14:52 ` [PATCH v5 3/3] drm/xe/vf: Add debugfs entries to test VF double migration Satyanarayana K V P
2025-11-20 21:53   ` Michal Wajdeczko
2025-11-21  7:21     ` Matthew Brost
2025-11-20 16:01 ` ✓ CI.KUnit: success for VF double migration (rev5) Patchwork
2025-11-20 16:40 ` ✓ Xe.CI.BAT: " Patchwork
2025-11-20 21:10 ` ✗ Xe.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;
as well as URLs for NNTP newsgroup(s).