Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/4] Split GuC ID space into usable and shareable pools
@ 2026-08-27 10:28 Piórkowski, Piotr
  2026-08-27 10:28 ` [PATCH v3 1/4] drm/xe/guc: Split GuC ID manager " Piórkowski, Piotr
                   ` (6 more replies)
  0 siblings, 7 replies; 9+ messages in thread
From: Piórkowski, Piotr @ 2026-08-27 10:28 UTC (permalink / raw)
  To: intel-xe; +Cc: Piotr Piórkowski

From: Piotr Piórkowski <piotr.piorkowski@intel.com>

The GuC ID manager currently treats all GuC IDs as a single pool shared
between GuC submission and SR-IOV related allocations.

This series introduces explicit separation between IDs that can be used
for GuC submission and IDs that can be shared with VFs. The ID manager
gains support for independent usable and shareable pools, dedicated
allocation interfaces, pool-specific accounting and validation, and
extended test coverage.

To preserve existing behaviour, both pools continue to map onto the same
GuC ID space where appropriate. GuC submission is updated to explicitly
allocate IDs from the usable pool, while ID manager initialization is
adapted to expose the correct ID ranges for native, PF and VF operating
modes.

v1 -> v2:
 - Fix issues reported by Sashiko (top-down VF ID search, KUNIT_EXPECT in
   locked sections, xe_root_mmio_gt() for the primary GT).
v2 -> v3:
 - Guard failed ID reservations before releasing test allocations.
 - Fix shareable spare quota accounting to include PF-exclusive usable IDs.
 - Skip some tests required PF mode if there is not CONFIG_PCI_IOV
 - Some minor other changes

Piotr Piórkowski (4):
  drm/xe/guc: Split GuC ID manager into usable and shareable pools
  drm/xe/kunit: Extend GuC ID manager split-pool coverage
  drm/xe/guc: Start use explicitly usable GuC IDs for for submission
  drm/xe/pf: Explicitly use shareable GuC IDs for VFs provisioning

 .../xe/tests/xe_gt_sriov_pf_config_kunit.c    |   5 +
 drivers/gpu/drm/xe/tests/xe_guc_id_mgr_test.c | 633 +++++++++++++++++-
 drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c    |  22 +-
 drivers/gpu/drm/xe/xe_guc.c                   |   4 +-
 drivers/gpu/drm/xe/xe_guc_id_mgr.c            | 458 ++++++++++---
 drivers/gpu/drm/xe/xe_guc_id_mgr.h            |  31 +-
 drivers/gpu/drm/xe/xe_guc_submit.c            |  27 +-
 drivers/gpu/drm/xe/xe_guc_submit.h            |   2 +-
 drivers/gpu/drm/xe/xe_guc_types.h             |   8 +-
 9 files changed, 1034 insertions(+), 156 deletions(-)

-- 
2.34.1


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

* [PATCH v3 1/4] drm/xe/guc: Split GuC ID manager into usable and shareable pools
  2026-08-27 10:28 [PATCH v3 0/4] Split GuC ID space into usable and shareable pools Piórkowski, Piotr
@ 2026-08-27 10:28 ` Piórkowski, Piotr
  2026-08-27 10:29 ` [PATCH v3 2/4] drm/xe/kunit: Extend GuC ID manager split-pool coverage Piórkowski, Piotr
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Piórkowski, Piotr @ 2026-08-27 10:28 UTC (permalink / raw)
  To: intel-xe; +Cc: Piotr Piórkowski, Michal Wajdeczko

From: Piotr Piórkowski <piotr.piorkowski@intel.com>

Modify the GuC identifier manager so that it distinguishes between
usable GuC IDs allocated for GuC submissions, and shareable those that
can be shared with VFs. Both pools are represented as a single bitmap
and may overlap.
Let's Replace the single-pool accounting model with separate usable and
shareable pools, add helpers for pool accounting and limits, and update
debug reporting.

For now, let's keep the current allocation behaviour by mapping both pools
onto the same GuC ID space. This prepares the ID manager for separate
management of submission IDs and VF allocations in following changes.

v2: Do not change how VF IDs are allocated in the legacy path (Sashiko)

v3: Fix shareable spare quota accounting to include
    PF-exclusive usable IDs.

Assisted-by: Claude:claude-5-sonnet
Signed-off-by: Piotr Piórkowski <piotr.piorkowski@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
---
 drivers/gpu/drm/xe/tests/xe_guc_id_mgr_test.c |  57 +--
 drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c    |   2 +-
 drivers/gpu/drm/xe/xe_guc_id_mgr.c            | 445 ++++++++++++++----
 drivers/gpu/drm/xe/xe_guc_id_mgr.h            |  20 +-
 drivers/gpu/drm/xe/xe_guc_types.h             |   8 +-
 5 files changed, 410 insertions(+), 122 deletions(-)

diff --git a/drivers/gpu/drm/xe/tests/xe_guc_id_mgr_test.c b/drivers/gpu/drm/xe/tests/xe_guc_id_mgr_test.c
index ee30a1939eb0..78d3de46b757 100644
--- a/drivers/gpu/drm/xe/tests/xe_guc_id_mgr_test.c
+++ b/drivers/gpu/drm/xe/tests/xe_guc_id_mgr_test.c
@@ -24,8 +24,8 @@ static void bad_init(struct kunit *test)
 {
 	struct xe_guc_id_mgr *idm = test->priv;
 
-	KUNIT_EXPECT_EQ(test, -EINVAL, xe_guc_id_mgr_init(idm, 0));
-	KUNIT_EXPECT_EQ(test, -ERANGE, xe_guc_id_mgr_init(idm, GUC_ID_MAX + 1));
+	KUNIT_EXPECT_EQ(test, -EINVAL, idm_init(idm, 0, 0));
+	KUNIT_EXPECT_EQ(test, -ERANGE, idm_init(idm, GUC_ID_MAX + 1, 0));
 }
 
 static void no_init(struct kunit *test)
@@ -43,12 +43,12 @@ static void init_fini(struct kunit *test)
 {
 	struct xe_guc_id_mgr *idm = test->priv;
 
-	KUNIT_ASSERT_EQ(test, 0, xe_guc_id_mgr_init(idm, -1));
+	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, GUC_ID_MAX, 0));
 	KUNIT_EXPECT_NOT_NULL(test, idm->bitmap);
-	KUNIT_EXPECT_EQ(test, idm->total, GUC_ID_MAX);
+	KUNIT_EXPECT_EQ(test, idm_total(idm), GUC_ID_MAX);
 	__fini_idm(NULL, idm);
 	KUNIT_EXPECT_NULL(test, idm->bitmap);
-	KUNIT_EXPECT_EQ(test, idm->total, 0);
+	KUNIT_EXPECT_EQ(test, idm_total(idm), 0);
 }
 
 static void check_used(struct kunit *test)
@@ -56,19 +56,19 @@ static void check_used(struct kunit *test)
 	struct xe_guc_id_mgr *idm = test->priv;
 	unsigned int n;
 
-	KUNIT_ASSERT_EQ(test, 0, xe_guc_id_mgr_init(idm, 2));
+	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, 2, 0));
 
 	mutex_lock(idm_mutex(idm));
 
-	for (n = 0; n < idm->total; n++) {
+	for (n = 0; n < idm_total(idm); n++) {
 		kunit_info(test, "n=%u", n);
-		KUNIT_EXPECT_EQ(test, idm->used, n);
-		KUNIT_EXPECT_GE(test, idm_reserve_chunk_locked(idm, 1, 0), 0);
-		KUNIT_EXPECT_EQ(test, idm->used, n + 1);
+		KUNIT_EXPECT_EQ(test, bitmap_weight(idm->bitmap, idm_total(idm)), n);
+		KUNIT_EXPECT_GE(test, xe_guc_id_mgr_reserve_usable_locked(idm, 1), 0);
+		KUNIT_EXPECT_EQ(test, bitmap_weight(idm->bitmap, idm_total(idm)), n + 1);
 	}
-	KUNIT_EXPECT_EQ(test, idm->used, idm->total);
-	idm_release_chunk_locked(idm, 0, idm->used);
-	KUNIT_EXPECT_EQ(test, idm->used, 0);
+	KUNIT_EXPECT_EQ(test, bitmap_weight(idm->bitmap, idm_total(idm)), idm_total(idm));
+	idm_release_chunk_locked(idm, 0, idm_total(idm));
+	KUNIT_EXPECT_EQ(test, bitmap_weight(idm->bitmap, idm_total(idm)), 0);
 
 	mutex_unlock(idm_mutex(idm));
 }
@@ -76,25 +76,12 @@ static void check_used(struct kunit *test)
 static void check_quota(struct kunit *test)
 {
 	struct xe_guc_id_mgr *idm = test->priv;
-	unsigned int n;
-
-	KUNIT_ASSERT_EQ(test, 0, xe_guc_id_mgr_init(idm, 2));
 
-	mutex_lock(idm_mutex(idm));
+	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, 2, 0));
 
-	for (n = 0; n < idm->total - 1; n++) {
-		kunit_info(test, "n=%u", n);
-		KUNIT_EXPECT_EQ(test, idm_reserve_chunk_locked(idm, 1, idm->total), -EDQUOT);
-		KUNIT_EXPECT_EQ(test, idm_reserve_chunk_locked(idm, 1, idm->total - n), -EDQUOT);
-		KUNIT_EXPECT_EQ(test, idm_reserve_chunk_locked(idm, idm->total - n, 1), -EDQUOT);
-		KUNIT_EXPECT_GE(test, idm_reserve_chunk_locked(idm, 1, 1), 0);
-	}
-	KUNIT_EXPECT_LE(test, 0, idm_reserve_chunk_locked(idm, 1, 0));
-	KUNIT_EXPECT_EQ(test, idm->used, idm->total);
-	idm_release_chunk_locked(idm, 0, idm->total);
-	KUNIT_EXPECT_EQ(test, idm->used, 0);
-
-	mutex_unlock(idm_mutex(idm));
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_reserve_usable(idm, 2), 0);
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_reserve_usable(idm, 1), -ENOSPC);
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_release_usable(idm, 0, 2), 0);
 }
 
 static void check_all(struct kunit *test)
@@ -102,14 +89,14 @@ static void check_all(struct kunit *test)
 	struct xe_guc_id_mgr *idm = test->priv;
 	unsigned int n;
 
-	KUNIT_ASSERT_EQ(test, 0, xe_guc_id_mgr_init(idm, -1));
+	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, GUC_ID_MAX, 0));
 
 	mutex_lock(idm_mutex(idm));
 
-	for (n = 0; n < idm->total; n++)
-		KUNIT_EXPECT_LE(test, 0, idm_reserve_chunk_locked(idm, 1, 0));
-	KUNIT_EXPECT_EQ(test, idm->used, idm->total);
-	for (n = 0; n < idm->total; n++)
+	for (n = 0; n < idm_total(idm); n++)
+		KUNIT_EXPECT_LE(test, 0, xe_guc_id_mgr_reserve_usable_locked(idm, 1));
+	KUNIT_EXPECT_EQ(test, bitmap_weight(idm->bitmap, idm_total(idm)), idm_total(idm));
+	for (n = 0; n < idm_total(idm); n++)
 		idm_release_chunk_locked(idm, n, 1);
 
 	mutex_unlock(idm_mutex(idm));
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
index be0a413ee17c..9445e5f32fe8 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
@@ -1182,7 +1182,7 @@ static u32 pf_estimate_fair_ctxs(struct xe_gt *gt, unsigned int num_vfs)
 {
 	struct xe_guc_id_mgr *idm = &gt->uc.guc.submission_state.idm;
 	u32 spare = pf_get_spare_ctxs(gt);
-	u32 fair = (idm->total - spare) / num_vfs;
+	u32 fair = (xe_guc_id_mgr_max_usable(idm) - spare) / num_vfs;
 	int ret;
 
 	for (; fair; --fair) {
diff --git a/drivers/gpu/drm/xe/xe_guc_id_mgr.c b/drivers/gpu/drm/xe/xe_guc_id_mgr.c
index e845425d670b..2c181d280552 100644
--- a/drivers/gpu/drm/xe/xe_guc_id_mgr.c
+++ b/drivers/gpu/drm/xe/xe_guc_id_mgr.c
@@ -34,6 +34,34 @@ static struct xe_device *idm_to_xe(struct xe_guc_id_mgr *idm)
 
 static void idm_print_locked(struct xe_guc_id_mgr *idm, struct drm_printer *p, int indent);
 
+static unsigned int idm_total(struct xe_guc_id_mgr *idm)
+{
+	if (idm->usable > GUC_ID_MAX - idm->shareable)
+		return GUC_ID_MAX;
+
+	return idm->usable + idm->shareable;
+}
+
+static unsigned int idm_shareable_start(struct xe_guc_id_mgr *idm)
+{
+	return idm_total(idm) - idm->shareable;
+}
+
+static unsigned int idm_used_usable(struct xe_guc_id_mgr *idm)
+{
+	lockdep_assert_held(idm_mutex(idm));
+
+	return bitmap_weight(idm->bitmap, idm->usable);
+}
+
+static unsigned int idm_used_shareable(struct xe_guc_id_mgr *idm)
+{
+	lockdep_assert_held(idm_mutex(idm));
+
+	return bitmap_weight(idm->bitmap, idm_total(idm)) -
+	       bitmap_weight(idm->bitmap, idm_shareable_start(idm));
+}
+
 static void __fini_idm(struct drm_device *drm, void *arg)
 {
 	struct xe_guc_id_mgr *idm = arg;
@@ -41,25 +69,60 @@ static void __fini_idm(struct drm_device *drm, void *arg)
 	mutex_lock(idm_mutex(idm));
 
 	if (IS_ENABLED(CONFIG_DRM_XE_DEBUG)) {
-		unsigned int weight = bitmap_weight(idm->bitmap, idm->total);
+		unsigned int weight = bitmap_weight(idm->bitmap, idm_total(idm));
 
 		if (weight) {
 			struct drm_printer p = xe_gt_info_printer(idm_to_gt(idm));
 
 			xe_gt_err(idm_to_gt(idm), "GUC ID manager unclean (%u/%u)\n",
-				  weight, idm->total);
+				  weight, idm_total(idm));
 			idm_print_locked(idm, &p, 1);
 		}
 	}
 
 	bitmap_free(idm->bitmap);
 	idm->bitmap = NULL;
-	idm->total = 0;
-	idm->used = 0;
+	idm->usable = 0;
+	idm->shareable = 0;
 
 	mutex_unlock(idm_mutex(idm));
 }
 
+static int idm_init(struct xe_guc_id_mgr *idm, unsigned int usable, unsigned int shareable)
+{
+	bool overlap = usable > GUC_ID_MAX - shareable;
+	unsigned int total;
+	int ret;
+
+	if (!usable)
+		return -EINVAL;
+	if (usable > GUC_ID_MAX)
+		return -ERANGE;
+	if (shareable > GUC_ID_MAX)
+		return -ERANGE;
+
+	idm_assert(idm, !idm->bitmap);
+	idm_assert(idm, usable <= GUC_ID_MAX);
+	idm_assert(idm, shareable <= GUC_ID_MAX);
+	idm_assert(idm, !shareable || IS_SRIOV_PF(idm_to_xe(idm)));
+	total = overlap ? GUC_ID_MAX : usable + shareable;
+
+	idm->bitmap = bitmap_zalloc(total, GFP_KERNEL);
+	if (!idm->bitmap)
+		return -ENOMEM;
+
+	idm->usable = usable;
+	idm->shareable = shareable;
+
+	ret = drmm_add_action_or_reset(&idm_to_xe(idm)->drm, __fini_idm, idm);
+	if (ret)
+		return ret;
+
+	xe_gt_dbg(idm_to_gt(idm), "using %u GuC ID%s, %u GuC ID%s shareable with VFs\n",
+		  idm->usable, str_plural(idm->usable), idm->shareable, str_plural(idm->shareable));
+	return 0;
+}
+
 /**
  * xe_guc_id_mgr_init() - Initialize GuC context ID Manager.
  * @idm: the &xe_guc_id_mgr to initialize
@@ -68,19 +131,10 @@ static void __fini_idm(struct drm_device *drm, void *arg)
  * The bare-metal or PF driver can pass ~0 as &limit to indicate that all
  * context IDs supported by the GuC firmware are available for use.
  *
- * Only VF drivers will have to provide explicit number of context IDs
- * that they can use.
- *
  * Return: 0 on success or a negative error code on failure.
  */
 int xe_guc_id_mgr_init(struct xe_guc_id_mgr *idm, unsigned int limit)
 {
-	int ret;
-
-	idm_assert(idm, !idm->bitmap);
-	idm_assert(idm, !idm->total);
-	idm_assert(idm, !idm->used);
-
 	if (limit == ~0)
 		limit = GUC_ID_MAX;
 	else if (limit > GUC_ID_MAX)
@@ -88,70 +142,149 @@ int xe_guc_id_mgr_init(struct xe_guc_id_mgr *idm, unsigned int limit)
 	else if (!limit)
 		return -EINVAL;
 
-	idm->bitmap = bitmap_zalloc(limit, GFP_KERNEL);
-	if (!idm->bitmap)
-		return -ENOMEM;
-	idm->total = limit;
+	return idm_init(idm, limit, 0);
+}
 
-	ret = drmm_add_action_or_reset(&idm_to_xe(idm)->drm, __fini_idm, idm);
-	if (ret)
-		return ret;
+/**
+ * xe_guc_id_mgr_max_usable() - Get maximum number of usable GuC context IDs.
+ * @idm: the &xe_guc_id_mgr to query
+ *
+ * Return: maximum number of GuC context IDs that can be used by @idm for GuC submission.
+ */
+unsigned int xe_guc_id_mgr_max_usable(struct xe_guc_id_mgr *idm)
+{
+	return idm->usable;
+}
 
-	xe_gt_dbg(idm_to_gt(idm), "using %u GuC ID%s\n",
-		  idm->total, str_plural(idm->total));
-	return 0;
+/**
+ * xe_guc_id_mgr_max_shareable() - Get maximum number of shareable GuC context IDs.
+ * @idm: the &xe_guc_id_mgr to query
+ *
+ * Return: maximum number of GuC context IDs that can be shared with VFs.
+ */
+unsigned int xe_guc_id_mgr_max_shareable(struct xe_guc_id_mgr *idm)
+{
+	return idm->shareable;
 }
 
-static unsigned int find_last_zero_area(unsigned long *bitmap,
-					unsigned int total,
-					unsigned int count)
+static int idm_reserve_chunk_usable_locked(struct xe_guc_id_mgr *idm, unsigned int count)
+{
+	int id;
+
+	idm_assert(idm, count);
+	lockdep_assert_held(idm_mutex(idm));
+
+	if (!idm->usable)
+		return -ENODATA;
+
+	id = bitmap_find_next_zero_area(idm->bitmap, idm->usable, 0, count, 0);
+	if (id >= idm->usable)
+		return -ENOSPC;
+
+	bitmap_set(idm->bitmap, id, count);
+
+	return id;
+}
+
+static unsigned int idm_find_last_zero_area_in_range(unsigned long *bitmap,
+						     unsigned int range_start,
+						     unsigned int range_end,
+						     unsigned int count)
 {
-	unsigned int found = total;
-	unsigned int rs, re, range;
+	unsigned int found = range_end;
+	unsigned int rs, re;
+
+	for_each_clear_bitrange(rs, re, bitmap, range_end) {
+		unsigned int start = max(rs, range_start);
+		unsigned int end = min(re, range_end);
+		unsigned int range;
 
-	for_each_clear_bitrange(rs, re, bitmap, total) {
-		range = re - rs;
+		if (start >= end)
+			continue;
+
+		range = end - start;
 		if (range < count)
 			continue;
-		found = rs + (range - count);
+
+		found = start + (range - count);
 	}
+
 	return found;
 }
 
-static int idm_reserve_chunk_locked(struct xe_guc_id_mgr *idm,
-				    unsigned int count, unsigned int retain)
+static int idm_reserve_chunk_shareable_locked(struct xe_guc_id_mgr *idm, unsigned int count,
+					      unsigned int spare)
 {
+	unsigned int shareable_start = idm_shareable_start(idm);
+	unsigned int total = idm_total(idm);
 	int id;
 
 	idm_assert(idm, count);
 	lockdep_assert_held(idm_mutex(idm));
 
-	if (!idm->total)
+	if (!idm->shareable)
 		return -ENODATA;
 
-	if (retain) {
+	if (shareable_start < idm->usable) {
 		/*
-		 * For IDs reservations (used on PF for VFs) we want to make
-		 * sure there will be at least 'retain' available for the PF
+		 * Spare is meaningful only for IDs that are shared between usable and
+		 * shareable pools. For non-overlapping pools, shareable reservations do
+		 * not reduce PF usable capacity, so there is nothing to retain.
 		 */
-		if (idm->used + count + retain > idm->total)
+		id = idm_find_last_zero_area_in_range(idm->bitmap, shareable_start, total, count);
+		if (id >= total)
+			return -ENOSPC;
+
+		if (spare) {
+			unsigned int used_usable = bitmap_weight(idm->bitmap, idm->usable);
+			unsigned int overlap_start = max_t(int, id, shareable_start);
+			unsigned int overlap_end = min(id + count, idm->usable);
+			unsigned int need_overlap = overlap_end > overlap_start ?
+						    overlap_end - overlap_start : 0;
+
+			if (used_usable + need_overlap + spare > idm->usable)
+				return -EDQUOT;
+		}
+	} else {
+		id = bitmap_find_next_zero_area(idm->bitmap, total, shareable_start, count, 0);
+		if (id + count > total)
+			return -ENOSPC;
+		if (id < shareable_start)
+			return -ENOSPC;
+	}
+
+	bitmap_set(idm->bitmap, id, count);
+
+	return id;
+}
+
+static int idm_reserve_chunk_locked(struct xe_guc_id_mgr *idm, unsigned int count,
+				    unsigned int retain)
+{
+	unsigned int total = idm_total(idm);
+	int id;
+
+	idm_assert(idm, count);
+	lockdep_assert_held(idm_mutex(idm));
+
+	if (!total)
+		return -ENODATA;
+
+	if (retain) {
+		unsigned int used = bitmap_weight(idm->bitmap, total);
+
+		if (used + count + retain > total)
 			return -EDQUOT;
-		/*
-		 * ... and we want to reserve highest IDs close to the end.
-		 */
-		id = find_last_zero_area(idm->bitmap, idm->total, count);
+
+		id = idm_find_last_zero_area_in_range(idm->bitmap, 0, total, count);
 	} else {
-		/*
-		 * For regular IDs reservations (used by submission code)
-		 * we start searching from the lower range of IDs.
-		 */
-		id = bitmap_find_next_zero_area(idm->bitmap, idm->total, 0, count, 0);
+		id = bitmap_find_next_zero_area(idm->bitmap, total, 0, count, 0);
 	}
-	if (id >= idm->total)
+
+	if (id >= total)
 		return -ENOSPC;
 
 	bitmap_set(idm->bitmap, id, count);
-	idm->used += count;
 
 	return id;
 }
@@ -160,9 +293,8 @@ static void idm_release_chunk_locked(struct xe_guc_id_mgr *idm,
 				     unsigned int start, unsigned int count)
 {
 	idm_assert(idm, count);
-	idm_assert(idm, count <= idm->used);
-	idm_assert(idm, start < idm->total);
-	idm_assert(idm, start + count - 1 < idm->total);
+	idm_assert(idm, start < idm_total(idm));
+	idm_assert(idm, start + count - 1 < idm_total(idm));
 	lockdep_assert_held(idm_mutex(idm));
 
 	if (IS_ENABLED(CONFIG_DRM_XE_DEBUG)) {
@@ -172,22 +304,61 @@ static void idm_release_chunk_locked(struct xe_guc_id_mgr *idm,
 			idm_assert(idm, test_bit(start + n, idm->bitmap));
 	}
 	bitmap_clear(idm->bitmap, start, count);
-	idm->used -= count;
+}
+
+static int idm_release_chunk_in_range_locked(struct xe_guc_id_mgr *idm,
+					     unsigned int start,
+					     unsigned int count,
+					     unsigned int range_start,
+					     unsigned int range_end)
+{
+	lockdep_assert_held(idm_mutex(idm));
+
+	if (!count)
+		return -EINVAL;
+
+	if (start < range_start || start >= range_end)
+		return -ERANGE;
+
+	if (count > range_end - start)
+		return -ERANGE;
+
+	idm_release_chunk_locked(idm, start, count);
+
+	return 0;
 }
 
 /**
- * xe_guc_id_mgr_reserve_locked() - Reserve one or more GuC context IDs.
+ * xe_guc_id_mgr_reserve_usable_locked() - Reserve one or more usable GuC context IDs.
  * @idm: the &xe_guc_id_mgr
- * @count: number of IDs to allocate (can't be 0)
+ * @count: number of usable GuC context IDs to reserve (can't be 0)
  *
- * This function is dedicated for the use by the GuC submission code,
- * where submission lock is already taken.
+ * This function is dedicated for use by the GuC submission code when the
+ * submission lock is already held.
  *
  * Return: ID of allocated GuC context or a negative error code on failure.
  */
-int xe_guc_id_mgr_reserve_locked(struct xe_guc_id_mgr *idm, unsigned int count)
+int xe_guc_id_mgr_reserve_usable_locked(struct xe_guc_id_mgr *idm, unsigned int count)
 {
-	return idm_reserve_chunk_locked(idm, count, 0);
+	return idm_reserve_chunk_usable_locked(idm, count);
+}
+
+/**
+ * xe_guc_id_mgr_reserve_shareable_locked() - Reserve one or more shareable GuC context IDs.
+ * @idm: the &xe_guc_id_mgr
+ * @count: number of shareable GuC context IDs to reserve (can't be 0)
+ * @spare: number of usable IDs to keep available for the PF
+ *
+ * This function is dedicated for use by the PF driver, which expects the
+ * reserved range of IDs to be contiguous. The function expects that the
+ * caller has already taken the lock.
+ *
+ * Return: ID of allocated GuC context or a negative error code on failure.
+ */
+int xe_guc_id_mgr_reserve_shareable_locked(struct xe_guc_id_mgr *idm, unsigned int count,
+					   unsigned int spare)
+{
+	return idm_reserve_chunk_shareable_locked(idm, count, spare);
 }
 
 /**
@@ -206,60 +377,175 @@ void xe_guc_id_mgr_release_locked(struct xe_guc_id_mgr *idm, unsigned int id,
 }
 
 /**
- * xe_guc_id_mgr_reserve() - Reserve a range of GuC context IDs.
+ * xe_guc_id_mgr_release_usable_locked() - Release one or more usable GuC context IDs.
  * @idm: the &xe_guc_id_mgr
- * @count: number of GuC context IDs to reserve (can't be 0)
- * @retain: number of GuC context IDs to keep available (can't be 0)
+ * @id: the first usable GuC context ID to release
+ * @count: number of usable GuC context IDs to release
+ *
+ * This function is dedicated for use by the GuC submission code when the
+ * submission lock is already held.
  *
- * This function is dedicated for the use by the PF driver which expects that
- * reserved range of IDs will be contiguous and that there will be at least
- * &retain IDs still available for the PF after this reservation.
+ * Return: 0 on success, or a negative error code on failure.
+ */
+int xe_guc_id_mgr_release_usable_locked(struct xe_guc_id_mgr *idm, unsigned int id,
+					unsigned int count)
+{
+	return idm_release_chunk_in_range_locked(idm, id, count, 0, idm->usable);
+}
+
+/**
+ * xe_guc_id_mgr_release_shareable_locked() - Release one or more shareable GuC context IDs.
+ * @idm: the &xe_guc_id_mgr
+ * @id: the first shareable GuC context ID to release
+ * @count: number of shareable GuC context IDs to release
+ *
+ * Return: 0 on success, or a negative error code on failure.
+ */
+int xe_guc_id_mgr_release_shareable_locked(struct xe_guc_id_mgr *idm, unsigned int id,
+					   unsigned int count)
+{
+	return idm_release_chunk_in_range_locked(idm, id, count,
+						 idm_shareable_start(idm), idm_total(idm));
+}
+
+/**
+ * xe_guc_id_mgr_reserve_usable() - Reserve one or more usable GuC context IDs.
+ * @idm: the &xe_guc_id_mgr
+ * @count: number of usable GuC context IDs to reserve (can't be 0)
+ *
+ * Return: ID of allocated GuC context or a negative error code on failure.
+ */
+int xe_guc_id_mgr_reserve_usable(struct xe_guc_id_mgr *idm, unsigned int count)
+{
+	guard(mutex)(idm_mutex(idm));
+
+	idm_assert(idm, count);
+
+	return idm_reserve_chunk_usable_locked(idm, count);
+}
+
+/**
+ * xe_guc_id_mgr_reserve_shareable() - Reserve one or more shareable GuC context IDs for VFs.
+ * @idm: the &xe_guc_id_mgr
+ * @count: number of shareable GuC context IDs to reserve (can't be 0)
+ * @spare: number of usable IDs to keep available for the PF
+ *
+ * This function is dedicated for use by the PF driver, which expects the
+ * reserved range of IDs to be contiguous.
  *
  * Return: starting ID of the allocated GuC context ID range or
  *         a negative error code on failure.
  */
-int xe_guc_id_mgr_reserve(struct xe_guc_id_mgr *idm,
-			  unsigned int count, unsigned int retain)
+int xe_guc_id_mgr_reserve_shareable(struct xe_guc_id_mgr *idm, unsigned int count,
+				    unsigned int spare)
+{
+	guard(mutex)(idm_mutex(idm));
+
+	idm_assert(idm, count);
+
+	return idm_reserve_chunk_shareable_locked(idm, count, spare);
+}
+
+int xe_guc_id_mgr_reserve_locked(struct xe_guc_id_mgr *idm, unsigned int count)
+{
+	return idm_reserve_chunk_locked(idm, count, 0);
+}
+
+int xe_guc_id_mgr_reserve(struct xe_guc_id_mgr *idm, unsigned int count,
+			  unsigned int retain)
 {
 	int ret;
 
 	idm_assert(idm, count);
 	idm_assert(idm, retain);
 
-	mutex_lock(idm_mutex(idm));
+	guard(mutex)(idm_mutex(idm));
 	ret = idm_reserve_chunk_locked(idm, count, retain);
-	mutex_unlock(idm_mutex(idm));
 
 	return ret;
 }
 
 /**
- * xe_guc_id_mgr_release() - Release a range of GuC context IDs.
+ * xe_guc_id_mgr_release() - Release one or more GuC context IDs.
  * @idm: the &xe_guc_id_mgr
- * @start: the starting ID of GuC context range to release
+ * @start: the first GuC context ID to release
  * @count: number of GuC context IDs to release
  */
 void xe_guc_id_mgr_release(struct xe_guc_id_mgr *idm,
 			   unsigned int start, unsigned int count)
 {
-	mutex_lock(idm_mutex(idm));
+	guard(mutex)(idm_mutex(idm));
+
 	idm_release_chunk_locked(idm, start, count);
-	mutex_unlock(idm_mutex(idm));
 }
 
-static void idm_print_locked(struct xe_guc_id_mgr *idm, struct drm_printer *p, int indent)
+/**
+ * xe_guc_id_mgr_release_usable() - Release one or more usable GuC context IDs.
+ * @idm: the &xe_guc_id_mgr
+ * @id: the first usable GuC context ID to release
+ * @count: number of usable GuC context IDs to release
+ *
+ * Return: 0 on success, or a negative error code on failure.
+ */
+int xe_guc_id_mgr_release_usable(struct xe_guc_id_mgr *idm, unsigned int id, unsigned int count)
+{
+	guard(mutex)(idm_mutex(idm));
+
+	return xe_guc_id_mgr_release_usable_locked(idm, id, count);
+}
+
+/**
+ * xe_guc_id_mgr_release_shareable() - Release one or more shareable GuC context IDs.
+ * @idm: the &xe_guc_id_mgr
+ * @id: the first shareable GuC context ID to release
+ * @count: number of shareable GuC context IDs to release
+ *
+ * Return: 0 on success, or a negative error code on failure.
+ */
+int xe_guc_id_mgr_release_shareable(struct xe_guc_id_mgr *idm, unsigned int id,
+				    unsigned int count)
+{
+	guard(mutex)(idm_mutex(idm));
+
+	return xe_guc_id_mgr_release_shareable_locked(idm, id, count);
+}
+
+static void idm_print_range_locked(struct xe_guc_id_mgr *idm,
+				   struct drm_printer *p,
+				   int indent,
+				   const char *name,
+				   unsigned int range_start,
+				   unsigned int range_end,
+				   unsigned int used)
 {
 	unsigned int rs, re;
 
 	lockdep_assert_held(idm_mutex(idm));
 
-	drm_printf_indent(p, indent, "total %u\n", idm->total);
+	drm_printf_indent(p, indent, "%s used %u\n", name, used);
+	for_each_set_bitrange(rs, re, idm->bitmap, range_end) {
+		rs = max(rs, range_start);
+		re = min(re, range_end);
+
+		if (rs < re)
+			drm_printf_indent(p, indent, "%s range %u..%u (%u)\n",
+					  name, rs, re - 1, re - rs);
+	}
+}
+
+static void idm_print_locked(struct xe_guc_id_mgr *idm, struct drm_printer *p, int indent)
+{
+	lockdep_assert_held(idm_mutex(idm));
+
+	drm_printf_indent(p, indent, "total %u\n", idm_total(idm));
 	if (!idm->bitmap)
 		return;
 
-	drm_printf_indent(p, indent, "used %u\n", idm->used);
-	for_each_set_bitrange(rs, re, idm->bitmap, idm->total)
-		drm_printf_indent(p, indent, "range %u..%u (%u)\n", rs, re - 1, re - rs);
+	idm_print_range_locked(idm, p, indent, "usable", 0, idm->usable,
+			       idm_used_usable(idm));
+	idm_print_range_locked(idm, p, indent, "shareable",
+			       idm_shareable_start(idm), idm_total(idm),
+			       idm_used_shareable(idm));
 }
 
 /**
@@ -270,9 +556,8 @@ static void idm_print_locked(struct xe_guc_id_mgr *idm, struct drm_printer *p, i
  */
 void xe_guc_id_mgr_print(struct xe_guc_id_mgr *idm, struct drm_printer *p, int indent)
 {
-	mutex_lock(idm_mutex(idm));
+	guard(mutex)(idm_mutex(idm));
 	idm_print_locked(idm, p, indent);
-	mutex_unlock(idm_mutex(idm));
 }
 
 #if IS_BUILTIN(CONFIG_DRM_XE_KUNIT_TEST)
diff --git a/drivers/gpu/drm/xe/xe_guc_id_mgr.h b/drivers/gpu/drm/xe/xe_guc_id_mgr.h
index 368f8c80e4c7..209f99831f1b 100644
--- a/drivers/gpu/drm/xe/xe_guc_id_mgr.h
+++ b/drivers/gpu/drm/xe/xe_guc_id_mgr.h
@@ -9,13 +9,29 @@
 struct drm_printer;
 struct xe_guc_id_mgr;
 
-int xe_guc_id_mgr_init(struct xe_guc_id_mgr *idm, unsigned int count);
+int xe_guc_id_mgr_init(struct xe_guc_id_mgr *idm, unsigned int limit);
 
+unsigned int xe_guc_id_mgr_max_usable(struct xe_guc_id_mgr *idm);
+unsigned int xe_guc_id_mgr_max_shareable(struct xe_guc_id_mgr *idm);
+
+int xe_guc_id_mgr_reserve_usable_locked(struct xe_guc_id_mgr *idm, unsigned int count);
+int xe_guc_id_mgr_reserve_usable(struct xe_guc_id_mgr *idm, unsigned int count);
+int xe_guc_id_mgr_reserve_shareable_locked(struct xe_guc_id_mgr *idm, unsigned int count,
+					   unsigned int spare);
+int xe_guc_id_mgr_reserve_shareable(struct xe_guc_id_mgr *idm, unsigned int count,
+				    unsigned int spare);
 int xe_guc_id_mgr_reserve_locked(struct xe_guc_id_mgr *idm, unsigned int count);
+int xe_guc_id_mgr_reserve(struct xe_guc_id_mgr *idm, unsigned int count, unsigned int retain);
 void xe_guc_id_mgr_release_locked(struct xe_guc_id_mgr *idm, unsigned int id, unsigned int count);
+int xe_guc_id_mgr_release_usable_locked(struct xe_guc_id_mgr *idm, unsigned int id,
+					unsigned int count);
+int xe_guc_id_mgr_release_shareable_locked(struct xe_guc_id_mgr *idm, unsigned int id,
+					   unsigned int count);
 
-int xe_guc_id_mgr_reserve(struct xe_guc_id_mgr *idm, unsigned int count, unsigned int retain);
 void xe_guc_id_mgr_release(struct xe_guc_id_mgr *idm, unsigned int start, unsigned int count);
+int xe_guc_id_mgr_release_usable(struct xe_guc_id_mgr *idm, unsigned int id, unsigned int count);
+int xe_guc_id_mgr_release_shareable(struct xe_guc_id_mgr *idm, unsigned int id,
+				    unsigned int count);
 
 void xe_guc_id_mgr_print(struct xe_guc_id_mgr *idm, struct drm_printer *p, int indent);
 
diff --git a/drivers/gpu/drm/xe/xe_guc_types.h b/drivers/gpu/drm/xe/xe_guc_types.h
index 3dbcb1331690..6da43691e54c 100644
--- a/drivers/gpu/drm/xe/xe_guc_types.h
+++ b/drivers/gpu/drm/xe/xe_guc_types.h
@@ -42,10 +42,10 @@ struct xe_guc_db_mgr {
 struct xe_guc_id_mgr {
 	/** @bitmap: bitmap to track allocated IDs */
 	unsigned long *bitmap;
-	/** @total: total number of IDs being managed */
-	unsigned int total;
-	/** @used: number of IDs currently in use */
-	unsigned int used;
+	/** @usable: number of IDs being managed for GuC submission */
+	unsigned int usable;
+	/** @shareable: number of IDs that can be shared with VFs */
+	unsigned int shareable;
 };
 
 /**
-- 
2.34.1


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

* [PATCH v3 2/4] drm/xe/kunit: Extend GuC ID manager split-pool coverage
  2026-08-27 10:28 [PATCH v3 0/4] Split GuC ID space into usable and shareable pools Piórkowski, Piotr
  2026-08-27 10:28 ` [PATCH v3 1/4] drm/xe/guc: Split GuC ID manager " Piórkowski, Piotr
@ 2026-08-27 10:29 ` Piórkowski, Piotr
  2026-08-27 10:44   ` sashiko-bot
  2026-08-27 10:29 ` [PATCH v3 3/4] drm/xe/guc: Start use explicitly usable GuC IDs for for submission Piórkowski, Piotr
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 9+ messages in thread
From: Piórkowski, Piotr @ 2026-08-27 10:29 UTC (permalink / raw)
  To: intel-xe; +Cc: Piotr Piórkowski, Michal Wajdeczko

From: Piotr Piórkowski <piotr.piorkowski@intel.com>

Expand the GuC ID manager KUnit coverage to exercise the new
usable/shareable pool model.

v2: Use KUNIT_EXPECT instead of KUNIT_ASSERT inside the locked section
    so the mutex is not leaked on failure (Sashiko).
v3: Guard failed ID reservations before releasing test allocations.

Assisted-by: Claude:claude-5-sonnet
Signed-off-by: Piotr Piórkowski <piotr.piorkowski@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
---
 drivers/gpu/drm/xe/tests/xe_guc_id_mgr_test.c | 575 +++++++++++++++++-
 1 file changed, 561 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/xe/tests/xe_guc_id_mgr_test.c b/drivers/gpu/drm/xe/tests/xe_guc_id_mgr_test.c
index 78d3de46b757..bf5d2beaaead 100644
--- a/drivers/gpu/drm/xe/tests/xe_guc_id_mgr_test.c
+++ b/drivers/gpu/drm/xe/tests/xe_guc_id_mgr_test.c
@@ -7,13 +7,27 @@
 
 #include "xe_device.h"
 #include "xe_kunit_helpers.h"
+#include "xe_pci_test.h"
 
 static int guc_id_mgr_test_init(struct kunit *test)
 {
+	struct xe_pci_fake_data *fake;
 	struct xe_guc_id_mgr *idm;
 
+	/* Keep one logical suite: use PF fixture when IOV is enabled. */
+	fake = kunit_kzalloc(test, sizeof(*fake), GFP_KERNEL);
+	if (!fake)
+		return -ENOMEM;
+
+	*fake = (struct xe_pci_fake_data) {
+		.sriov_mode = XE_SRIOV_MODE_PF,
+		.platform = XE_TIGERLAKE, /* some random platform */
+		.subplatform = XE_SUBPLATFORM_NONE,
+	};
+	test->priv = fake;
+
 	xe_kunit_helper_xe_device_test_init(test);
-	idm = &xe_device_get_gt(test->priv, 0)->uc.guc.submission_state.idm;
+	idm = &xe_root_mmio_gt(test->priv)->uc.guc.submission_state.idm;
 
 	mutex_init(idm_mutex(idm));
 	test->priv = idm;
@@ -33,10 +47,10 @@ static void no_init(struct kunit *test)
 	struct xe_guc_id_mgr *idm = test->priv;
 
 	mutex_lock(idm_mutex(idm));
-	KUNIT_EXPECT_EQ(test, -ENODATA, xe_guc_id_mgr_reserve_locked(idm, 0));
+	KUNIT_EXPECT_EQ(test, -ENODATA, xe_guc_id_mgr_reserve_usable_locked(idm, 0));
 	mutex_unlock(idm_mutex(idm));
 
-	KUNIT_EXPECT_EQ(test, -ENODATA, xe_guc_id_mgr_reserve(idm, 1, 1));
+	KUNIT_EXPECT_EQ(test, -ENODATA, xe_guc_id_mgr_reserve_shareable(idm, 1, 1));
 }
 
 static void init_fini(struct kunit *test)
@@ -51,6 +65,23 @@ static void init_fini(struct kunit *test)
 	KUNIT_EXPECT_EQ(test, idm_total(idm), 0);
 }
 
+static bool require_iov_config_or_skip(struct kunit *test)
+{
+	if (!IS_ENABLED(CONFIG_PCI_IOV)) {
+		kunit_skip(test, "requires CONFIG_PCI_IOV");
+		return false;
+	}
+
+	return true;
+}
+
+static unsigned int test_idm_used_total(struct xe_guc_id_mgr *idm)
+{
+	lockdep_assert_held(idm_mutex(idm));
+
+	return bitmap_weight(idm->bitmap, idm_total(idm));
+}
+
 static void check_used(struct kunit *test)
 {
 	struct xe_guc_id_mgr *idm = test->priv;
@@ -62,13 +93,13 @@ static void check_used(struct kunit *test)
 
 	for (n = 0; n < idm_total(idm); n++) {
 		kunit_info(test, "n=%u", n);
-		KUNIT_EXPECT_EQ(test, bitmap_weight(idm->bitmap, idm_total(idm)), n);
+		KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), n);
 		KUNIT_EXPECT_GE(test, xe_guc_id_mgr_reserve_usable_locked(idm, 1), 0);
-		KUNIT_EXPECT_EQ(test, bitmap_weight(idm->bitmap, idm_total(idm)), n + 1);
+		KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), n + 1);
 	}
-	KUNIT_EXPECT_EQ(test, bitmap_weight(idm->bitmap, idm_total(idm)), idm_total(idm));
-	idm_release_chunk_locked(idm, 0, idm_total(idm));
-	KUNIT_EXPECT_EQ(test, bitmap_weight(idm->bitmap, idm_total(idm)), 0);
+	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), idm_total(idm));
+	idm_release_chunk_locked(idm, 0, test_idm_used_total(idm));
+	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), 0);
 
 	mutex_unlock(idm_mutex(idm));
 }
@@ -76,12 +107,43 @@ static void check_used(struct kunit *test)
 static void check_quota(struct kunit *test)
 {
 	struct xe_guc_id_mgr *idm = test->priv;
+	unsigned int usable = GUC_ID_MAX - 10;
+	unsigned int shareable = 20;
+	unsigned int spare = 11;
+	unsigned int tail = 10;
+	int usable_id, tail_id;
 
-	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, 2, 0));
+	if (!require_iov_config_or_skip(test))
+		return;
+
+	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, usable, shareable));
+
+	mutex_lock(idm_mutex(idm));
+
+	/* spare is larger than the overlap, but the PF-exclusive range is free. */
+	usable_id = xe_guc_id_mgr_reserve_usable_locked(idm, usable - spare);
+	KUNIT_EXPECT_GE(test, usable_id, 0);
+	if (usable_id < 0) {
+		mutex_unlock(idm_mutex(idm));
+		return;
+	}
+
+	tail_id = xe_guc_id_mgr_reserve_shareable_locked(idm, tail, spare);
+	KUNIT_EXPECT_EQ(test, tail_id, usable);
+	if (tail_id < 0) {
+		idm_release_chunk_locked(idm, usable_id, usable - spare);
+		mutex_unlock(idm_mutex(idm));
+		return;
+	}
+
+	KUNIT_EXPECT_EQ(test,
+			xe_guc_id_mgr_reserve_shareable_locked(idm, 1, spare), -EDQUOT);
+
+	idm_release_chunk_locked(idm, usable_id, usable - spare);
+	idm_release_chunk_locked(idm, tail_id, tail);
+	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), 0);
 
-	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_reserve_usable(idm, 2), 0);
-	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_reserve_usable(idm, 1), -ENOSPC);
-	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_release_usable(idm, 0, 2), 0);
+	mutex_unlock(idm_mutex(idm));
 }
 
 static void check_all(struct kunit *test)
@@ -94,14 +156,485 @@ static void check_all(struct kunit *test)
 	mutex_lock(idm_mutex(idm));
 
 	for (n = 0; n < idm_total(idm); n++)
-		KUNIT_EXPECT_LE(test, 0, xe_guc_id_mgr_reserve_usable_locked(idm, 1));
-	KUNIT_EXPECT_EQ(test, bitmap_weight(idm->bitmap, idm_total(idm)), idm_total(idm));
+		KUNIT_EXPECT_GE(test, xe_guc_id_mgr_reserve_usable_locked(idm, 1), 0);
+	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), idm_total(idm));
 	for (n = 0; n < idm_total(idm); n++)
 		idm_release_chunk_locked(idm, n, 1);
 
 	mutex_unlock(idm_mutex(idm));
 }
 
+static void check_limits(struct kunit *test)
+{
+	struct xe_guc_id_mgr *idm = test->priv;
+
+	if (!require_iov_config_or_skip(test))
+		return;
+
+	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, 10, 20));
+
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_max_usable(idm), 10);
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_max_shareable(idm), 20);
+	KUNIT_EXPECT_EQ(test, idm_total(idm), 30);
+}
+
+static void check_overlap(struct kunit *test)
+{
+	struct xe_guc_id_mgr *idm = test->priv;
+
+	if (!require_iov_config_or_skip(test))
+		return;
+
+	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, GUC_ID_MAX, GUC_ID_MAX));
+
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_max_usable(idm), GUC_ID_MAX);
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_max_shareable(idm), GUC_ID_MAX);
+	KUNIT_EXPECT_EQ(test, idm_total(idm), GUC_ID_MAX);
+}
+
+static void check_overlap_alloc(struct kunit *test)
+{
+	struct xe_guc_id_mgr *idm = test->priv;
+	unsigned int total;
+	int usable_id, shareable_id;
+
+	if (!require_iov_config_or_skip(test))
+		return;
+
+	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, GUC_ID_MAX, GUC_ID_MAX));
+
+	mutex_lock(idm_mutex(idm));
+	total = idm_total(idm);
+
+	usable_id = xe_guc_id_mgr_reserve_usable_locked(idm, 2);
+	KUNIT_EXPECT_EQ(test, usable_id, 0);
+
+	shareable_id = xe_guc_id_mgr_reserve_shareable_locked(idm, 3, 0);
+	KUNIT_EXPECT_EQ(test, shareable_id, total - 3);
+
+	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), 5);
+	KUNIT_EXPECT_EQ(test, idm_used_usable(idm), 5);
+	KUNIT_EXPECT_EQ(test, idm_used_shareable(idm), 5);
+
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_release_usable_locked(idm, usable_id, 2), 0);
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_release_shareable_locked(idm, shareable_id, 3), 0);
+	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), 0);
+
+	mutex_unlock(idm_mutex(idm));
+}
+
+static void check_overlap_release(struct kunit *test)
+{
+	struct xe_guc_id_mgr *idm = test->priv;
+	unsigned int total;
+	int id;
+
+	if (!require_iov_config_or_skip(test))
+		return;
+
+	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, GUC_ID_MAX, GUC_ID_MAX));
+
+	mutex_lock(idm_mutex(idm));
+	total = idm_total(idm);
+
+	id = xe_guc_id_mgr_reserve_usable_locked(idm, 4);
+	KUNIT_EXPECT_EQ(test, id, 0);
+
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_release_shareable_locked(idm, id, 4), 0);
+	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), 0);
+
+	id = xe_guc_id_mgr_reserve_shareable_locked(idm, 4, 0);
+	KUNIT_EXPECT_EQ(test, id, total - 4);
+
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_release_usable_locked(idm, id, 4), 0);
+	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), 0);
+
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_release_usable_locked(idm, 0, 0), -EINVAL);
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_release_shareable_locked(idm, 0, 0), -EINVAL);
+
+	mutex_unlock(idm_mutex(idm));
+}
+
+static void check_overlap_partial_init(struct kunit *test)
+{
+	struct xe_guc_id_mgr *idm = test->priv;
+	unsigned int pools_size = (GUC_ID_MAX / 3) * 2;
+	unsigned int shareable_start;
+	unsigned int rest;
+	int id;
+
+	if (!require_iov_config_or_skip(test))
+		return;
+
+	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, pools_size, pools_size));
+
+	mutex_lock(idm_mutex(idm));
+
+	shareable_start = idm_shareable_start(idm);
+	rest = idm_total(idm) - pools_size;
+
+	KUNIT_EXPECT_EQ(test, idm_total(idm), GUC_ID_MAX);
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_max_usable(idm), pools_size);
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_max_shareable(idm), pools_size);
+	KUNIT_EXPECT_EQ(test, shareable_start, GUC_ID_MAX - pools_size);
+
+	id = xe_guc_id_mgr_reserve_usable_locked(idm, pools_size);
+	KUNIT_EXPECT_EQ(test, id, 0);
+
+	id = xe_guc_id_mgr_reserve_shareable_locked(idm, rest, 0);
+	KUNIT_EXPECT_EQ(test, id, pools_size);
+
+	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), GUC_ID_MAX);
+	KUNIT_EXPECT_EQ(test, idm_used_usable(idm), pools_size);
+	KUNIT_EXPECT_EQ(test, idm_used_shareable(idm), pools_size);
+
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_release_usable_locked(idm, 0, pools_size), 0);
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_release_shareable_locked(idm, pools_size, rest), 0);
+	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), 0);
+
+	mutex_unlock(idm_mutex(idm));
+}
+
+static void check_overlap_partial_shared_range_blocking(struct kunit *test)
+{
+	struct xe_guc_id_mgr *idm = test->priv;
+	unsigned int pools_size = (GUC_ID_MAX / 3) * 2;
+	int usable_id, shareable_range_id, shareable_overlap_id;
+	unsigned int shareable_start;
+	unsigned int nonoverlap_size;
+	unsigned int overlap_size;
+	unsigned int total;
+
+	if (!require_iov_config_or_skip(test))
+		return;
+
+	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, pools_size, pools_size));
+
+	mutex_lock(idm_mutex(idm));
+
+	total = idm_total(idm);
+	shareable_start = idm_shareable_start(idm);
+	nonoverlap_size = total - pools_size;
+	overlap_size = pools_size - shareable_start;
+
+	KUNIT_EXPECT_GT(test, nonoverlap_size, 0);
+	KUNIT_EXPECT_GT(test, overlap_size, 0);
+
+	shareable_range_id = xe_guc_id_mgr_reserve_shareable_locked(idm, nonoverlap_size, 0);
+	KUNIT_EXPECT_EQ(test, shareable_range_id, pools_size);
+
+	usable_id = xe_guc_id_mgr_reserve_usable_locked(idm, pools_size);
+	KUNIT_EXPECT_EQ(test, usable_id, 0);
+
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_reserve_shareable_locked(idm, 1, 0), -ENOSPC);
+
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_release_usable_locked(idm, usable_id, pools_size), 0);
+
+	shareable_overlap_id = xe_guc_id_mgr_reserve_shareable_locked(idm, overlap_size, 0);
+	KUNIT_EXPECT_EQ(test, shareable_overlap_id, shareable_start);
+
+	usable_id = xe_guc_id_mgr_reserve_usable_locked(idm, shareable_start);
+	KUNIT_EXPECT_EQ(test, usable_id, 0);
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_reserve_usable_locked(idm, 1), -ENOSPC);
+
+	KUNIT_EXPECT_EQ(test,
+			xe_guc_id_mgr_release_usable_locked(idm, usable_id, shareable_start),
+			0);
+	KUNIT_EXPECT_EQ(test,
+			xe_guc_id_mgr_release_shareable_locked(idm, shareable_overlap_id,
+							       overlap_size),
+			0);
+	KUNIT_EXPECT_EQ(test,
+			xe_guc_id_mgr_release_shareable_locked(idm, shareable_range_id,
+							       nonoverlap_size),
+			0);
+	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), 0);
+
+	mutex_unlock(idm_mutex(idm));
+}
+
+static void check_used_usable(struct kunit *test)
+{
+	struct xe_guc_id_mgr *idm = test->priv;
+	int id;
+
+	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, 8, 0));
+
+	mutex_lock(idm_mutex(idm));
+
+	KUNIT_EXPECT_EQ(test, idm_used_usable(idm), 0);
+	KUNIT_EXPECT_EQ(test, idm_used_shareable(idm), 0);
+
+	id = xe_guc_id_mgr_reserve_usable_locked(idm, 2);
+	KUNIT_EXPECT_GE(test, id, 0);
+	if (id < 0) {
+		mutex_unlock(idm_mutex(idm));
+		return;
+	}
+
+	KUNIT_EXPECT_EQ(test, idm_used_usable(idm), 2);
+	KUNIT_EXPECT_EQ(test, idm_used_shareable(idm), 0);
+	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), 2);
+
+	idm_release_chunk_locked(idm, id, 2);
+	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), 0);
+
+	mutex_unlock(idm_mutex(idm));
+}
+
+static void check_used_shareable(struct kunit *test)
+{
+	struct xe_guc_id_mgr *idm = test->priv;
+	unsigned int shareable_start;
+	int id;
+
+	if (!require_iov_config_or_skip(test))
+		return;
+
+	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, 8, 8));
+
+	mutex_lock(idm_mutex(idm));
+	shareable_start = idm_shareable_start(idm);
+
+	KUNIT_EXPECT_EQ(test, idm_used_usable(idm), 0);
+	KUNIT_EXPECT_EQ(test, idm_used_shareable(idm), 0);
+
+	id = xe_guc_id_mgr_reserve_shareable_locked(idm, 3, 0);
+	KUNIT_EXPECT_EQ(test, id, shareable_start);
+	if (id < 0) {
+		mutex_unlock(idm_mutex(idm));
+		return;
+	}
+
+	KUNIT_EXPECT_EQ(test, idm_used_usable(idm), 0);
+	KUNIT_EXPECT_EQ(test, idm_used_shareable(idm), 3);
+	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), 3);
+
+	idm_release_chunk_locked(idm, id, 3);
+	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), 0);
+
+	mutex_unlock(idm_mutex(idm));
+}
+
+static void check_used_mixed(struct kunit *test)
+{
+	struct xe_guc_id_mgr *idm = test->priv;
+	unsigned int shareable_start;
+	int usable_id, shareable_id;
+
+	if (!require_iov_config_or_skip(test))
+		return;
+
+	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, 8, 8));
+
+	mutex_lock(idm_mutex(idm));
+	shareable_start = idm_shareable_start(idm);
+
+	usable_id = xe_guc_id_mgr_reserve_usable_locked(idm, 2);
+	KUNIT_EXPECT_EQ(test, usable_id, 0);
+
+	shareable_id = xe_guc_id_mgr_reserve_shareable_locked(idm, 3, 0);
+	KUNIT_EXPECT_EQ(test, shareable_id, shareable_start);
+
+	KUNIT_EXPECT_EQ(test, idm_used_usable(idm), 2);
+	KUNIT_EXPECT_EQ(test, idm_used_shareable(idm), 3);
+	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), 5);
+
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_release_usable_locked(idm, usable_id, 2), 0);
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_release_shareable_locked(idm, shareable_id, 3), 0);
+	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), 0);
+
+	mutex_unlock(idm_mutex(idm));
+}
+
+static void check_release_usable_range(struct kunit *test)
+{
+	struct xe_guc_id_mgr *idm = test->priv;
+	int id;
+
+	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, 8, 0));
+
+	mutex_lock(idm_mutex(idm));
+
+	id = xe_guc_id_mgr_reserve_usable_locked(idm, 4);
+	KUNIT_EXPECT_EQ(test, id, 0);
+
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_release_usable_locked(idm, 4, 7), -ERANGE);
+	KUNIT_EXPECT_EQ(test, idm_used_usable(idm), 4);
+
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_release_usable_locked(idm, 0, 0), -EINVAL);
+	KUNIT_EXPECT_EQ(test, idm_used_usable(idm), 4);
+
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_release_usable_locked(idm, id, 4), 0);
+	KUNIT_EXPECT_EQ(test, idm_used_usable(idm), 0);
+
+	mutex_unlock(idm_mutex(idm));
+}
+
+static void check_release_shareable_range(struct kunit *test)
+{
+	struct xe_guc_id_mgr *idm = test->priv;
+	unsigned int shareable_start;
+	int id;
+
+	if (!require_iov_config_or_skip(test))
+		return;
+
+	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, 8, 8));
+
+	mutex_lock(idm_mutex(idm));
+
+	shareable_start = idm_shareable_start(idm);
+	id = xe_guc_id_mgr_reserve_shareable_locked(idm, 4, 0);
+	KUNIT_EXPECT_EQ(test, id, shareable_start);
+
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_release_shareable_locked(idm, 4, 7), -ERANGE);
+	KUNIT_EXPECT_EQ(test, idm_used_shareable(idm), 4);
+
+	KUNIT_EXPECT_EQ(test,
+			xe_guc_id_mgr_release_shareable_locked(idm, shareable_start, 0),
+			-EINVAL);
+	KUNIT_EXPECT_EQ(test, idm_used_shareable(idm), 4);
+
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_release_shareable_locked(idm, id, 4), 0);
+	KUNIT_EXPECT_EQ(test, idm_used_shareable(idm), 0);
+
+	mutex_unlock(idm_mutex(idm));
+}
+
+static void check_split_boundaries(struct kunit *test)
+{
+	struct xe_guc_id_mgr *idm = test->priv;
+	unsigned int shareable_start;
+	int id;
+
+	if (!require_iov_config_or_skip(test))
+		return;
+
+	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, 4, 4));
+
+	mutex_lock(idm_mutex(idm));
+
+	shareable_start = idm_shareable_start(idm);
+
+	id = xe_guc_id_mgr_reserve_usable_locked(idm, 4);
+	KUNIT_EXPECT_EQ(test, id, 0);
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_reserve_usable_locked(idm, 1), -ENOSPC);
+
+	id = xe_guc_id_mgr_reserve_shareable_locked(idm, 4, 0);
+	KUNIT_EXPECT_EQ(test, id, shareable_start);
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_reserve_shareable_locked(idm, 1, 0), -ENOSPC);
+
+	KUNIT_EXPECT_EQ(test, idm_used_usable(idm), 4);
+	KUNIT_EXPECT_EQ(test, idm_used_shareable(idm), 4);
+
+	idm_release_chunk_locked(idm, 0, 4);
+	idm_release_chunk_locked(idm, shareable_start, 4);
+	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), 0);
+
+	mutex_unlock(idm_mutex(idm));
+}
+
+static void check_shareable_spare(struct kunit *test)
+{
+	struct xe_guc_id_mgr *idm = test->priv;
+	unsigned int pools_size = (GUC_ID_MAX / 3) * 2;
+	unsigned int shareable_start;
+	unsigned int overlap_size;
+	unsigned int shared_tail;
+	int id_tail, id_overlap, id_extra;
+
+	if (!require_iov_config_or_skip(test))
+		return;
+
+	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, pools_size, pools_size));
+
+	mutex_lock(idm_mutex(idm));
+	shareable_start = idm_shareable_start(idm);
+	overlap_size = idm->usable - shareable_start;
+	shared_tail = idm_total(idm) - idm->usable;
+
+	KUNIT_EXPECT_GT(test, overlap_size, 0);
+	KUNIT_EXPECT_GT(test, shared_tail, 0);
+
+	id_tail = xe_guc_id_mgr_reserve_shareable_locked(idm, shared_tail, 1);
+	KUNIT_EXPECT_EQ(test, id_tail, idm->usable);
+	if (id_tail < 0) {
+		mutex_unlock(idm_mutex(idm));
+		return;
+	}
+	KUNIT_EXPECT_EQ(test, idm_used_shareable(idm), shared_tail);
+
+	id_overlap = xe_guc_id_mgr_reserve_shareable_locked(idm, overlap_size - 1, 1);
+	KUNIT_EXPECT_EQ(test, id_overlap, shareable_start + 1);
+	if (id_overlap < 0) {
+		idm_release_chunk_locked(idm, id_tail, shared_tail);
+		mutex_unlock(idm_mutex(idm));
+		return;
+	}
+	KUNIT_EXPECT_EQ(test, idm_used_shareable(idm), idm->shareable - 1);
+
+	id_extra = xe_guc_id_mgr_reserve_shareable_locked(idm, 1, 1);
+	KUNIT_EXPECT_EQ(test, id_extra, shareable_start);
+	if (id_extra < 0) {
+		idm_release_chunk_locked(idm, id_tail, shared_tail);
+		idm_release_chunk_locked(idm, id_overlap, overlap_size - 1);
+		mutex_unlock(idm_mutex(idm));
+		return;
+	}
+	KUNIT_EXPECT_EQ(test, idm_used_shareable(idm), idm->shareable);
+
+	idm_release_chunk_locked(idm, id_tail, shared_tail);
+	idm_release_chunk_locked(idm, id_overlap, overlap_size - 1);
+	idm_release_chunk_locked(idm, id_extra, 1);
+	KUNIT_EXPECT_EQ(test, idm_used_shareable(idm), 0);
+
+	mutex_unlock(idm_mutex(idm));
+}
+
+static void check_shareable_spare_fragmented_tail(struct kunit *test)
+{
+	struct xe_guc_id_mgr *idm = test->priv;
+	unsigned int usable = GUC_ID_MAX - 50;
+	unsigned int shareable = 90;
+	unsigned int shareable_start;
+	unsigned int overlap_size;
+	unsigned int count = 39;
+	unsigned int spare = 10;
+	unsigned int i;
+
+	if (!require_iov_config_or_skip(test))
+		return;
+
+	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, usable, shareable));
+
+	mutex_lock(idm_mutex(idm));
+	shareable_start = idm_shareable_start(idm);
+	overlap_size = idm->usable - shareable_start;
+	KUNIT_EXPECT_EQ(test, overlap_size, 40);
+
+	bitmap_fill(idm->bitmap, idm_total(idm));
+	bitmap_set(idm->bitmap, 0, 1);
+	bitmap_clear(idm->bitmap, shareable_start + 1, overlap_size - 1);
+	for (i = idm->usable; i < idm_total(idm); i++) {
+		if ((i - idm->usable) % 5)
+			bitmap_clear(idm->bitmap, i, 1);
+	}
+
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_reserve_shareable_locked(idm, count, spare),
+			-EDQUOT);
+
+	bitmap_fill(idm->bitmap, idm_total(idm));
+	bitmap_clear(idm->bitmap, shareable_start, 30);
+	bitmap_clear(idm->bitmap, idm_total(idm) - 20, 20);
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_reserve_shareable_locked(idm, 30, 1),
+			-EDQUOT);
+
+	bitmap_zero(idm->bitmap, idm_total(idm));
+
+	mutex_unlock(idm_mutex(idm));
+}
+
 static struct kunit_case guc_id_mgr_test_cases[] = {
 	KUNIT_CASE(bad_init),
 	KUNIT_CASE(no_init),
@@ -109,6 +642,20 @@ static struct kunit_case guc_id_mgr_test_cases[] = {
 	KUNIT_CASE(check_used),
 	KUNIT_CASE(check_quota),
 	KUNIT_CASE_SLOW(check_all),
+	KUNIT_CASE(check_limits),
+	KUNIT_CASE(check_overlap),
+	KUNIT_CASE(check_overlap_alloc),
+	KUNIT_CASE(check_overlap_release),
+	KUNIT_CASE(check_overlap_partial_init),
+	KUNIT_CASE(check_overlap_partial_shared_range_blocking),
+	KUNIT_CASE(check_used_usable),
+	KUNIT_CASE(check_used_shareable),
+	KUNIT_CASE(check_used_mixed),
+	KUNIT_CASE(check_release_usable_range),
+	KUNIT_CASE(check_release_shareable_range),
+	KUNIT_CASE(check_split_boundaries),
+	KUNIT_CASE(check_shareable_spare),
+	KUNIT_CASE(check_shareable_spare_fragmented_tail),
 	{}
 };
 
-- 
2.34.1


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

* [PATCH v3 3/4] drm/xe/guc: Start use explicitly usable GuC IDs for for submission
  2026-08-27 10:28 [PATCH v3 0/4] Split GuC ID space into usable and shareable pools Piórkowski, Piotr
  2026-08-27 10:28 ` [PATCH v3 1/4] drm/xe/guc: Split GuC ID manager " Piórkowski, Piotr
  2026-08-27 10:29 ` [PATCH v3 2/4] drm/xe/kunit: Extend GuC ID manager split-pool coverage Piórkowski, Piotr
@ 2026-08-27 10:29 ` Piórkowski, Piotr
  2026-08-27 10:29 ` [PATCH v3 4/4] drm/xe/pf: Explicitly use shareable GuC IDs for VFs provisioning Piórkowski, Piotr
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Piórkowski, Piotr @ 2026-08-27 10:29 UTC (permalink / raw)
  To: intel-xe; +Cc: Piotr Piórkowski, Michal Wajdeczko

From: Piotr Piórkowski <piotr.piorkowski@intel.com>

Switch GuC submission to explicitly allocate IDs from the usable
ID pool.
Also lets configure the GuC ID manager according to the device operating
mode during submission initialization. Use dedicated initialization
paths for native, PF and VF modes to expose the appropriate usable and
shareable GuC ID ranges.

v2: Use xe_root_mmio_gt() to get the primary GT so no NULL check is
    needed (Sashiko).

Assisted-by: Claude:claude-5-sonnet
Signed-off-by: Piotr Piórkowski <piotr.piorkowski@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
---
 drivers/gpu/drm/xe/tests/xe_guc_id_mgr_test.c | 33 ++++++++++++
 drivers/gpu/drm/xe/xe_guc.c                   |  4 +-
 drivers/gpu/drm/xe/xe_guc_id_mgr.c            | 53 ++++++++++++++-----
 drivers/gpu/drm/xe/xe_guc_id_mgr.h            | 13 ++++-
 drivers/gpu/drm/xe/xe_guc_submit.c            | 27 ++++++----
 drivers/gpu/drm/xe/xe_guc_submit.h            |  2 +-
 6 files changed, 105 insertions(+), 27 deletions(-)

diff --git a/drivers/gpu/drm/xe/tests/xe_guc_id_mgr_test.c b/drivers/gpu/drm/xe/tests/xe_guc_id_mgr_test.c
index bf5d2beaaead..4c2bed554e23 100644
--- a/drivers/gpu/drm/xe/tests/xe_guc_id_mgr_test.c
+++ b/drivers/gpu/drm/xe/tests/xe_guc_id_mgr_test.c
@@ -65,6 +65,23 @@ static void init_fini(struct kunit *test)
 	KUNIT_EXPECT_EQ(test, idm_total(idm), 0);
 }
 
+static void check_init_small(struct kunit *test)
+{
+	struct xe_guc_id_mgr *idm = test->priv;
+	unsigned int count = 8;
+
+	KUNIT_ASSERT_EQ(test, xe_guc_id_mgr_init_small(idm, count), 0);
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_max_usable(idm), count);
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_max_shareable(idm), 0);
+	KUNIT_EXPECT_EQ(test, idm_total(idm), count);
+
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_reserve_usable(idm, count), 0);
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_reserve_usable(idm, 1), -ENOSPC);
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_release_usable(idm, 0, count), 0);
+
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_reserve_shareable(idm, 1, 0), -ENODATA);
+}
+
 static bool require_iov_config_or_skip(struct kunit *test)
 {
 	if (!IS_ENABLED(CONFIG_PCI_IOV)) {
@@ -75,6 +92,20 @@ static bool require_iov_config_or_skip(struct kunit *test)
 	return true;
 }
 
+static void check_init_shared(struct kunit *test)
+{
+	struct xe_guc_id_mgr *idm = test->priv;
+
+	if (!require_iov_config_or_skip(test))
+		return;
+
+	KUNIT_ASSERT_TRUE(test, IS_SRIOV_PF(idm_to_xe(idm)));
+	KUNIT_ASSERT_EQ(test, xe_guc_id_mgr_init_shared(idm), 0);
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_max_usable(idm), GUC_ID_MAX);
+	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_max_shareable(idm), GUC_ID_MAX);
+	KUNIT_EXPECT_EQ(test, idm_total(idm), GUC_ID_MAX);
+}
+
 static unsigned int test_idm_used_total(struct xe_guc_id_mgr *idm)
 {
 	lockdep_assert_held(idm_mutex(idm));
@@ -639,6 +670,8 @@ static struct kunit_case guc_id_mgr_test_cases[] = {
 	KUNIT_CASE(bad_init),
 	KUNIT_CASE(no_init),
 	KUNIT_CASE(init_fini),
+	KUNIT_CASE(check_init_small),
+	KUNIT_CASE(check_init_shared),
 	KUNIT_CASE(check_used),
 	KUNIT_CASE(check_quota),
 	KUNIT_CASE_SLOW(check_all),
diff --git a/drivers/gpu/drm/xe/xe_guc.c b/drivers/gpu/drm/xe/xe_guc.c
index c7f8bbd4cb92..f1c802d53987 100644
--- a/drivers/gpu/drm/xe/xe_guc.c
+++ b/drivers/gpu/drm/xe/xe_guc.c
@@ -853,7 +853,7 @@ static int vf_guc_init_post_hwconfig(struct xe_guc *guc)
 {
 	int err;
 
-	err = xe_guc_submit_init(guc, xe_gt_sriov_vf_guc_ids(guc_to_gt(guc)));
+	err = xe_guc_submit_init(guc);
 	if (err)
 		return err;
 
@@ -897,7 +897,7 @@ int xe_guc_init_post_hwconfig(struct xe_guc *guc)
 
 	guc_init_params_post_hwconfig(guc);
 
-	ret = xe_guc_submit_init(guc, ~0);
+	ret = xe_guc_submit_init(guc);
 	if (ret)
 		return ret;
 
diff --git a/drivers/gpu/drm/xe/xe_guc_id_mgr.c b/drivers/gpu/drm/xe/xe_guc_id_mgr.c
index 2c181d280552..5675325665fb 100644
--- a/drivers/gpu/drm/xe/xe_guc_id_mgr.c
+++ b/drivers/gpu/drm/xe/xe_guc_id_mgr.c
@@ -124,26 +124,55 @@ static int idm_init(struct xe_guc_id_mgr *idm, unsigned int usable, unsigned int
 }
 
 /**
- * xe_guc_id_mgr_init() - Initialize GuC context ID Manager.
+ * xe_guc_id_mgr_init() - Initialize GuC context ID manager in native mode.
  * @idm: the &xe_guc_id_mgr to initialize
- * @limit: number of IDs to manage
  *
- * The bare-metal or PF driver can pass ~0 as &limit to indicate that all
- * context IDs supported by the GuC firmware are available for use.
+ * Can only be called when the device is not in SR-IOV mode.
  *
  * Return: 0 on success or a negative error code on failure.
  */
-int xe_guc_id_mgr_init(struct xe_guc_id_mgr *idm, unsigned int limit)
+int xe_guc_id_mgr_init(struct xe_guc_id_mgr *idm)
 {
-	if (limit == ~0)
-		limit = GUC_ID_MAX;
-	else if (limit > GUC_ID_MAX)
-		return -ERANGE;
-	else if (!limit)
-		return -EINVAL;
+	xe_gt_assert(idm_to_gt(idm), !IS_SRIOV(idm_to_xe(idm)));
+
+	return idm_init(idm, GUC_ID_MAX, 0);
+}
+
+/**
+ * xe_guc_id_mgr_init_small() - Initialize GuC ID manager for small count.
+ * @idm: the &xe_guc_id_mgr to initialize
+ * @count: the number of usable GuC context IDs
+ *
+ * This function initializes the GuC ID manager to manage a small number of
+ * GuC context IDs (0..count-1) for use by the GuC submission code.
+ *
+ * Return: 0 on success, or a negative error code on failure.
+ */
+int xe_guc_id_mgr_init_small(struct xe_guc_id_mgr *idm, unsigned int count)
+{
+	return idm_init(idm, count, 0);
+}
+
+#ifdef CONFIG_PCI_IOV
+/**
+ * xe_guc_id_mgr_init_shared() - Initialize GuC ID manager for PF.
+ * @idm: the &xe_guc_id_mgr to initialize
+ *
+ * This function initializes the GuC ID manager to manage the full range of
+ * GuC context IDs (0..GUC_ID_MAX - 1) for use by the GuC submission code.
+ * All GuC context IDs will be shareable with VFs.
+ *
+ * Can only be called when the device is in SR-IOV PF mode.
+ *
+ * Return: 0 on success, or a negative error code on failure.
+ */
+int xe_guc_id_mgr_init_shared(struct xe_guc_id_mgr *idm)
+{
+	xe_gt_assert(idm_to_gt(idm), IS_SRIOV_PF(idm_to_xe(idm)));
 
-	return idm_init(idm, limit, 0);
+	return idm_init(idm, GUC_ID_MAX, GUC_ID_MAX);
 }
+#endif /* CONFIG_PCI_IOV */
 
 /**
  * xe_guc_id_mgr_max_usable() - Get maximum number of usable GuC context IDs.
diff --git a/drivers/gpu/drm/xe/xe_guc_id_mgr.h b/drivers/gpu/drm/xe/xe_guc_id_mgr.h
index 209f99831f1b..ed9970829a93 100644
--- a/drivers/gpu/drm/xe/xe_guc_id_mgr.h
+++ b/drivers/gpu/drm/xe/xe_guc_id_mgr.h
@@ -6,10 +6,21 @@
 #ifndef _XE_GUC_ID_MGR_H_
 #define _XE_GUC_ID_MGR_H_
 
+#include <linux/errno.h>
+
 struct drm_printer;
 struct xe_guc_id_mgr;
 
-int xe_guc_id_mgr_init(struct xe_guc_id_mgr *idm, unsigned int limit);
+int xe_guc_id_mgr_init(struct xe_guc_id_mgr *idm);
+int xe_guc_id_mgr_init_small(struct xe_guc_id_mgr *idm, unsigned int count);
+#ifdef CONFIG_PCI_IOV
+int xe_guc_id_mgr_init_shared(struct xe_guc_id_mgr *idm);
+#else
+static inline int xe_guc_id_mgr_init_shared(struct xe_guc_id_mgr *idm)
+{
+	return -ENODEV;
+}
+#endif
 
 unsigned int xe_guc_id_mgr_max_usable(struct xe_guc_id_mgr *idm);
 unsigned int xe_guc_id_mgr_max_shareable(struct xe_guc_id_mgr *idm);
diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c
index 99d8c807ff05..f4d12d994b56 100644
--- a/drivers/gpu/drm/xe/xe_guc_submit.c
+++ b/drivers/gpu/drm/xe/xe_guc_submit.c
@@ -282,20 +282,26 @@ static void primelockdep(struct xe_guc *guc)
 	fs_reclaim_release(GFP_KERNEL);
 }
 
+static int guc_id_mgr_init(struct xe_guc *guc)
+{
+	if (IS_SRIOV_PF(guc_to_xe(guc)))
+		return xe_guc_id_mgr_init_shared(&guc->submission_state.idm);
+	else if (IS_SRIOV_VF(guc_to_xe(guc)))
+		return xe_guc_id_mgr_init_small(&guc->submission_state.idm,
+						xe_gt_sriov_vf_guc_ids(guc_to_gt(guc)));
+	else
+		return xe_guc_id_mgr_init(&guc->submission_state.idm);
+}
+
 /**
  * xe_guc_submit_init() - Initialize GuC submission.
  * @guc: the &xe_guc to initialize
- * @num_ids: number of GuC context IDs to use
- *
- * The bare-metal or PF driver can pass ~0 as &num_ids to indicate that all
- * GuC context IDs supported by the GuC firmware should be used for submission.
  *
- * Only VF drivers will have to provide explicit number of GuC context IDs
- * that they can use for submission.
+ * This function initializes the GuC submission state.
  *
  * Return: 0 on success or a negative error code on failure.
  */
-int xe_guc_submit_init(struct xe_guc *guc, unsigned int num_ids)
+int xe_guc_submit_init(struct xe_guc *guc)
 {
 	struct xe_device *xe = guc_to_xe(guc);
 	struct xe_gt *gt = guc_to_gt(guc);
@@ -305,7 +311,7 @@ int xe_guc_submit_init(struct xe_guc *guc, unsigned int num_ids)
 	if (err)
 		return err;
 
-	err = xe_guc_id_mgr_init(&guc->submission_state.idm, num_ids);
+	err = guc_id_mgr_init(guc);
 	if (err)
 		return err;
 
@@ -411,8 +417,7 @@ static int alloc_guc_id(struct xe_guc *guc, struct xe_exec_queue *q)
 	int ret, i;
 
 	mutex_lock(&guc->submission_state.lock);
-	ret = xe_guc_id_mgr_reserve_locked(&guc->submission_state.idm,
-					   q->width);
+	ret = xe_guc_id_mgr_reserve_usable_locked(&guc->submission_state.idm, q->width);
 	mutex_unlock(&guc->submission_state.lock);
 	if (ret < 0)
 		return ret;
@@ -3180,7 +3185,7 @@ g2h_exec_queue_lookup(struct xe_guc *guc, u32 guc_id)
 	struct xe_gt *gt = guc_to_gt(guc);
 	struct xe_exec_queue *q;
 
-	if (unlikely(guc_id >= GUC_ID_MAX)) {
+	if (unlikely(guc_id >= xe_guc_id_mgr_max_usable(&guc->submission_state.idm))) {
 		xe_gt_err(gt, "Invalid guc_id %u\n", guc_id);
 		return NULL;
 	}
diff --git a/drivers/gpu/drm/xe/xe_guc_submit.h b/drivers/gpu/drm/xe/xe_guc_submit.h
index ccade320dc69..07682f174aa8 100644
--- a/drivers/gpu/drm/xe/xe_guc_submit.h
+++ b/drivers/gpu/drm/xe/xe_guc_submit.h
@@ -12,7 +12,7 @@ struct drm_printer;
 struct xe_exec_queue;
 struct xe_guc;
 
-int xe_guc_submit_init(struct xe_guc *guc, unsigned int num_ids);
+int xe_guc_submit_init(struct xe_guc *guc);
 int xe_guc_submit_enable(struct xe_guc *guc);
 void xe_guc_submit_disable(struct xe_guc *guc);
 
-- 
2.34.1


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

* [PATCH v3 4/4] drm/xe/pf: Explicitly use shareable GuC IDs for VFs provisioning
  2026-08-27 10:28 [PATCH v3 0/4] Split GuC ID space into usable and shareable pools Piórkowski, Piotr
                   ` (2 preceding siblings ...)
  2026-08-27 10:29 ` [PATCH v3 3/4] drm/xe/guc: Start use explicitly usable GuC IDs for for submission Piórkowski, Piotr
@ 2026-08-27 10:29 ` Piórkowski, Piotr
  2026-08-27 11:04 ` ✓ CI.KUnit: success for Split GuC ID space into usable and shareable pools (rev3) Patchwork
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Piórkowski, Piotr @ 2026-08-27 10:29 UTC (permalink / raw)
  To: intel-xe; +Cc: Piotr Piórkowski, Michal Wajdeczko

From: Piotr Piórkowski <piotr.piorkowski@intel.com>

Switch PF VF-context provisioning to explicitly allocate IDs from
the dedicated shareable ID pool.
Also, lets remove the legacy GuC ID reservation API now that all VFs
provisioning paths use the shareable allocation helpers.

Assisted-by: Claude:claude-5-sonnet
Signed-off-by: Piotr Piórkowski <piotr.piorkowski@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
---
 .../xe/tests/xe_gt_sriov_pf_config_kunit.c    |  5 ++
 drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c    | 22 +++++---
 drivers/gpu/drm/xe/xe_guc_id_mgr.c            | 56 ++-----------------
 drivers/gpu/drm/xe/xe_guc_id_mgr.h            |  2 -
 4 files changed, 25 insertions(+), 60 deletions(-)

diff --git a/drivers/gpu/drm/xe/tests/xe_gt_sriov_pf_config_kunit.c b/drivers/gpu/drm/xe/tests/xe_gt_sriov_pf_config_kunit.c
index e6eaa94d4d30..4d72411cd570 100644
--- a/drivers/gpu/drm/xe/tests/xe_gt_sriov_pf_config_kunit.c
+++ b/drivers/gpu/drm/xe/tests/xe_gt_sriov_pf_config_kunit.c
@@ -68,6 +68,7 @@ static int pf_gt_config_test_init(struct kunit *test)
 		.graphics_verx100 = 2001,
 	};
 	struct xe_vram_region *vram;
+	struct xe_guc_id_mgr *idm;
 	struct xe_device *xe;
 	struct xe_gt *gt;
 
@@ -102,6 +103,10 @@ static int pf_gt_config_test_init(struct kunit *test)
 	pf_set_admin_mode(xe, false);
 	KUNIT_ASSERT_EQ(test, xe_sriov_init(xe), 0);
 
+	idm = &gt->uc.guc.submission_state.idm;
+	mutex_init(&gt->uc.guc.submission_state.lock);
+	KUNIT_ASSERT_EQ(test, xe_guc_id_mgr_init_shared(idm), 0);
+
 	/* more sanity checks */
 	KUNIT_EXPECT_EQ(test, GUC_ID_MAX + 1, SZ_64K);
 	KUNIT_EXPECT_EQ(test, GUC_NUM_DOORBELLS, SZ_256);
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
index 9445e5f32fe8..bd55617295fd 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
@@ -889,7 +889,7 @@ static int pf_set_spare_ctxs(struct xe_gt *gt, u32 spare)
 	xe_gt_assert(gt, IS_SRIOV_PF(gt_to_xe(gt)));
 	lockdep_assert_held(xe_gt_sriov_pf_master_mutex(gt));
 
-	if (spare > GUC_ID_MAX)
+	if (spare > xe_guc_id_mgr_max_shareable(&gt->uc.guc.submission_state.idm))
 		return -EINVAL;
 
 	if (spare && spare < pf_get_min_spare_ctxs(gt))
@@ -906,7 +906,7 @@ static int pf_reserve_ctxs(struct xe_gt *gt, u32 num)
 	struct xe_guc_id_mgr *idm = &gt->uc.guc.submission_state.idm;
 	unsigned int spare = pf_get_spare_ctxs(gt);
 
-	return xe_guc_id_mgr_reserve(idm, num, spare);
+	return xe_guc_id_mgr_reserve_shareable(idm, num, spare);
 }
 
 static void pf_release_ctxs(struct xe_gt *gt, u32 start, u32 num)
@@ -933,7 +933,7 @@ static int pf_provision_vf_ctxs(struct xe_gt *gt, unsigned int vfid, u32 num_ctx
 
 	xe_gt_assert(gt, vfid);
 
-	if (num_ctxs > GUC_ID_MAX)
+	if (num_ctxs > xe_guc_id_mgr_max_shareable(&gt->uc.guc.submission_state.idm))
 		return -EINVAL;
 
 	if (config->num_ctxs) {
@@ -1173,20 +1173,28 @@ static u32 pf_profile_fair_ctxs(struct xe_gt *gt, unsigned int num_vfs)
 	bool admin_only_pf = xe_sriov_pf_admin_only(gt_to_xe(gt));
 
 	if (admin_only_pf && num_vfs == 1)
-		return ALIGN_DOWN(GUC_ID_MAX, SZ_1K);
+		return ALIGN_DOWN(xe_guc_id_mgr_max_shareable(&gt->uc.guc.submission_state.idm),
+				  SZ_1K);
 
-	return rounddown_pow_of_two(GUC_ID_MAX / num_vfs);
+	return rounddown_pow_of_two(xe_guc_id_mgr_max_shareable(&gt->uc.guc.submission_state.idm) /
+								num_vfs);
 }
 
 static u32 pf_estimate_fair_ctxs(struct xe_gt *gt, unsigned int num_vfs)
 {
 	struct xe_guc_id_mgr *idm = &gt->uc.guc.submission_state.idm;
+	u32 max_shareable = xe_guc_id_mgr_max_shareable(idm);
 	u32 spare = pf_get_spare_ctxs(gt);
-	u32 fair = (xe_guc_id_mgr_max_usable(idm) - spare) / num_vfs;
+	u32 fair;
 	int ret;
 
+	if (max_shareable <= spare)
+		return 0;
+
+	fair = (max_shareable - spare) / num_vfs;
+
 	for (; fair; --fair) {
-		ret = xe_guc_id_mgr_reserve(idm, fair * num_vfs, spare);
+		ret = xe_guc_id_mgr_reserve_shareable(idm, fair * num_vfs, spare);
 		if (ret < 0)
 			continue;
 		xe_guc_id_mgr_release(idm, ret, fair * num_vfs);
diff --git a/drivers/gpu/drm/xe/xe_guc_id_mgr.c b/drivers/gpu/drm/xe/xe_guc_id_mgr.c
index 5675325665fb..20ce16bda973 100644
--- a/drivers/gpu/drm/xe/xe_guc_id_mgr.c
+++ b/drivers/gpu/drm/xe/xe_guc_id_mgr.c
@@ -124,9 +124,13 @@ static int idm_init(struct xe_guc_id_mgr *idm, unsigned int usable, unsigned int
 }
 
 /**
- * xe_guc_id_mgr_init() - Initialize GuC context ID manager in native mode.
+ * xe_guc_id_mgr_init() - Initialize GuC ID manager for native.
  * @idm: the &xe_guc_id_mgr to initialize
  *
+ * This function initializes the GuC ID manager to manage the full range of
+ * GuC context IDs (0..GUC_ID_MAX - 1) for use by the GuC submission code.
+ * No GuC context IDs will be reserved for sharing with VFs.
+ *
  * Can only be called when the device is not in SR-IOV mode.
  *
  * Return: 0 on success or a negative error code on failure.
@@ -287,37 +291,6 @@ static int idm_reserve_chunk_shareable_locked(struct xe_guc_id_mgr *idm, unsigne
 	return id;
 }
 
-static int idm_reserve_chunk_locked(struct xe_guc_id_mgr *idm, unsigned int count,
-				    unsigned int retain)
-{
-	unsigned int total = idm_total(idm);
-	int id;
-
-	idm_assert(idm, count);
-	lockdep_assert_held(idm_mutex(idm));
-
-	if (!total)
-		return -ENODATA;
-
-	if (retain) {
-		unsigned int used = bitmap_weight(idm->bitmap, total);
-
-		if (used + count + retain > total)
-			return -EDQUOT;
-
-		id = idm_find_last_zero_area_in_range(idm->bitmap, 0, total, count);
-	} else {
-		id = bitmap_find_next_zero_area(idm->bitmap, total, 0, count, 0);
-	}
-
-	if (id >= total)
-		return -ENOSPC;
-
-	bitmap_set(idm->bitmap, id, count);
-
-	return id;
-}
-
 static void idm_release_chunk_locked(struct xe_guc_id_mgr *idm,
 				     unsigned int start, unsigned int count)
 {
@@ -475,25 +448,6 @@ int xe_guc_id_mgr_reserve_shareable(struct xe_guc_id_mgr *idm, unsigned int coun
 	return idm_reserve_chunk_shareable_locked(idm, count, spare);
 }
 
-int xe_guc_id_mgr_reserve_locked(struct xe_guc_id_mgr *idm, unsigned int count)
-{
-	return idm_reserve_chunk_locked(idm, count, 0);
-}
-
-int xe_guc_id_mgr_reserve(struct xe_guc_id_mgr *idm, unsigned int count,
-			  unsigned int retain)
-{
-	int ret;
-
-	idm_assert(idm, count);
-	idm_assert(idm, retain);
-
-	guard(mutex)(idm_mutex(idm));
-	ret = idm_reserve_chunk_locked(idm, count, retain);
-
-	return ret;
-}
-
 /**
  * xe_guc_id_mgr_release() - Release one or more GuC context IDs.
  * @idm: the &xe_guc_id_mgr
diff --git a/drivers/gpu/drm/xe/xe_guc_id_mgr.h b/drivers/gpu/drm/xe/xe_guc_id_mgr.h
index ed9970829a93..844d68440b0a 100644
--- a/drivers/gpu/drm/xe/xe_guc_id_mgr.h
+++ b/drivers/gpu/drm/xe/xe_guc_id_mgr.h
@@ -31,8 +31,6 @@ int xe_guc_id_mgr_reserve_shareable_locked(struct xe_guc_id_mgr *idm, unsigned i
 					   unsigned int spare);
 int xe_guc_id_mgr_reserve_shareable(struct xe_guc_id_mgr *idm, unsigned int count,
 				    unsigned int spare);
-int xe_guc_id_mgr_reserve_locked(struct xe_guc_id_mgr *idm, unsigned int count);
-int xe_guc_id_mgr_reserve(struct xe_guc_id_mgr *idm, unsigned int count, unsigned int retain);
 void xe_guc_id_mgr_release_locked(struct xe_guc_id_mgr *idm, unsigned int id, unsigned int count);
 int xe_guc_id_mgr_release_usable_locked(struct xe_guc_id_mgr *idm, unsigned int id,
 					unsigned int count);
-- 
2.34.1


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

* Re: [PATCH v3 2/4] drm/xe/kunit: Extend GuC ID manager split-pool coverage
  2026-08-27 10:29 ` [PATCH v3 2/4] drm/xe/kunit: Extend GuC ID manager split-pool coverage Piórkowski, Piotr
@ 2026-08-27 10:44   ` sashiko-bot
  0 siblings, 0 replies; 9+ messages in thread
From: sashiko-bot @ 2026-08-27 10:44 UTC (permalink / raw)
  To: Piórkowski, Piotr; +Cc: intel-xe

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] Missing failure guards in multiple KUnit tests (e.g., check_split_boundaries, check_overlap_partial_init, check_all, check_used) trigger kernel assertions when ID reservations fail.
--

commit 7c9d7d30bf5be71855d8dd170fb19ba5954562d9
Author: Piotr Piórkowski <piotr.piorkowski@intel.com>

drm/xe/kunit: Extend GuC ID manager split-pool coverage

Expand the GuC ID manager KUnit coverage to exercise the new
usable/shareable pool model.

> diff --git a/drivers/gpu/drm/xe/tests/xe_guc_id_mgr_test.c b/drivers/gpu/drm/xe/tests/xe_guc_id_mgr_test.c
> index 78d3de46b7572..bf5d2beaaeadd 100644
> --- a/drivers/gpu/drm/xe/tests/xe_guc_id_mgr_test.c
> +++ b/drivers/gpu/drm/xe/tests/xe_guc_id_mgr_test.c

[ ... ]

> @@ -94,14 +156,485 @@ static void check_all(struct kunit *test)
>  	mutex_lock(idm_mutex(idm));
>  
>  	for (n = 0; n < idm_total(idm); n++)
> -		KUNIT_EXPECT_LE(test, 0, xe_guc_id_mgr_reserve_usable_locked(idm, 1));
> -	KUNIT_EXPECT_EQ(test, bitmap_weight(idm->bitmap, idm_total(idm)), idm_total(idm));
> +		KUNIT_EXPECT_GE(test, xe_guc_id_mgr_reserve_usable_locked(idm, 1), 0);
> +	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), idm_total(idm));
>  	for (n = 0; n < idm_total(idm); n++)
>  		idm_release_chunk_locked(idm, n, 1);

[Severity: Medium]
If any single bit reservation fails during the loop, will the subsequent
release loop unconditionally attempt to release every bit index up to
idm_total(idm)? This appears to bypass bounds checks and trigger a kernel WARN
when attempting to release an unreserved bit. Should we add a guard before
releasing these allocations?

[ ... ]

> +static void check_overlap_partial_init(struct kunit *test)
> +{
> +	struct xe_guc_id_mgr *idm = test->priv;
> +	unsigned int pools_size = (GUC_ID_MAX / 3) * 2;
> +	unsigned int shareable_start;
> +	unsigned int rest;
> +	int id;
> +
> +	if (!require_iov_config_or_skip(test))
> +		return;
> +
> +	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, pools_size, pools_size));
> +
> +	mutex_lock(idm_mutex(idm));
> +
> +	shareable_start = idm_shareable_start(idm);
> +	rest = idm_total(idm) - pools_size;
> +
> +	KUNIT_EXPECT_EQ(test, idm_total(idm), GUC_ID_MAX);
> +	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_max_usable(idm), pools_size);
> +	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_max_shareable(idm), pools_size);
> +	KUNIT_EXPECT_EQ(test, shareable_start, GUC_ID_MAX - pools_size);
> +
> +	id = xe_guc_id_mgr_reserve_usable_locked(idm, pools_size);
> +	KUNIT_EXPECT_EQ(test, id, 0);
> +
> +	id = xe_guc_id_mgr_reserve_shareable_locked(idm, rest, 0);
> +	KUNIT_EXPECT_EQ(test, id, pools_size);
> +
> +	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), GUC_ID_MAX);
> +	KUNIT_EXPECT_EQ(test, idm_used_usable(idm), pools_size);
> +	KUNIT_EXPECT_EQ(test, idm_used_shareable(idm), pools_size);
> +
> +	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_release_usable_locked(idm, 0, pools_size), 0);

[Severity: Medium]
If the reservation for id fails here, will passing the constant 0 to
xe_guc_id_mgr_release_usable_locked() bypass the initial -ERANGE bounds check?
It looks like this would reach the internal bit-clearing logic and trip the
test_bit() assertion. Would it be better to verify the reservation succeeded
before releasing?

> +	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_release_shareable_locked(idm, pools_size, rest), 0);
> +	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), 0);
> +
> +	mutex_unlock(idm_mutex(idm));
> +}

[ ... ]

> +static void check_split_boundaries(struct kunit *test)
> +{
> +	struct xe_guc_id_mgr *idm = test->priv;
> +	unsigned int shareable_start;
> +	int id;
> +
> +	if (!require_iov_config_or_skip(test))
> +		return;
> +
> +	KUNIT_ASSERT_EQ(test, 0, idm_init(idm, 4, 4));
> +
> +	mutex_lock(idm_mutex(idm));
> +
> +	shareable_start = idm_shareable_start(idm);
> +
> +	id = xe_guc_id_mgr_reserve_usable_locked(idm, 4);
> +	KUNIT_EXPECT_EQ(test, id, 0);
> +	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_reserve_usable_locked(idm, 1), -ENOSPC);
> +
> +	id = xe_guc_id_mgr_reserve_shareable_locked(idm, 4, 0);
> +	KUNIT_EXPECT_EQ(test, id, shareable_start);
> +	KUNIT_EXPECT_EQ(test, xe_guc_id_mgr_reserve_shareable_locked(idm, 1, 0), -ENOSPC);
> +
> +	KUNIT_EXPECT_EQ(test, idm_used_usable(idm), 4);
> +	KUNIT_EXPECT_EQ(test, idm_used_shareable(idm), 4);
> +
> +	idm_release_chunk_locked(idm, 0, 4);
> +	idm_release_chunk_locked(idm, shareable_start, 4);

[Severity: Medium]
If the initial reservations fail, will this unconditional release of constant
ranges 0 and shareable_start trigger idm_assert()? Unlike other tests, there
are no failure guards here before releasing the allocations.

> +	KUNIT_EXPECT_EQ(test, test_idm_used_total(idm), 0);
> +
> +	mutex_unlock(idm_mutex(idm));
> +}

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260827102902.1236918-1-piotr.piorkowski@intel.com?part=2

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

* ✓ CI.KUnit: success for Split GuC ID space into usable and shareable pools (rev3)
  2026-08-27 10:28 [PATCH v3 0/4] Split GuC ID space into usable and shareable pools Piórkowski, Piotr
                   ` (3 preceding siblings ...)
  2026-08-27 10:29 ` [PATCH v3 4/4] drm/xe/pf: Explicitly use shareable GuC IDs for VFs provisioning Piórkowski, Piotr
@ 2026-08-27 11:04 ` Patchwork
  2026-08-27 11:45 ` ✓ Xe.CI.BAT: " Patchwork
  2026-08-27 12:52 ` ✓ Xe.CI.FULL: " Patchwork
  6 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2026-08-27 11:04 UTC (permalink / raw)
  To: Piórkowski, Piotr; +Cc: intel-xe

== Series Details ==

Series: Split GuC ID space into usable and shareable pools (rev3)
URL   : https://patchwork.freedesktop.org/series/170767/
State : success

== Summary ==

+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[11:02:30] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[11:02:34] 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
[11:03:07] Starting KUnit Kernel (1/1)...
[11:03:07] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[11:03:07] ================== guc_buf (11 subtests) ===================
[11:03:07] [PASSED] test_smallest
[11:03:07] [PASSED] test_largest
[11:03:07] [PASSED] test_granular
[11:03:07] [PASSED] test_unique
[11:03:07] [PASSED] test_overlap
[11:03:07] [PASSED] test_reusable
[11:03:07] [PASSED] test_too_big
[11:03:07] [PASSED] test_flush
[11:03:07] [PASSED] test_lookup
[11:03:07] [PASSED] test_data
[11:03:07] [PASSED] test_class
[11:03:07] ===================== [PASSED] guc_buf =====================
[11:03:07] =================== guc_dbm (7 subtests) ===================
[11:03:07] [PASSED] test_empty
[11:03:07] [PASSED] test_default
[11:03:07] ======================== test_size  ========================
[11:03:07] [PASSED] 4
[11:03:07] [PASSED] 8
[11:03:07] [PASSED] 32
[11:03:07] [PASSED] 256
[11:03:07] ==================== [PASSED] test_size ====================
[11:03:07] ======================= test_reuse  ========================
[11:03:07] [PASSED] 4
[11:03:07] [PASSED] 8
[11:03:07] [PASSED] 32
[11:03:07] [PASSED] 256
[11:03:07] =================== [PASSED] test_reuse ====================
[11:03:07] =================== test_range_overlap  ====================
[11:03:07] [PASSED] 4
[11:03:07] [PASSED] 8
[11:03:07] [PASSED] 32
[11:03:07] [PASSED] 256
[11:03:07] =============== [PASSED] test_range_overlap ================
[11:03:07] =================== test_range_compact  ====================
[11:03:07] [PASSED] 4
[11:03:07] [PASSED] 8
[11:03:07] [PASSED] 32
[11:03:07] [PASSED] 256
[11:03:07] =============== [PASSED] test_range_compact ================
[11:03:07] ==================== test_range_spare  =====================
[11:03:07] [PASSED] 4
[11:03:07] [PASSED] 8
[11:03:07] [PASSED] 32
[11:03:07] [PASSED] 256
[11:03:07] ================ [PASSED] test_range_spare =================
[11:03:07] ===================== [PASSED] guc_dbm =====================
[11:03:07] ================== guc_idm (22 subtests) ===================
[11:03:07] [PASSED] bad_init
[11:03:07] [PASSED] no_init
[11:03:07] [PASSED] init_fini
[11:03:07] [PASSED] check_init_small
[11:03:07] [PASSED] check_init_shared
[11:03:07] [PASSED] check_used
[11:03:07] [PASSED] check_quota
[11:03:07] [PASSED] check_all
[11:03:07] [PASSED] check_limits
[11:03:07] [PASSED] check_overlap
[11:03:07] [PASSED] check_overlap_alloc
[11:03:07] [PASSED] check_overlap_release
[11:03:07] [PASSED] check_overlap_partial_init
[11:03:07] [PASSED] check_overlap_partial_shared_range_blocking
[11:03:07] [PASSED] check_used_usable
[11:03:07] [PASSED] check_used_shareable
[11:03:07] [PASSED] check_used_mixed
[11:03:07] [PASSED] check_release_usable_range
[11:03:07] [PASSED] check_release_shareable_range
[11:03:07] [PASSED] check_split_boundaries
[11:03:07] [PASSED] check_shareable_spare
[11:03:07] [PASSED] check_shareable_spare_fragmented_tail
[11:03:07] ===================== [PASSED] guc_idm =====================
[11:03:07] =============== guc_klv_helpers (9 subtests) ===============
[11:03:07] [PASSED] test_count
[11:03:07] [PASSED] test_encode_u32
[11:03:07] [PASSED] test_encode_u64
[11:03:07] [PASSED] test_encode_string
[11:03:07] [PASSED] test_encode_object_raw
[11:03:07] [PASSED] test_encode_object_klv
[11:03:07] [PASSED] test_encode_object_nested
[11:03:07] [PASSED] test_encode_object_basic
[11:03:07] [PASSED] test_print
[11:03:07] ================= [PASSED] guc_klv_helpers =================
[11:03:07] =================== xe_log (4 subtests) ====================
[11:03:07] [PASSED] demo_cper
[11:03:07] [PASSED] demo_dmesg
[11:03:07] ======================= test_dmesg  ========================
[11:03:07] [PASSED] test_fatal
[11:03:07] [PASSED] test_fatal_tile
[11:03:07] [PASSED] test_fatal_gt
[11:03:07] [PASSED] test_fatal_comp
[11:03:07] [PASSED] test_fatal_comp_tile
[11:03:07] [PASSED] test_fatal_comp_gt
[11:03:07] [PASSED] test_fatal_all
[11:03:07] [PASSED] test_recoverable
[11:03:07] [PASSED] test_recoverable_tile
[11:03:07] [PASSED] test_recoverable_gt
[11:03:07] [PASSED] test_recoverable_comp
[11:03:07] [PASSED] test_recoverable_comp_tile
[11:03:07] [PASSED] test_recoverable_comp_gt
[11:03:07] [PASSED] test_recoverable_all
[11:03:07] [PASSED] test_info
[11:03:07] [PASSED] test_info_tile
[11:03:07] [PASSED] test_info_gt
[11:03:07] [PASSED] test_info_err
[11:03:07] [PASSED] test_info_comp
[11:03:07] [PASSED] test_info_comp_tile
[11:03:07] [PASSED] test_info_comp_gt
[11:03:07] [PASSED] test_info_all
[11:03:07] [PASSED] test_hw_fatal
[11:03:07] [PASSED] test_hw_recoverable
[11:03:07] [PASSED] test_hw_corrected
[11:03:07] [PASSED] test_hw_informational
[11:03:07] =================== [PASSED] test_dmesg ====================
[11:03:07] ====================== test_invalid  =======================
[11:03:07] [SKIPPED] no-component no-location no-warn (requires CONFIG_DRM_XE_DEBUG)
[11:03:07] [SKIPPED] reserved location (requires CONFIG_DRM_XE_DEBUG)
[11:03:07] [SKIPPED] unknown location (requires CONFIG_DRM_XE_DEBUG)
[11:03:07] [SKIPPED] nonzero-device-id location (requires CONFIG_DRM_XE_DEBUG)
[11:03:07] [SKIPPED] invalid-tile-id location (requires CONFIG_DRM_XE_DEBUG)
[11:03:07] [SKIPPED] invalid-gt-id location (requires CONFIG_DRM_XE_DEBUG)
[11:03:07] [SKIPPED] unknown component class (requires CONFIG_DRM_XE_DEBUG)
[11:03:07] [SKIPPED] unknown system component (requires CONFIG_DRM_XE_DEBUG)
[11:03:07] [SKIPPED] unknown hardware component (requires CONFIG_DRM_XE_DEBUG)
[11:03:07] [SKIPPED] unknown component and location (requires CONFIG_DRM_XE_DEBUG)
[11:03:07] ================== [SKIPPED] test_invalid ==================
[11:03:07] ===================== [PASSED] xe_log ======================
[11:03:07] ================== no_relay (3 subtests) ===================
[11:03:07] [PASSED] xe_drops_guc2pf_if_not_ready
[11:03:07] [PASSED] xe_drops_guc2vf_if_not_ready
[11:03:07] [PASSED] xe_rejects_send_if_not_ready
[11:03:07] ==================== [PASSED] no_relay =====================
[11:03:07] ================== pf_relay (14 subtests) ==================
[11:03:07] [PASSED] pf_rejects_guc2pf_too_short
[11:03:07] [PASSED] pf_rejects_guc2pf_too_long
[11:03:07] [PASSED] pf_rejects_guc2pf_no_payload
[11:03:07] [PASSED] pf_fails_no_payload
[11:03:07] [PASSED] pf_fails_bad_origin
[11:03:07] [PASSED] pf_fails_bad_type
[11:03:07] [PASSED] pf_txn_reports_error
[11:03:07] [PASSED] pf_txn_sends_pf2guc
[11:03:07] [PASSED] pf_sends_pf2guc
[11:03:07] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[11:03:07] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[11:03:07] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[11:03:07] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[11:03:07] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[11:03:07] ==================== [PASSED] pf_relay =====================
[11:03:07] ================== vf_relay (3 subtests) ===================
[11:03:07] [PASSED] vf_rejects_guc2vf_too_short
[11:03:07] [PASSED] vf_rejects_guc2vf_too_long
[11:03:07] [PASSED] vf_rejects_guc2vf_no_payload
[11:03:07] ==================== [PASSED] vf_relay =====================
[11:03:07] ================ pf_gt_config (9 subtests) =================
[11:03:07] [PASSED] fair_contexts_1vf
[11:03:07] [PASSED] fair_doorbells_1vf
[11:03:07] [PASSED] fair_ggtt_1vf
[11:03:07] ====================== fair_vram_1vf  ======================
[11:03:07] [PASSED] 3.50 GiB
[11:03:07] [PASSED] 11.5 GiB
[11:03:07] [PASSED] 15.5 GiB
[11:03:07] [PASSED] 31.5 GiB
[11:03:07] [PASSED] 63.5 GiB
[11:03:07] [PASSED] 1.91 GiB
[11:03:07] ================== [PASSED] fair_vram_1vf ==================
[11:03:07] ================ fair_vram_1vf_admin_only  =================
[11:03:07] [PASSED] 3.50 GiB
[11:03:07] [PASSED] 11.5 GiB
[11:03:07] [PASSED] 15.5 GiB
[11:03:07] [PASSED] 31.5 GiB
[11:03:07] [PASSED] 63.5 GiB
[11:03:07] [PASSED] 1.91 GiB
[11:03:07] ============ [PASSED] fair_vram_1vf_admin_only =============
[11:03:07] ====================== fair_contexts  ======================
[11:03:07] [PASSED] 1 VF
[11:03:07] [PASSED] 2 VFs
[11:03:07] [PASSED] 3 VFs
[11:03:07] [PASSED] 4 VFs
[11:03:07] [PASSED] 5 VFs
[11:03:07] [PASSED] 6 VFs
[11:03:07] [PASSED] 7 VFs
[11:03:07] [PASSED] 8 VFs
[11:03:07] [PASSED] 9 VFs
[11:03:07] [PASSED] 10 VFs
[11:03:07] [PASSED] 11 VFs
[11:03:07] [PASSED] 12 VFs
[11:03:07] [PASSED] 13 VFs
[11:03:07] [PASSED] 14 VFs
[11:03:07] [PASSED] 15 VFs
[11:03:07] [PASSED] 16 VFs
[11:03:07] [PASSED] 17 VFs
[11:03:07] [PASSED] 18 VFs
[11:03:07] [PASSED] 19 VFs
[11:03:07] [PASSED] 20 VFs
[11:03:07] [PASSED] 21 VFs
[11:03:07] [PASSED] 22 VFs
[11:03:07] [PASSED] 23 VFs
[11:03:07] [PASSED] 24 VFs
[11:03:07] [PASSED] 25 VFs
[11:03:07] [PASSED] 26 VFs
[11:03:07] [PASSED] 27 VFs
[11:03:07] [PASSED] 28 VFs
[11:03:07] [PASSED] 29 VFs
[11:03:07] [PASSED] 30 VFs
[11:03:07] [PASSED] 31 VFs
[11:03:07] [PASSED] 32 VFs
[11:03:07] [PASSED] 33 VFs
[11:03:07] [PASSED] 34 VFs
[11:03:07] [PASSED] 35 VFs
[11:03:07] [PASSED] 36 VFs
[11:03:07] [PASSED] 37 VFs
[11:03:07] [PASSED] 38 VFs
[11:03:07] [PASSED] 39 VFs
[11:03:07] [PASSED] 40 VFs
[11:03:07] [PASSED] 41 VFs
[11:03:07] [PASSED] 42 VFs
[11:03:07] [PASSED] 43 VFs
[11:03:07] [PASSED] 44 VFs
[11:03:07] [PASSED] 45 VFs
[11:03:07] [PASSED] 46 VFs
[11:03:07] [PASSED] 47 VFs
[11:03:07] [PASSED] 48 VFs
[11:03:07] [PASSED] 49 VFs
[11:03:07] [PASSED] 50 VFs
[11:03:07] [PASSED] 51 VFs
[11:03:07] [PASSED] 52 VFs
[11:03:07] [PASSED] 53 VFs
[11:03:07] [PASSED] 54 VFs
[11:03:07] [PASSED] 55 VFs
[11:03:07] [PASSED] 56 VFs
[11:03:07] [PASSED] 57 VFs
[11:03:07] [PASSED] 58 VFs
[11:03:07] [PASSED] 59 VFs
[11:03:07] [PASSED] 60 VFs
[11:03:07] [PASSED] 61 VFs
[11:03:07] [PASSED] 62 VFs
[11:03:07] [PASSED] 63 VFs
[11:03:07] ================== [PASSED] fair_contexts ==================
[11:03:07] ===================== fair_doorbells  ======================
[11:03:07] [PASSED] 1 VF
[11:03:07] [PASSED] 2 VFs
[11:03:07] [PASSED] 3 VFs
[11:03:07] [PASSED] 4 VFs
[11:03:07] [PASSED] 5 VFs
[11:03:07] [PASSED] 6 VFs
[11:03:07] [PASSED] 7 VFs
[11:03:07] [PASSED] 8 VFs
[11:03:07] [PASSED] 9 VFs
[11:03:07] [PASSED] 10 VFs
[11:03:07] [PASSED] 11 VFs
[11:03:07] [PASSED] 12 VFs
[11:03:07] [PASSED] 13 VFs
[11:03:07] [PASSED] 14 VFs
[11:03:07] [PASSED] 15 VFs
[11:03:07] [PASSED] 16 VFs
[11:03:07] [PASSED] 17 VFs
[11:03:07] [PASSED] 18 VFs
[11:03:07] [PASSED] 19 VFs
[11:03:07] [PASSED] 20 VFs
[11:03:07] [PASSED] 21 VFs
[11:03:07] [PASSED] 22 VFs
[11:03:07] [PASSED] 23 VFs
[11:03:07] [PASSED] 24 VFs
[11:03:07] [PASSED] 25 VFs
[11:03:07] [PASSED] 26 VFs
[11:03:07] [PASSED] 27 VFs
[11:03:07] [PASSED] 28 VFs
[11:03:07] [PASSED] 29 VFs
[11:03:07] [PASSED] 30 VFs
[11:03:07] [PASSED] 31 VFs
[11:03:07] [PASSED] 32 VFs
[11:03:07] [PASSED] 33 VFs
[11:03:07] [PASSED] 34 VFs
[11:03:07] [PASSED] 35 VFs
[11:03:07] [PASSED] 36 VFs
[11:03:07] [PASSED] 37 VFs
[11:03:07] [PASSED] 38 VFs
[11:03:07] [PASSED] 39 VFs
[11:03:07] [PASSED] 40 VFs
[11:03:07] [PASSED] 41 VFs
[11:03:07] [PASSED] 42 VFs
[11:03:07] [PASSED] 43 VFs
[11:03:07] [PASSED] 44 VFs
[11:03:07] [PASSED] 45 VFs
[11:03:07] [PASSED] 46 VFs
[11:03:07] [PASSED] 47 VFs
[11:03:07] [PASSED] 48 VFs
[11:03:07] [PASSED] 49 VFs
[11:03:07] [PASSED] 50 VFs
[11:03:07] [PASSED] 51 VFs
[11:03:07] [PASSED] 52 VFs
[11:03:07] [PASSED] 53 VFs
[11:03:07] [PASSED] 54 VFs
[11:03:07] [PASSED] 55 VFs
[11:03:07] [PASSED] 56 VFs
[11:03:07] [PASSED] 57 VFs
[11:03:07] [PASSED] 58 VFs
[11:03:07] [PASSED] 59 VFs
[11:03:07] [PASSED] 60 VFs
[11:03:07] [PASSED] 61 VFs
[11:03:07] [PASSED] 62 VFs
[11:03:07] [PASSED] 63 VFs
[11:03:07] ================= [PASSED] fair_doorbells ==================
[11:03:07] ======================== fair_ggtt  ========================
[11:03:07] [PASSED] 1 VF
[11:03:07] [PASSED] 2 VFs
[11:03:07] [PASSED] 3 VFs
[11:03:07] [PASSED] 4 VFs
[11:03:07] [PASSED] 5 VFs
[11:03:07] [PASSED] 6 VFs
[11:03:07] [PASSED] 7 VFs
[11:03:07] [PASSED] 8 VFs
[11:03:07] [PASSED] 9 VFs
[11:03:07] [PASSED] 10 VFs
[11:03:07] [PASSED] 11 VFs
[11:03:07] [PASSED] 12 VFs
[11:03:07] [PASSED] 13 VFs
[11:03:07] [PASSED] 14 VFs
[11:03:07] [PASSED] 15 VFs
[11:03:07] [PASSED] 16 VFs
[11:03:07] [PASSED] 17 VFs
[11:03:07] [PASSED] 18 VFs
[11:03:07] [PASSED] 19 VFs
[11:03:07] [PASSED] 20 VFs
[11:03:07] [PASSED] 21 VFs
[11:03:07] [PASSED] 22 VFs
[11:03:07] [PASSED] 23 VFs
[11:03:07] [PASSED] 24 VFs
[11:03:07] [PASSED] 25 VFs
[11:03:07] [PASSED] 26 VFs
[11:03:07] [PASSED] 27 VFs
[11:03:07] [PASSED] 28 VFs
[11:03:07] [PASSED] 29 VFs
[11:03:07] [PASSED] 30 VFs
[11:03:07] [PASSED] 31 VFs
[11:03:07] [PASSED] 32 VFs
[11:03:07] [PASSED] 33 VFs
[11:03:07] [PASSED] 34 VFs
[11:03:07] [PASSED] 35 VFs
[11:03:07] [PASSED] 36 VFs
[11:03:07] [PASSED] 37 VFs
[11:03:07] [PASSED] 38 VFs
[11:03:07] [PASSED] 39 VFs
[11:03:07] [PASSED] 40 VFs
[11:03:07] [PASSED] 41 VFs
[11:03:07] [PASSED] 42 VFs
[11:03:07] [PASSED] 43 VFs
[11:03:07] [PASSED] 44 VFs
[11:03:07] [PASSED] 45 VFs
[11:03:07] [PASSED] 46 VFs
[11:03:07] [PASSED] 47 VFs
[11:03:07] [PASSED] 48 VFs
[11:03:07] [PASSED] 49 VFs
[11:03:07] [PASSED] 50 VFs
[11:03:07] [PASSED] 51 VFs
[11:03:07] [PASSED] 52 VFs
[11:03:07] [PASSED] 53 VFs
[11:03:07] [PASSED] 54 VFs
[11:03:07] [PASSED] 55 VFs
[11:03:07] [PASSED] 56 VFs
[11:03:07] [PASSED] 57 VFs
[11:03:07] [PASSED] 58 VFs
[11:03:07] [PASSED] 59 VFs
[11:03:07] [PASSED] 60 VFs
[11:03:07] [PASSED] 61 VFs
[11:03:07] [PASSED] 62 VFs
[11:03:07] [PASSED] 63 VFs
[11:03:07] ==================== [PASSED] fair_ggtt ====================
[11:03:07] ======================== fair_vram  ========================
[11:03:07] [PASSED] 1 VF
[11:03:07] [PASSED] 2 VFs
[11:03:07] [PASSED] 3 VFs
[11:03:07] [PASSED] 4 VFs
[11:03:07] [PASSED] 5 VFs
[11:03:07] [PASSED] 6 VFs
[11:03:07] [PASSED] 7 VFs
[11:03:07] [PASSED] 8 VFs
[11:03:07] [PASSED] 9 VFs
[11:03:07] [PASSED] 10 VFs
[11:03:07] [PASSED] 11 VFs
[11:03:07] [PASSED] 12 VFs
[11:03:07] [PASSED] 13 VFs
[11:03:07] [PASSED] 14 VFs
[11:03:07] [PASSED] 15 VFs
[11:03:07] [PASSED] 16 VFs
[11:03:07] [PASSED] 17 VFs
[11:03:07] [PASSED] 18 VFs
[11:03:07] [PASSED] 19 VFs
[11:03:07] [PASSED] 20 VFs
[11:03:07] [PASSED] 21 VFs
[11:03:07] [PASSED] 22 VFs
[11:03:07] [PASSED] 23 VFs
[11:03:07] [PASSED] 24 VFs
[11:03:07] [PASSED] 25 VFs
[11:03:07] [PASSED] 26 VFs
[11:03:07] [PASSED] 27 VFs
[11:03:07] [PASSED] 28 VFs
[11:03:07] [PASSED] 29 VFs
[11:03:07] [PASSED] 30 VFs
[11:03:07] [PASSED] 31 VFs
[11:03:07] [PASSED] 32 VFs
[11:03:07] [PASSED] 33 VFs
[11:03:07] [PASSED] 34 VFs
[11:03:07] [PASSED] 35 VFs
[11:03:07] [PASSED] 36 VFs
[11:03:07] [PASSED] 37 VFs
[11:03:07] [PASSED] 38 VFs
[11:03:07] [PASSED] 39 VFs
[11:03:07] [PASSED] 40 VFs
[11:03:07] [PASSED] 41 VFs
[11:03:07] [PASSED] 42 VFs
[11:03:07] [PASSED] 43 VFs
[11:03:07] [PASSED] 44 VFs
[11:03:07] [PASSED] 45 VFs
[11:03:07] [PASSED] 46 VFs
[11:03:07] [PASSED] 47 VFs
[11:03:07] [PASSED] 48 VFs
[11:03:07] [PASSED] 49 VFs
[11:03:07] [PASSED] 50 VFs
[11:03:07] [PASSED] 51 VFs
[11:03:07] [PASSED] 52 VFs
[11:03:07] [PASSED] 53 VFs
[11:03:07] [PASSED] 54 VFs
[11:03:07] [PASSED] 55 VFs
[11:03:07] [PASSED] 56 VFs
[11:03:07] [PASSED] 57 VFs
[11:03:07] [PASSED] 58 VFs
[11:03:07] [PASSED] 59 VFs
[11:03:07] [PASSED] 60 VFs
[11:03:07] [PASSED] 61 VFs
[11:03:07] [PASSED] 62 VFs
[11:03:07] [PASSED] 63 VFs
[11:03:07] ==================== [PASSED] fair_vram ====================
[11:03:07] ================== [PASSED] pf_gt_config ===================
[11:03:07] ===================== lmtt (1 subtest) =====================
[11:03:07] ======================== test_ops  =========================
[11:03:07] [PASSED] 2-level
[11:03:07] [PASSED] multi-level
[11:03:07] ==================== [PASSED] test_ops =====================
[11:03:07] ====================== [PASSED] lmtt =======================
[11:03:07] ================= sriov_packet (1 subtest) =================
[11:03:07] [PASSED] test_descriptor_init
[11:03:07] ================== [PASSED] sriov_packet ===================
[11:03:07] ================= pf_service (11 subtests) =================
[11:03:07] [PASSED] pf_negotiate_any
[11:03:07] [PASSED] pf_negotiate_base_match
[11:03:07] [PASSED] pf_negotiate_base_newer
[11:03:07] [PASSED] pf_negotiate_base_next
[11:03:07] [SKIPPED] pf_negotiate_base_older (no older minor)
[11:03:07] [PASSED] pf_negotiate_base_prev
[11:03:07] [PASSED] pf_negotiate_latest_match
[11:03:07] [PASSED] pf_negotiate_latest_newer
[11:03:07] [PASSED] pf_negotiate_latest_next
[11:03:07] [SKIPPED] pf_negotiate_latest_older (no older minor)
[11:03:07] [SKIPPED] pf_negotiate_latest_prev (no prev major)
[11:03:07] =================== [PASSED] pf_service ====================
[11:03:07] ================= xe_guc_g2g (2 subtests) ==================
[11:03:07] ============== xe_live_guc_g2g_kunit_default  ==============
[11:03:07] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[11:03:07] ============== xe_live_guc_g2g_kunit_allmem  ===============
[11:03:07] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[11:03:07] =================== [SKIPPED] xe_guc_g2g ===================
[11:03:07] =================== xe_mocs (2 subtests) ===================
[11:03:07] ================ xe_live_mocs_kernel_kunit  ================
[11:03:07] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[11:03:07] ================ xe_live_mocs_reset_kunit  =================
[11:03:07] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[11:03:07] ==================== [SKIPPED] xe_mocs =====================
[11:03:07] ================= xe_migrate (2 subtests) ==================
[11:03:07] ================= xe_migrate_sanity_kunit  =================
[11:03:07] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[11:03:07] ================== xe_validate_ccs_kunit  ==================
[11:03:07] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[11:03:07] =================== [SKIPPED] xe_migrate ===================
[11:03:07] ================== xe_dma_buf (1 subtest) ==================
[11:03:07] ==================== xe_dma_buf_kunit  =====================
[11:03:07] ================ [SKIPPED] xe_dma_buf_kunit ================
[11:03:07] =================== [SKIPPED] xe_dma_buf ===================
[11:03:07] ================= xe_bo_shrink (1 subtest) =================
[11:03:07] =================== xe_bo_shrink_kunit  ====================
[11:03:07] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[11:03:07] ================== [SKIPPED] xe_bo_shrink ==================
[11:03:07] ==================== xe_bo (2 subtests) ====================
[11:03:07] ================== xe_ccs_migrate_kunit  ===================
[11:03:07] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[11:03:07] ==================== xe_bo_evict_kunit  ====================
[11:03:07] =============== [SKIPPED] xe_bo_evict_kunit ================
[11:03:07] ===================== [SKIPPED] xe_bo ======================
[11:03:07] =================== xe_any (9 subtests) ====================
[11:03:07] [PASSED] test_to_xe
[11:03:07] [PASSED] test_to_dev
[11:03:07] [PASSED] test_to_pdev
[11:03:07] [PASSED] test_to_drm
[11:03:07] [PASSED] test_if_pdev
[11:03:07] [PASSED] test_if_xe
[11:03:07] [PASSED] test_if_tile
[11:03:07] [PASSED] test_if_gt
[11:03:07] [PASSED] test_to_id
[11:03:07] ===================== [PASSED] xe_any ======================
[11:03:07] ==================== args (13 subtests) ====================
[11:03:07] [PASSED] count_args_test
[11:03:07] [PASSED] call_args_example
[11:03:07] [PASSED] call_args_test
[11:03:07] [PASSED] drop_first_arg_example
[11:03:07] [PASSED] drop_first_arg_test
[11:03:07] [PASSED] first_arg_example
[11:03:07] [PASSED] first_arg_test
[11:03:07] [PASSED] last_arg_example
[11:03:07] [PASSED] last_arg_test
[11:03:07] [PASSED] pick_arg_example
[11:03:07] [PASSED] if_args_example
[11:03:07] [PASSED] if_args_test
[11:03:07] [PASSED] sep_comma_example
[11:03:07] ====================== [PASSED] args =======================
[11:03:07] =================== xe_pci (3 subtests) ====================
[11:03:07] ==================== check_graphics_ip  ====================
[11:03:07] [PASSED] 12.00 Xe_LP
[11:03:07] [PASSED] 12.10 Xe_LP+
[11:03:07] [PASSED] 12.55 Xe_HPG
[11:03:07] [PASSED] 12.60 Xe_HPC
[11:03:07] [PASSED] 12.70 Xe_LPG
[11:03:07] [PASSED] 12.71 Xe_LPG
[11:03:07] [PASSED] 12.74 Xe_LPG+
[11:03:07] [PASSED] 20.01 Xe2_HPG
[11:03:07] [PASSED] 20.02 Xe2_HPG
[11:03:07] [PASSED] 20.04 Xe2_LPG
[11:03:07] [PASSED] 30.00 Xe3_LPG
[11:03:07] [PASSED] 30.01 Xe3_LPG
[11:03:07] [PASSED] 30.03 Xe3_LPG
[11:03:07] [PASSED] 30.04 Xe3_LPG
[11:03:07] [PASSED] 30.05 Xe3_LPG
[11:03:07] [PASSED] 35.10 Xe3p_LPG
[11:03:07] [PASSED] 35.11 Xe3p_XPC
[11:03:07] ================ [PASSED] check_graphics_ip ================
[11:03:07] ===================== check_media_ip  ======================
[11:03:07] [PASSED] 12.00 Xe_M
[11:03:07] [PASSED] 12.55 Xe_HPM
[11:03:07] [PASSED] 13.00 Xe_LPM+
[11:03:07] [PASSED] 13.01 Xe2_HPM
[11:03:07] [PASSED] 20.00 Xe2_LPM
[11:03:07] [PASSED] 30.00 Xe3_LPM
[11:03:07] [PASSED] 30.02 Xe3_LPM
[11:03:07] [PASSED] 35.00 Xe3p_LPM
[11:03:07] [PASSED] 35.03 Xe3p_HPM
[11:03:07] ================= [PASSED] check_media_ip ==================
[11:03:07] =================== check_platform_desc  ===================
[11:03:07] [PASSED] 0x9A60 (TIGERLAKE)
[11:03:07] [PASSED] 0x9A68 (TIGERLAKE)
[11:03:07] [PASSED] 0x9A70 (TIGERLAKE)
[11:03:07] [PASSED] 0x9A40 (TIGERLAKE)
[11:03:07] [PASSED] 0x9A49 (TIGERLAKE)
[11:03:07] [PASSED] 0x9A59 (TIGERLAKE)
[11:03:07] [PASSED] 0x9A78 (TIGERLAKE)
[11:03:07] [PASSED] 0x9AC0 (TIGERLAKE)
[11:03:07] [PASSED] 0x9AC9 (TIGERLAKE)
[11:03:07] [PASSED] 0x9AD9 (TIGERLAKE)
[11:03:07] [PASSED] 0x9AF8 (TIGERLAKE)
[11:03:07] [PASSED] 0x4C80 (ROCKETLAKE)
[11:03:07] [PASSED] 0x4C8A (ROCKETLAKE)
[11:03:07] [PASSED] 0x4C8B (ROCKETLAKE)
[11:03:07] [PASSED] 0x4C8C (ROCKETLAKE)
[11:03:07] [PASSED] 0x4C90 (ROCKETLAKE)
[11:03:07] [PASSED] 0x4C9A (ROCKETLAKE)
[11:03:07] [PASSED] 0x4680 (ALDERLAKE_S)
[11:03:07] [PASSED] 0x4682 (ALDERLAKE_S)
[11:03:07] [PASSED] 0x4688 (ALDERLAKE_S)
[11:03:07] [PASSED] 0x468A (ALDERLAKE_S)
[11:03:07] [PASSED] 0x468B (ALDERLAKE_S)
[11:03:07] [PASSED] 0x4690 (ALDERLAKE_S)
[11:03:07] [PASSED] 0x4692 (ALDERLAKE_S)
[11:03:07] [PASSED] 0x4693 (ALDERLAKE_S)
[11:03:07] [PASSED] 0x46A0 (ALDERLAKE_P)
[11:03:07] [PASSED] 0x46A1 (ALDERLAKE_P)
[11:03:07] [PASSED] 0x46A2 (ALDERLAKE_P)
[11:03:07] [PASSED] 0x46A3 (ALDERLAKE_P)
[11:03:07] [PASSED] 0x46A6 (ALDERLAKE_P)
[11:03:07] [PASSED] 0x46A8 (ALDERLAKE_P)
[11:03:07] [PASSED] 0x46AA (ALDERLAKE_P)
[11:03:07] [PASSED] 0x462A (ALDERLAKE_P)
[11:03:07] [PASSED] 0x4626 (ALDERLAKE_P)
[11:03:07] [PASSED] 0x4628 (ALDERLAKE_P)
[11:03:07] [PASSED] 0x46B0 (ALDERLAKE_P)
[11:03:07] [PASSED] 0x46B1 (ALDERLAKE_P)
[11:03:07] [PASSED] 0x46B2 (ALDERLAKE_P)
[11:03:07] [PASSED] 0x46B3 (ALDERLAKE_P)
[11:03:07] [PASSED] 0x46C0 (ALDERLAKE_P)
[11:03:07] [PASSED] 0x46C1 (ALDERLAKE_P)
[11:03:07] [PASSED] 0x46C2 (ALDERLAKE_P)
[11:03:07] [PASSED] 0x46C3 (ALDERLAKE_P)
[11:03:07] [PASSED] 0x46D0 (ALDERLAKE_N)
[11:03:07] [PASSED] 0x46D1 (ALDERLAKE_N)
[11:03:07] [PASSED] 0x46D2 (ALDERLAKE_N)
[11:03:07] [PASSED] 0x46D3 (ALDERLAKE_N)
[11:03:07] [PASSED] 0x46D4 (ALDERLAKE_N)
[11:03:07] [PASSED] 0xA721 (ALDERLAKE_P)
[11:03:07] [PASSED] 0xA7A1 (ALDERLAKE_P)
[11:03:07] [PASSED] 0xA7A9 (ALDERLAKE_P)
[11:03:07] [PASSED] 0xA7AC (ALDERLAKE_P)
[11:03:07] [PASSED] 0xA7AD (ALDERLAKE_P)
[11:03:07] [PASSED] 0xA720 (ALDERLAKE_P)
[11:03:07] [PASSED] 0xA7A0 (ALDERLAKE_P)
[11:03:07] [PASSED] 0xA7A8 (ALDERLAKE_P)
[11:03:07] [PASSED] 0xA7AA (ALDERLAKE_P)
[11:03:07] [PASSED] 0xA7AB (ALDERLAKE_P)
[11:03:07] [PASSED] 0xA780 (ALDERLAKE_S)
[11:03:07] [PASSED] 0xA781 (ALDERLAKE_S)
[11:03:07] [PASSED] 0xA782 (ALDERLAKE_S)
[11:03:07] [PASSED] 0xA783 (ALDERLAKE_S)
[11:03:07] [PASSED] 0xA788 (ALDERLAKE_S)
[11:03:07] [PASSED] 0xA789 (ALDERLAKE_S)
[11:03:07] [PASSED] 0xA78A (ALDERLAKE_S)
[11:03:07] [PASSED] 0xA78B (ALDERLAKE_S)
[11:03:07] [PASSED] 0x4905 (DG1)
[11:03:07] [PASSED] 0x4906 (DG1)
[11:03:07] [PASSED] 0x4907 (DG1)
[11:03:07] [PASSED] 0x4908 (DG1)
[11:03:07] [PASSED] 0x4909 (DG1)
[11:03:07] [PASSED] 0x56C0 (DG2)
[11:03:07] [PASSED] 0x56C2 (DG2)
[11:03:07] [PASSED] 0x56C1 (DG2)
[11:03:07] [PASSED] 0x7D51 (METEORLAKE)
[11:03:07] [PASSED] 0x7DD1 (METEORLAKE)
[11:03:07] [PASSED] 0x7D41 (METEORLAKE)
[11:03:07] [PASSED] 0x7D67 (METEORLAKE)
[11:03:07] [PASSED] 0xB640 (METEORLAKE)
[11:03:07] [PASSED] 0x56A0 (DG2)
[11:03:07] [PASSED] 0x56A1 (DG2)
[11:03:07] [PASSED] 0x56A2 (DG2)
[11:03:07] [PASSED] 0x56BE (DG2)
[11:03:07] [PASSED] 0x56BF (DG2)
[11:03:07] [PASSED] 0x5690 (DG2)
[11:03:07] [PASSED] 0x5691 (DG2)
[11:03:07] [PASSED] 0x5692 (DG2)
[11:03:07] [PASSED] 0x56A5 (DG2)
[11:03:07] [PASSED] 0x56A6 (DG2)
[11:03:07] [PASSED] 0x56B0 (DG2)
[11:03:07] [PASSED] 0x56B1 (DG2)
[11:03:07] [PASSED] 0x56BA (DG2)
[11:03:07] [PASSED] 0x56BB (DG2)
[11:03:07] [PASSED] 0x56BC (DG2)
[11:03:07] [PASSED] 0x56BD (DG2)
[11:03:07] [PASSED] 0x5693 (DG2)
[11:03:07] [PASSED] 0x5694 (DG2)
[11:03:07] [PASSED] 0x5695 (DG2)
[11:03:07] [PASSED] 0x56A3 (DG2)
[11:03:07] [PASSED] 0x56A4 (DG2)
[11:03:07] [PASSED] 0x56B2 (DG2)
[11:03:07] [PASSED] 0x56B3 (DG2)
[11:03:07] [PASSED] 0x5696 (DG2)
[11:03:07] [PASSED] 0x5697 (DG2)
[11:03:07] [PASSED] 0xB69 (PVC)
[11:03:07] [PASSED] 0xB6E (PVC)
[11:03:07] [PASSED] 0xBD4 (PVC)
[11:03:07] [PASSED] 0xBD5 (PVC)
[11:03:07] [PASSED] 0xBD6 (PVC)
[11:03:07] [PASSED] 0xBD7 (PVC)
[11:03:07] [PASSED] 0xBD8 (PVC)
[11:03:07] [PASSED] 0xBD9 (PVC)
[11:03:07] [PASSED] 0xBDA (PVC)
[11:03:07] [PASSED] 0xBDB (PVC)
[11:03:07] [PASSED] 0xBE0 (PVC)
[11:03:07] [PASSED] 0xBE1 (PVC)
[11:03:07] [PASSED] 0xBE5 (PVC)
[11:03:07] [PASSED] 0x7D40 (METEORLAKE)
[11:03:07] [PASSED] 0x7D45 (METEORLAKE)
[11:03:07] [PASSED] 0x7D55 (METEORLAKE)
[11:03:07] [PASSED] 0x7D60 (METEORLAKE)
[11:03:07] [PASSED] 0x7DD5 (METEORLAKE)
[11:03:07] [PASSED] 0x6420 (LUNARLAKE)
[11:03:07] [PASSED] 0x64A0 (LUNARLAKE)
[11:03:07] [PASSED] 0x64B0 (LUNARLAKE)
[11:03:07] [PASSED] 0xE202 (BATTLEMAGE)
[11:03:07] [PASSED] 0xE209 (BATTLEMAGE)
[11:03:07] [PASSED] 0xE20B (BATTLEMAGE)
[11:03:07] [PASSED] 0xE20C (BATTLEMAGE)
[11:03:07] [PASSED] 0xE20D (BATTLEMAGE)
[11:03:07] [PASSED] 0xE210 (BATTLEMAGE)
[11:03:07] [PASSED] 0xE211 (BATTLEMAGE)
[11:03:07] [PASSED] 0xE212 (BATTLEMAGE)
[11:03:07] [PASSED] 0xE216 (BATTLEMAGE)
[11:03:07] [PASSED] 0xE220 (BATTLEMAGE)
[11:03:07] [PASSED] 0xE221 (BATTLEMAGE)
[11:03:07] [PASSED] 0xE222 (BATTLEMAGE)
[11:03:07] [PASSED] 0xE223 (BATTLEMAGE)
[11:03:07] [PASSED] 0xB080 (PANTHERLAKE)
[11:03:07] [PASSED] 0xB081 (PANTHERLAKE)
[11:03:07] [PASSED] 0xB082 (PANTHERLAKE)
[11:03:07] [PASSED] 0xB083 (PANTHERLAKE)
[11:03:07] [PASSED] 0xB084 (PANTHERLAKE)
[11:03:07] [PASSED] 0xB085 (PANTHERLAKE)
[11:03:07] [PASSED] 0xB086 (PANTHERLAKE)
[11:03:07] [PASSED] 0xB087 (PANTHERLAKE)
[11:03:07] [PASSED] 0xB08F (PANTHERLAKE)
[11:03:07] [PASSED] 0xB090 (PANTHERLAKE)
[11:03:07] [PASSED] 0xB0A0 (PANTHERLAKE)
[11:03:07] [PASSED] 0xB0B0 (PANTHERLAKE)
[11:03:07] [PASSED] 0xFD80 (PANTHERLAKE)
[11:03:07] [PASSED] 0xFD81 (PANTHERLAKE)
[11:03:07] [PASSED] 0xD740 (NOVALAKE_S)
[11:03:07] [PASSED] 0xD741 (NOVALAKE_S)
[11:03:07] [PASSED] 0xD742 (NOVALAKE_S)
[11:03:07] [PASSED] 0xD743 (NOVALAKE_S)
[11:03:07] [PASSED] 0xD745 (NOVALAKE_S)
[11:03:07] [PASSED] 0xD74A (NOVALAKE_S)
[11:03:07] [PASSED] 0xD74B (NOVALAKE_S)
[11:03:07] [PASSED] 0x674C (CRESCENTISLAND)
[11:03:07] [PASSED] 0x674D (CRESCENTISLAND)
[11:03:07] [PASSED] 0x674E (CRESCENTISLAND)
[11:03:07] [PASSED] 0x674F (CRESCENTISLAND)
[11:03:07] [PASSED] 0x6750 (CRESCENTISLAND)
[11:03:07] [PASSED] 0xD750 (NOVALAKE_P)
[11:03:07] [PASSED] 0xD751 (NOVALAKE_P)
[11:03:07] [PASSED] 0xD752 (NOVALAKE_P)
[11:03:07] [PASSED] 0xD753 (NOVALAKE_P)
[11:03:07] [PASSED] 0xD754 (NOVALAKE_P)
[11:03:07] [PASSED] 0xD755 (NOVALAKE_P)
[11:03:07] [PASSED] 0xD756 (NOVALAKE_P)
[11:03:07] [PASSED] 0xD757 (NOVALAKE_P)
[11:03:07] [PASSED] 0xD75F (NOVALAKE_P)
[11:03:07] =============== [PASSED] check_platform_desc ===============
[11:03:07] ===================== [PASSED] xe_pci ======================
[11:03:07] ============= xe_rtp_tables_test (5 subtests) ==============
[11:03:07] ================== xe_rtp_table_gt_test  ===================
[11:03:07] [PASSED] gt_was/14011060649
[11:03:07] [PASSED] gt_was/14011059788
[11:03:07] [PASSED] gt_was/14015795083
[11:03:07] [PASSED] gt_was/16021867713
[11:03:07] [PASSED] gt_was/14019449301
[11:03:07] [PASSED] gt_was/16028005424
[11:03:07] [PASSED] gt_was/14026578760
[11:03:07] [PASSED] gt_was/1409420604
[11:03:07] [PASSED] gt_was/1408615072
[11:03:07] [PASSED] gt_was/22010523718
[11:03:07] [PASSED] gt_was/14011006942
[11:03:07] [PASSED] gt_was/14014830051
[11:03:07] [PASSED] gt_was/18018781329
[11:03:07] [PASSED] gt_was/1509235366
[11:03:07] [PASSED] gt_was/18018781329
[11:03:07] [PASSED] gt_was/16016694945
[11:03:07] [PASSED] gt_was/14018575942
[11:03:07] [PASSED] gt_was/22016670082
[11:03:07] [PASSED] gt_was/22016670082
[11:03:07] [PASSED] gt_was/14017421178
[11:03:07] [PASSED] gt_was/16025250150
[11:03:07] [PASSED] gt_was/14021871409
[11:03:07] [PASSED] gt_was/16021865536
[11:03:07] [PASSED] gt_was/14021486841
[11:03:07] [PASSED] gt_was/14025160223
[11:03:07] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[11:03:07] [PASSED] gt_was/14025635424
[11:03:07] [PASSED] gt_was/16028005424
[11:03:07] ============== [PASSED] xe_rtp_table_gt_test ===============
[11:03:07] ================== xe_rtp_table_gt_test  ===================
[11:03:07] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[11:03:07] [PASSED] gt_tunings/Tuning: 32B Access Enable
[11:03:07] [PASSED] gt_tunings/Tuning: L3 cache
[11:03:07] [PASSED] gt_tunings/Tuning: L3 cache - media
[11:03:07] [PASSED] gt_tunings/Tuning: Compression Overfetch
[11:03:07] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[11:03:07] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[11:03:07] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[11:03:07] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[11:03:07] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[11:03:07] [PASSED] gt_tunings/Tuning: Stateless compression control
[11:03:07] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[11:03:07] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[11:03:07] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[11:03:07] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[11:03:07] ============== [PASSED] xe_rtp_table_gt_test ===============
[11:03:07] ================== xe_rtp_table_oob_test  ==================
[11:03:07] [PASSED] oob_was/1607983814
[11:03:07] [PASSED] oob_was/16010904313
[11:03:07] [PASSED] oob_was/18022495364
[11:03:07] [PASSED] oob_was/22012773006
[11:03:07] [PASSED] oob_was/14014475959
[11:03:07] [PASSED] oob_was/22011391025
[11:03:07] [PASSED] oob_was/22012727170
[11:03:07] [PASSED] oob_was/22012727685
[11:03:07] [PASSED] oob_was/22016596838
[11:03:07] [PASSED] oob_was/18020744125
[11:03:07] [PASSED] oob_was/1409600907
[11:03:07] [PASSED] oob_was/22014953428
[11:03:07] [PASSED] oob_was/16017236439
[11:03:07] [PASSED] oob_was/14019821291
[11:03:07] [PASSED] oob_was/14015076503
[11:03:07] [PASSED] oob_was/14018913170
[11:03:07] [PASSED] oob_was/14018094691
[11:03:07] [PASSED] oob_was/18024947630
[11:03:07] [PASSED] oob_was/16022287689
[11:03:07] [PASSED] oob_was/13011645652
[11:03:07] [PASSED] oob_was/14022293748
[11:03:07] [PASSED] oob_was/22019794406
[11:03:07] [PASSED] oob_was/22019338487
[11:03:07] [PASSED] oob_was/16023588340
[11:03:07] [PASSED] oob_was/14019789679
[11:03:07] [PASSED] oob_was/14022866841
[11:03:07] [PASSED] oob_was/16021333562
[11:03:07] [PASSED] oob_was/14016712196
[11:03:07] [PASSED] oob_was/14015568240
[11:03:07] [PASSED] oob_was/18013179988
[11:03:07] [PASSED] oob_was/1508761755
[11:03:07] [PASSED] oob_was/16023105232
[11:03:07] [PASSED] oob_was/16026508708
[11:03:07] [PASSED] oob_was/14020001231
[11:03:07] [PASSED] oob_was/16023683509
[11:03:07] [PASSED] oob_was/14025515070
[11:03:07] [PASSED] oob_was/15015404425_disable
[11:03:07] [PASSED] oob_was/16026007364
[11:03:07] [PASSED] oob_was/14020316580
[11:03:07] [PASSED] oob_was/14025883347
[11:03:07] [PASSED] oob_was/16029380221
[11:03:07] [PASSED] oob_was/22022079272
[11:03:07] [PASSED] oob_was/16029897822
[11:03:07] [PASSED] oob_was/14027054324
[11:03:07] ============== [PASSED] xe_rtp_table_oob_test ==============
[11:03:07] ================ xe_rtp_table_dev_oob_test  ================
[11:03:07] [PASSED] device_oob_was/22010954014
[11:03:07] [PASSED] device_oob_was/15015404425
[11:03:07] [PASSED] device_oob_was/22019338487_display
[11:03:07] [PASSED] device_oob_was/14022085890
[11:03:07] [PASSED] device_oob_was/14026539277
[11:03:07] [PASSED] device_oob_was/14026633728
[11:03:07] [PASSED] device_oob_was/14026746987
[11:03:07] [PASSED] device_oob_was/14026779378
[11:03:07] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[11:03:07] ========== xe_rtp_table_missing_upper_bound_test  ==========
[11:03:07] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865
[11:03:07] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037
[11:03:07] [PASSED] register_whitelist/1806527549
[11:03:07] [PASSED] register_whitelist/allow_read_ctx_timestamp
[11:03:07] [PASSED] register_whitelist/allow_read_queue_timestamp
[11:03:07] [PASSED] register_whitelist/16014440446
[11:03:07] [PASSED] register_whitelist/16017236439
[11:03:07] [PASSED] register_whitelist/16020183090
[11:03:07] [PASSED] register_whitelist/14024997852
[11:03:07] [PASSED] register_whitelist/14024997852
[11:03:07] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ======
[11:03:07] =============== [PASSED] xe_rtp_tables_test ================
[11:03:07] =================== xe_rtp (3 subtests) ====================
[11:03:07] =================== xe_rtp_rules_tests  ====================
[11:03:07] [PASSED] no
[11:03:07] [PASSED] yes
[11:03:07] [PASSED] no-and-no
[11:03:07] [PASSED] no-and-yes
[11:03:07] [PASSED] yes-and-no
[11:03:07] [PASSED] yes-and-yes
[11:03:07] [PASSED] no-or-no
[11:03:07] [PASSED] no-or-yes
[11:03:07] [PASSED] yes-or-no
[11:03:07] [PASSED] yes-or-yes
[11:03:07] [PASSED] no-yes-or-yes-no
[11:03:07] [PASSED] no-yes-or-yes-yes
[11:03:07] [PASSED] yes-yes-or-no-yes
[11:03:07] [PASSED] yes-yes-or-yes-yes
[11:03:07] [PASSED] no-no-or-yes-or-no
[11:03:07] [PASSED] or
[11:03:07] [PASSED] or-yes
[11:03:07] [PASSED] or-no
[11:03:07] [PASSED] yes-or
[11:03:07] [PASSED] no-or
[11:03:07] [PASSED] no-or-or-yes
[11:03:07] [PASSED] yes-or-or-no
[11:03:07] [PASSED] no-or-or-no
[11:03:07] [PASSED] missing-context-engine-class
[11:03:07] [PASSED] missing-context-engine-class-or-yes
[11:03:07] [PASSED] missing-context-engine-class-or-or-yes
[11:03:07] =============== [PASSED] xe_rtp_rules_tests ================
[11:03:07] =============== xe_rtp_process_to_sr_tests  ================
[11:03:07] [PASSED] coalesce-same-reg
[11:03:07] [PASSED] coalesce-same-reg-literal-and-func
[11:03:07] [PASSED] no-match-no-add
[11:03:07] [PASSED] two-regs-two-entries
[11:03:07] [PASSED] clr-one-set-other
[11:03:07] [PASSED] set-field
[11:03:07] [PASSED] conflict-duplicate
[11:03:07] [PASSED] conflict-not-disjoint
[11:03:07] [PASSED] conflict-not-disjoint-literal-and-func
[11:03:07] [PASSED] conflict-reg-type
[11:03:07] [PASSED] bad-mcr-reg-forced-to-regular
[11:03:07] [PASSED] bad-regular-reg-forced-to-mcr
[11:03:07] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[11:03:07] ================== xe_rtp_process_tests  ===================
[11:03:07] [PASSED] active1
[11:03:07] [PASSED] active2
[11:03:07] [PASSED] active-inactive
[11:03:07] [PASSED] inactive-active
[11:03:07] [PASSED] inactive-active-inactive
[11:03:07] [PASSED] inactive-inactive-inactive
[11:03:07] ============== [PASSED] xe_rtp_process_tests ===============
[11:03:07] ===================== [PASSED] xe_rtp ======================
[11:03:07] ==================== xe_wa (1 subtest) =====================
[11:03:07] ======================== xe_wa_gt  =========================
[11:03:07] [PASSED] TIGERLAKE B0
[11:03:07] [PASSED] DG1 A0
[11:03:07] [PASSED] DG1 B0
[11:03:07] [PASSED] ALDERLAKE_S A0
[11:03:07] [PASSED] ALDERLAKE_S B0
[11:03:07] [PASSED] ALDERLAKE_S C0
[11:03:07] [PASSED] ALDERLAKE_S D0
[11:03:07] [PASSED] ALDERLAKE_P A0
[11:03:07] [PASSED] ALDERLAKE_P B0
[11:03:07] [PASSED] ALDERLAKE_P C0
[11:03:07] [PASSED] ALDERLAKE_S RPLS D0
[11:03:07] [PASSED] ALDERLAKE_P RPLU E0
[11:03:07] [PASSED] DG2 G10 C0
[11:03:07] [PASSED] DG2 G11 B1
[11:03:07] [PASSED] DG2 G12 A1
[11:03:07] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[11:03:07] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[11:03:07] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[11:03:07] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[11:03:07] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[11:03:07] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[11:03:07] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[11:03:07] ==================== [PASSED] xe_wa_gt =====================
[11:03:07] ====================== [PASSED] xe_wa ======================
[11:03:07] ============================================================
[11:03:07] Testing complete. Ran 805 tests: passed: 777, skipped: 28
[11:03:07] Elapsed time: 37.886s total, 4.452s configuring, 32.718s building, 0.697s running

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

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

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/dma-buf/.kunitconfig
[11:03:47] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[11:03:49] 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
[11:03:58] Starting KUnit Kernel (1/1)...
[11:03:58] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[11:03:58] =============== dma-buf-fence (12 subtests) ================
[11:03:58] [PASSED] test_sanitycheck
[11:03:58] [PASSED] test_signaling
[11:03:58] [PASSED] test_add_callback
[11:03:58] [PASSED] test_late_add_callback
[11:03:58] [PASSED] test_rm_callback
[11:03:58] [PASSED] test_late_rm_callback
[11:03:58] [PASSED] test_status
[11:03:58] [PASSED] test_error
[11:03:58] [PASSED] test_wait
[11:03:58] [PASSED] test_wait_timeout
[11:03:58] [PASSED] test_stub
[11:03:58] [SKIPPED] test_race_signal_callback (requires at least 2 CPUs)
[11:03:58] ================== [PASSED] dma-buf-fence ==================
[11:03:58] ============ dma-buf-fence-chain (11 subtests) =============
[11:03:58] [PASSED] test_sanitycheck
[11:03:58] [PASSED] test_find_seqno
[11:03:58] [PASSED] test_find_signaled
[11:03:58] [PASSED] test_find_out_of_order
[11:04:03] [PASSED] test_find_gap
[11:04:03] [PASSED] test_find_race
[11:04:03] [PASSED] test_signal_forward
[11:04:03] [PASSED] test_signal_backward
[11:04:03] [PASSED] test_wait_forward
[11:04:03] [PASSED] test_wait_backward
[11:04:03] [PASSED] test_wait_random
[11:04:03] =============== [PASSED] dma-buf-fence-chain ===============
[11:04:03] ============ dma-buf-fence-unwrap (10 subtests) ============
[11:04:03] [PASSED] test_sanitycheck
[11:04:03] [PASSED] test_unwrap_array
[11:04:03] [PASSED] test_unwrap_chain
[11:04:03] [PASSED] test_unwrap_chain_array
[11:04:03] [PASSED] test_unwrap_merge
[11:04:03] [PASSED] test_unwrap_merge_duplicate
[11:04:03] [PASSED] test_unwrap_merge_seqno
[11:04:03] [PASSED] test_unwrap_merge_order
[11:04:03] [PASSED] test_unwrap_merge_complex
[11:04:03] [PASSED] test_unwrap_merge_complex_seqno
[11:04:03] ============== [PASSED] dma-buf-fence-unwrap ===============
[11:04:03] ================ dma-buf-resv (5 subtests) =================
[11:04:03] [PASSED] test_sanitycheck
[11:04:03] ===================== test_signaling  ======================
[11:04:03] [PASSED] kernel
[11:04:03] [PASSED] write
[11:04:03] [PASSED] read
[11:04:03] [PASSED] bookkeep
[11:04:03] ================= [PASSED] test_signaling ==================
[11:04:03] ====================== test_for_each  ======================
[11:04:03] [PASSED] kernel
[11:04:03] [PASSED] write
[11:04:03] [PASSED] read
[11:04:03] [PASSED] bookkeep
[11:04:03] ================== [PASSED] test_for_each ==================
[11:04:03] ================= test_for_each_unlocked  ==================
[11:04:03] [PASSED] kernel
[11:04:03] [PASSED] write
[11:04:03] [PASSED] read
[11:04:03] [PASSED] bookkeep
[11:04:03] ============= [PASSED] test_for_each_unlocked ==============
[11:04:03] ===================== test_get_fences  =====================
[11:04:03] [PASSED] kernel
[11:04:03] [PASSED] write
[11:04:03] [PASSED] read
[11:04:03] [PASSED] bookkeep
[11:04:03] ================= [PASSED] test_get_fences =================
[11:04:03] ================== [PASSED] dma-buf-resv ===================
[11:04:03] ============================================================
[11:04:03] Testing complete. Ran 50 tests: passed: 49, skipped: 1
[11:04:03] Elapsed time: 15.701s total, 1.764s configuring, 8.614s building, 5.287s running

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



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

* ✓ Xe.CI.BAT: success for Split GuC ID space into usable and shareable pools (rev3)
  2026-08-27 10:28 [PATCH v3 0/4] Split GuC ID space into usable and shareable pools Piórkowski, Piotr
                   ` (4 preceding siblings ...)
  2026-08-27 11:04 ` ✓ CI.KUnit: success for Split GuC ID space into usable and shareable pools (rev3) Patchwork
@ 2026-08-27 11:45 ` Patchwork
  2026-08-27 12:52 ` ✓ Xe.CI.FULL: " Patchwork
  6 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2026-08-27 11:45 UTC (permalink / raw)
  To: Piórkowski, Piotr; +Cc: intel-xe

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

== Series Details ==

Series: Split GuC ID space into usable and shareable pools (rev3)
URL   : https://patchwork.freedesktop.org/series/170767/
State : success

== Summary ==

CI Bug Log - changes from xe-5652-098021382451783ea6448fa7f0e2a4cbc395c3d2_BAT -> xe-pw-170767v3_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

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

  Missing    (1): bat-bmg-2 


Changes
-------

  No changes found


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

  * Linux: xe-5652-098021382451783ea6448fa7f0e2a4cbc395c3d2 -> xe-pw-170767v3

  IGT_9076: 8f42b0189d73d9912ad58c99cfaa4ff46c20fcc3 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-5652-098021382451783ea6448fa7f0e2a4cbc395c3d2: 098021382451783ea6448fa7f0e2a4cbc395c3d2
  xe-pw-170767v3: 170767v3

== Logs ==

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

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

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

* ✓ Xe.CI.FULL: success for Split GuC ID space into usable and shareable pools (rev3)
  2026-08-27 10:28 [PATCH v3 0/4] Split GuC ID space into usable and shareable pools Piórkowski, Piotr
                   ` (5 preceding siblings ...)
  2026-08-27 11:45 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-08-27 12:52 ` Patchwork
  6 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2026-08-27 12:52 UTC (permalink / raw)
  To: Piórkowski, Piotr; +Cc: intel-xe

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

== Series Details ==

Series: Split GuC ID space into usable and shareable pools (rev3)
URL   : https://patchwork.freedesktop.org/series/170767/
State : success

== Summary ==

CI Bug Log - changes from xe-5652-098021382451783ea6448fa7f0e2a4cbc395c3d2_FULL -> xe-pw-170767v3_FULL
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (2 -> 2)
------------------------------

  No changes in participating hosts

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

  Here are the changes found in xe-pw-170767v3_FULL that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@kms_big_fb@x-tiled-32bpp-rotate-90:
    - shard-lnl:          NOTRUN -> [SKIP][1] ([Intel XE#1407])
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@kms_big_fb@x-tiled-32bpp-rotate-90.html

  * igt@kms_big_fb@y-tiled-16bpp-rotate-270:
    - shard-bmg:          NOTRUN -> [SKIP][2] ([Intel XE#1124])
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-7/igt@kms_big_fb@y-tiled-16bpp-rotate-270.html

  * igt@kms_bw@linear-tiling-3-displays-target-1920x1080p:
    - shard-lnl:          NOTRUN -> [SKIP][3] ([Intel XE#367])
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@kms_bw@linear-tiling-3-displays-target-1920x1080p.html

  * igt@kms_ccs@random-ccs-data-4-tiled-mtl-mc-ccs:
    - shard-lnl:          NOTRUN -> [SKIP][4] ([Intel XE#2887])
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@kms_ccs@random-ccs-data-4-tiled-mtl-mc-ccs.html

  * igt@kms_chamelium_color@gamma:
    - shard-bmg:          NOTRUN -> [SKIP][5] ([Intel XE#2325] / [Intel XE#7358])
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-4/igt@kms_chamelium_color@gamma.html

  * igt@kms_chamelium_hpd@dp-hpd-for-each-pipe:
    - shard-bmg:          NOTRUN -> [SKIP][6] ([Intel XE#2252])
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-7/igt@kms_chamelium_hpd@dp-hpd-for-each-pipe.html

  * igt@kms_chamelium_hpd@hdmi-hpd:
    - shard-lnl:          NOTRUN -> [SKIP][7] ([Intel XE#373])
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@kms_chamelium_hpd@hdmi-hpd.html

  * igt@kms_content_protection@srm:
    - shard-bmg:          NOTRUN -> [FAIL][8] ([Intel XE#1178] / [Intel XE#3304] / [Intel XE#7374]) +1 other test fail
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-7/igt@kms_content_protection@srm.html

  * igt@kms_cursor_crc@cursor-offscreen-512x170:
    - shard-bmg:          NOTRUN -> [SKIP][9] ([Intel XE#2321] / [Intel XE#7355])
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-7/igt@kms_cursor_crc@cursor-offscreen-512x170.html

  * igt@kms_cursor_legacy@cursorb-vs-flipb-atomic:
    - shard-lnl:          NOTRUN -> [SKIP][10] ([Intel XE#309] / [Intel XE#7343])
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic.html

  * igt@kms_dsc@dsc-with-bpc-formats-bigjoiner:
    - shard-lnl:          NOTRUN -> [SKIP][11] ([Intel XE#8265])
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@kms_dsc@dsc-with-bpc-formats-bigjoiner.html

  * igt@kms_dsc@dsc-with-bpc-formats-ultrajoiner:
    - shard-bmg:          NOTRUN -> [SKIP][12] ([Intel XE#8265])
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-4/igt@kms_dsc@dsc-with-bpc-formats-ultrajoiner.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1:
    - shard-lnl:          [PASS][13] -> [FAIL][14] ([Intel XE#301])
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5652-098021382451783ea6448fa7f0e2a4cbc395c3d2/shard-lnl-5/igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1.html
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-downscaling:
    - shard-bmg:          NOTRUN -> [SKIP][15] ([Intel XE#7178] / [Intel XE#7351])
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-4/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-downscaling.html

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

  * igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-shrfb-plflip-blt:
    - shard-lnl:          NOTRUN -> [SKIP][17] ([Intel XE#656] / [Intel XE#7905]) +4 other tests skip
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-shrfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@fbc-1p-offscreen-pri-shrfb-draw-blt:
    - shard-bmg:          NOTRUN -> [SKIP][18] ([Intel XE#4141]) +2 other tests skip
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-7/igt@kms_frontbuffer_tracking@fbc-1p-offscreen-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-argb161616f-draw-render:
    - shard-lnl:          NOTRUN -> [SKIP][19] ([Intel XE#7061] / [Intel XE#7356])
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@kms_frontbuffer_tracking@fbcdrrs-argb161616f-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcdrrshdr-2p-scndscrn-pri-shrfb-draw-render:
    - shard-bmg:          NOTRUN -> [SKIP][20] ([Intel XE#2311]) +5 other tests skip
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-7/igt@kms_frontbuffer_tracking@fbcdrrshdr-2p-scndscrn-pri-shrfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-indfb-plflip-blt:
    - shard-bmg:          NOTRUN -> [SKIP][21] ([Intel XE#2313]) +14 other tests skip
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-7/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-indfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-abgr161616f-draw-blt:
    - shard-bmg:          NOTRUN -> [SKIP][22] ([Intel XE#7061] / [Intel XE#7356])
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-7/igt@kms_frontbuffer_tracking@fbcpsr-abgr161616f-draw-blt.html

  * igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-indfb-plflip-blt:
    - shard-lnl:          NOTRUN -> [SKIP][23] ([Intel XE#7865]) +4 other tests skip
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-indfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@psrhdr-2p-primscrn-shrfb-msflip-blt:
    - shard-lnl:          NOTRUN -> [SKIP][24] ([Intel XE#7905]) +4 other tests skip
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@kms_frontbuffer_tracking@psrhdr-2p-primscrn-shrfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@psrhdr-argb161616f-draw-render:
    - shard-lnl:          NOTRUN -> [SKIP][25] ([Intel XE#7061])
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@kms_frontbuffer_tracking@psrhdr-argb161616f-draw-render.html

  * igt@kms_plane@pixel-format-yf-tiled-modifier-source-clamping:
    - shard-lnl:          NOTRUN -> [SKIP][26] ([Intel XE#7283])
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@kms_plane@pixel-format-yf-tiled-modifier-source-clamping.html

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

  * igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
    - shard-lnl:          NOTRUN -> [SKIP][28] ([Intel XE#1439] / [Intel XE#3141] / [Intel XE#7383])
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html

  * igt@kms_psr2_sf@psr2-plane-move-sf-dmg-area:
    - shard-bmg:          NOTRUN -> [SKIP][29] ([Intel XE#1489])
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-4/igt@kms_psr2_sf@psr2-plane-move-sf-dmg-area.html

  * igt@kms_psr@fbc-pr-primary-render:
    - shard-lnl:          NOTRUN -> [SKIP][30] ([Intel XE#1406])
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@kms_psr@fbc-pr-primary-render.html

  * igt@kms_psr@fbc-psr-cursor-plane-move:
    - shard-bmg:          NOTRUN -> [SKIP][31] ([Intel XE#2234] / [Intel XE#2850]) +1 other test skip
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-4/igt@kms_psr@fbc-psr-cursor-plane-move.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
    - shard-lnl:          NOTRUN -> [SKIP][32] ([Intel XE#1127] / [Intel XE#5813])
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html

  * igt@xe_evict@evict-mixed-many-threads-small:
    - shard-bmg:          [PASS][33] -> [INCOMPLETE][34] ([Intel XE#6321] / [Intel XE#8355])
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5652-098021382451783ea6448fa7f0e2a4cbc395c3d2/shard-bmg-7/igt@xe_evict@evict-mixed-many-threads-small.html
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-9/igt@xe_evict@evict-mixed-many-threads-small.html

  * igt@xe_exec_balancer@many-execqueues-parallel-userptr-invalidate:
    - shard-lnl:          NOTRUN -> [SKIP][35] ([Intel XE#7482]) +2 other tests skip
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@xe_exec_balancer@many-execqueues-parallel-userptr-invalidate.html

  * igt@xe_exec_basic@multigpu-many-execqueues-many-vm-userptr:
    - shard-bmg:          NOTRUN -> [SKIP][36] ([Intel XE#2322] / [Intel XE#7372]) +1 other test skip
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-7/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-userptr.html

  * igt@xe_exec_fault_mode@many-multi-queue-imm:
    - shard-bmg:          NOTRUN -> [SKIP][37] ([Intel XE#8374]) +1 other test skip
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-7/igt@xe_exec_fault_mode@many-multi-queue-imm.html

  * igt@xe_exec_fault_mode@twice-multi-queue-userptr-invalidate-race-imm:
    - shard-lnl:          NOTRUN -> [SKIP][38] ([Intel XE#8374])
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@xe_exec_fault_mode@twice-multi-queue-userptr-invalidate-race-imm.html

  * igt@xe_exec_multi_queue@many-execs-preempt-mode-dyn-priority:
    - shard-lnl:          NOTRUN -> [SKIP][39] ([Intel XE#8364]) +3 other tests skip
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@xe_exec_multi_queue@many-execs-preempt-mode-dyn-priority.html

  * igt@xe_exec_multi_queue@two-queues-basic-smem:
    - shard-bmg:          NOTRUN -> [SKIP][40] ([Intel XE#8364]) +2 other tests skip
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-7/igt@xe_exec_multi_queue@two-queues-basic-smem.html

  * igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-comp-single-vma:
    - shard-lnl:          NOTRUN -> [SKIP][41] ([Intel XE#6196])
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-comp-single-vma.html

  * igt@xe_exec_threads@threads-multi-queue-cm-fd-userptr-rebind:
    - shard-bmg:          NOTRUN -> [SKIP][42] ([Intel XE#8378])
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-7/igt@xe_exec_threads@threads-multi-queue-cm-fd-userptr-rebind.html

  * igt@xe_exec_threads@threads-multi-queue-cm-rebind:
    - shard-lnl:          NOTRUN -> [SKIP][43] ([Intel XE#8378])
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@xe_exec_threads@threads-multi-queue-cm-rebind.html

  * igt@xe_module_load@many-reload:
    - shard-bmg:          [PASS][44] -> [ABORT][45] ([Intel XE#8007])
   [44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5652-098021382451783ea6448fa7f0e2a4cbc395c3d2/shard-bmg-4/igt@xe_module_load@many-reload.html
   [45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-3/igt@xe_module_load@many-reload.html

  * igt@xe_multigpu_svm@mgpu-xgpu-access-basic:
    - shard-bmg:          NOTRUN -> [SKIP][46] ([Intel XE#6964])
   [46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-4/igt@xe_multigpu_svm@mgpu-xgpu-access-basic.html

  * igt@xe_query@multigpu-query-config:
    - shard-bmg:          NOTRUN -> [SKIP][47] ([Intel XE#944])
   [47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-7/igt@xe_query@multigpu-query-config.html

  * igt@xe_sriov_flr@flr-each-isolation:
    - shard-bmg:          NOTRUN -> [FAIL][48] ([Intel XE#7992])
   [48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-7/igt@xe_sriov_flr@flr-each-isolation.html

  * igt@xe_sriov_flr@flr-twice:
    - shard-lnl:          NOTRUN -> [SKIP][49] ([Intel XE#4273])
   [49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@xe_sriov_flr@flr-twice.html

  * igt@xe_vm@vm-get-property-invalid-property:
    - shard-lnl:          [PASS][50] -> [ABORT][51] ([Intel XE#8007])
   [50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5652-098021382451783ea6448fa7f0e2a4cbc395c3d2/shard-lnl-6/igt@xe_vm@vm-get-property-invalid-property.html
   [51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-4/igt@xe_vm@vm-get-property-invalid-property.html

  
#### Possible fixes ####

  * igt@fbdev@pan:
    - shard-bmg:          [FAIL][52] ([Intel XE#2488]) -> [PASS][53]
   [52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5652-098021382451783ea6448fa7f0e2a4cbc395c3d2/shard-bmg-10/igt@fbdev@pan.html
   [53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-9/igt@fbdev@pan.html

  * igt@kms_async_flips@alternate-sync-async-flip-atomic:
    - shard-bmg:          [FAIL][54] ([Intel XE#3718] / [Intel XE#6078]) -> [PASS][55]
   [54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5652-098021382451783ea6448fa7f0e2a4cbc395c3d2/shard-bmg-1/igt@kms_async_flips@alternate-sync-async-flip-atomic.html
   [55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-9/igt@kms_async_flips@alternate-sync-async-flip-atomic.html

  * igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-d-dp-2:
    - shard-bmg:          [FAIL][56] ([Intel XE#6078]) -> [PASS][57]
   [56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5652-098021382451783ea6448fa7f0e2a4cbc395c3d2/shard-bmg-1/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-d-dp-2.html
   [57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-9/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-d-dp-2.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1:
    - shard-lnl:          [FAIL][58] ([Intel XE#301] / [Intel XE#3149]) -> [PASS][59]
   [58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5652-098021382451783ea6448fa7f0e2a4cbc395c3d2/shard-lnl-5/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html
   [59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html

  * igt@kms_hdr@invalid-hdr:
    - shard-bmg:          [SKIP][60] ([Intel XE#1503]) -> [PASS][61]
   [60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5652-098021382451783ea6448fa7f0e2a4cbc395c3d2/shard-bmg-5/igt@kms_hdr@invalid-hdr.html
   [61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-2/igt@kms_hdr@invalid-hdr.html

  * igt@xe_fault_injection@vm-bind-fail-vm_bind_ioctl_ops_create:
    - shard-bmg:          [ABORT][62] ([Intel XE#8007]) -> [PASS][63] +1 other test pass
   [62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5652-098021382451783ea6448fa7f0e2a4cbc395c3d2/shard-bmg-3/igt@xe_fault_injection@vm-bind-fail-vm_bind_ioctl_ops_create.html
   [63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-4/igt@xe_fault_injection@vm-bind-fail-vm_bind_ioctl_ops_create.html

  
#### Warnings ####

  * igt@kms_flip@flip-vs-expired-vblank-interruptible:
    - shard-lnl:          [FAIL][64] ([Intel XE#301] / [Intel XE#3149]) -> [FAIL][65] ([Intel XE#301])
   [64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5652-098021382451783ea6448fa7f0e2a4cbc395c3d2/shard-lnl-5/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
   [65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank-interruptible.html

  * igt@kms_hdr@brightness-with-hdr:
    - shard-bmg:          [SKIP][66] ([Intel XE#3374] / [Intel XE#3544]) -> [SKIP][67] ([Intel XE#3544])
   [66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5652-098021382451783ea6448fa7f0e2a4cbc395c3d2/shard-bmg-2/igt@kms_hdr@brightness-with-hdr.html
   [67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-10/igt@kms_hdr@brightness-with-hdr.html

  * igt@kms_tiled_display@basic-test-pattern-with-chamelium:
    - shard-bmg:          [SKIP][68] ([Intel XE#2509] / [Intel XE#7437]) -> [SKIP][69] ([Intel XE#2426] / [Intel XE#5848])
   [68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5652-098021382451783ea6448fa7f0e2a4cbc395c3d2/shard-bmg-10/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
   [69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-bmg-9/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html

  * igt@xe_wedged@basic-wedged:
    - shard-lnl:          [ABORT][70] ([Intel XE#8963]) -> [DMESG-WARN][71] ([Intel XE#8963])
   [70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5652-098021382451783ea6448fa7f0e2a4cbc395c3d2/shard-lnl-5/igt@xe_wedged@basic-wedged.html
   [71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170767v3/shard-lnl-7/igt@xe_wedged@basic-wedged.html

  
  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [Intel XE#1127]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1127
  [Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
  [Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
  [Intel XE#1407]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1407
  [Intel XE#1439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1439
  [Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
  [Intel XE#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
  [Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
  [Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
  [Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
  [Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
  [Intel XE#2321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2321
  [Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
  [Intel XE#2325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2325
  [Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
  [Intel XE#2488]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2488
  [Intel XE#2509]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2509
  [Intel XE#2763]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2763
  [Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
  [Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
  [Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
  [Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
  [Intel XE#3141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3141
  [Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
  [Intel XE#3304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3304
  [Intel XE#3374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3374
  [Intel XE#3544]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3544
  [Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
  [Intel XE#3718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3718
  [Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
  [Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
  [Intel XE#4273]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4273
  [Intel XE#5813]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5813
  [Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
  [Intel XE#6078]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6078
  [Intel XE#6196]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6196
  [Intel XE#6312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6312
  [Intel XE#6321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6321
  [Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
  [Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
  [Intel XE#6886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6886
  [Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
  [Intel XE#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
  [Intel XE#7178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7178
  [Intel XE#7283]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7283
  [Intel XE#7343]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7343
  [Intel XE#7351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7351
  [Intel XE#7355]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7355
  [Intel XE#7356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7356
  [Intel XE#7358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7358
  [Intel XE#7372]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7372
  [Intel XE#7374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7374
  [Intel XE#7383]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7383
  [Intel XE#7437]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7437
  [Intel XE#7482]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7482
  [Intel XE#7865]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7865
  [Intel XE#7905]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7905
  [Intel XE#7992]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7992
  [Intel XE#8007]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8007
  [Intel XE#8265]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8265
  [Intel XE#8355]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8355
  [Intel XE#8364]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8364
  [Intel XE#8374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8374
  [Intel XE#8378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8378
  [Intel XE#8963]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8963
  [Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944


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

  * Linux: xe-5652-098021382451783ea6448fa7f0e2a4cbc395c3d2 -> xe-pw-170767v3

  IGT_9076: 8f42b0189d73d9912ad58c99cfaa4ff46c20fcc3 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-5652-098021382451783ea6448fa7f0e2a4cbc395c3d2: 098021382451783ea6448fa7f0e2a4cbc395c3d2
  xe-pw-170767v3: 170767v3

== Logs ==

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

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

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

end of thread, other threads:[~2026-08-27 12:52 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-27 10:28 [PATCH v3 0/4] Split GuC ID space into usable and shareable pools Piórkowski, Piotr
2026-08-27 10:28 ` [PATCH v3 1/4] drm/xe/guc: Split GuC ID manager " Piórkowski, Piotr
2026-08-27 10:29 ` [PATCH v3 2/4] drm/xe/kunit: Extend GuC ID manager split-pool coverage Piórkowski, Piotr
2026-08-27 10:44   ` sashiko-bot
2026-08-27 10:29 ` [PATCH v3 3/4] drm/xe/guc: Start use explicitly usable GuC IDs for for submission Piórkowski, Piotr
2026-08-27 10:29 ` [PATCH v3 4/4] drm/xe/pf: Explicitly use shareable GuC IDs for VFs provisioning Piórkowski, Piotr
2026-08-27 11:04 ` ✓ CI.KUnit: success for Split GuC ID space into usable and shareable pools (rev3) Patchwork
2026-08-27 11:45 ` ✓ Xe.CI.BAT: " Patchwork
2026-08-27 12:52 ` ✓ Xe.CI.FULL: " Patchwork

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