Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH i-g-t 0/5] Add xe_sriov_auto_provisioning tests
@ 2024-12-18 12:00 Marcin Bernatowicz
  2024-12-18 12:00 ` [PATCH i-g-t 1/5] lib/xe/xe_sriov_debugfs: Add debugfs get/set functions for u32, u64, bool Marcin Bernatowicz
                   ` (8 more replies)
  0 siblings, 9 replies; 17+ messages in thread
From: Marcin Bernatowicz @ 2024-12-18 12:00 UTC (permalink / raw)
  To: igt-dev
  Cc: Marcin Bernatowicz, Adam Miszczak, Jakub Kolakowski,
	Lukasz Laguna, Michał Wajdeczko, Michał Winiarski,
	Narasimha C V, Piotr Piórkowski, Satyanarayana K V P,
	Tomasz Lis

This patch series introduces several enhancements to the SR-IOV
provisioning and validation functionalities. The changes include
debugfs accessors, quota/spare attribute accessors, shared resource
provisionability checks, and helper functions for VF range validation.

Additionally, the xe_sriov_auto_provisioning tests validate the
following scenarios:
- Auto-provisioned resources are allocated by the PF driver in a fair
  manner.
- Auto-provisioned resources are released once VFs are disabled.
- Verify that ranges of auto-provisioned resources are exclusive.

Cc: Adam Miszczak <adam.miszczak@linux.intel.com>
Cc: Jakub Kolakowski <jakub1.kolakowski@intel.com>
Cc: Lukasz Laguna <lukasz.laguna@intel.com>
Cc: Michał Wajdeczko <michal.wajdeczko@intel.com>
Cc: Michał Winiarski <michal.winiarski@intel.com>
Cc: Narasimha C V <narasimha.c.v@intel.com>
Cc: Piotr Piórkowski <piotr.piorkowski@intel.com>
Cc: Satyanarayana K V P <satyanarayana.k.v.p@intel.com>
Cc: Tomasz Lis <tomasz.lis@intel.com>

Marcin Bernatowicz (5):
  lib/xe/xe_sriov_debugfs: Add debugfs get/set functions for u32, u64,
    bool
  lib/xe/xe_sriov_provisioning: Add accessors for quota/spare attributes
  lib/xe/xe_sriov_provisioning: Add shared resource provisionability
    check
  lib/igt_sriov_device: Add helper functions for VF range validation
  tests/xe_sriov_auto_provisioning: Add tests for SR-IOV
    auto-provisioning

 lib/igt_sriov_device.h                   |  82 ++++-
 lib/xe/xe_sriov_debugfs.c                | 151 +++++++++
 lib/xe/xe_sriov_debugfs.h                |  18 +
 lib/xe/xe_sriov_provisioning.c           | 146 +++++++++
 lib/xe/xe_sriov_provisioning.h           |  43 +++
 tests/intel/xe_sriov_auto_provisioning.c | 399 +++++++++++++++++++++++
 tests/meson.build                        |   1 +
 7 files changed, 833 insertions(+), 7 deletions(-)
 create mode 100644 tests/intel/xe_sriov_auto_provisioning.c

-- 
2.31.1


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

* [PATCH i-g-t 1/5] lib/xe/xe_sriov_debugfs: Add debugfs get/set functions for u32, u64, bool
  2024-12-18 12:00 [PATCH i-g-t 0/5] Add xe_sriov_auto_provisioning tests Marcin Bernatowicz
@ 2024-12-18 12:00 ` Marcin Bernatowicz
  2024-12-18 14:18   ` Laguna, Lukasz
  2024-12-18 12:00 ` [PATCH i-g-t 2/5] lib/xe/xe_sriov_provisioning: Add accessors for quota/spare attributes Marcin Bernatowicz
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 17+ messages in thread
From: Marcin Bernatowicz @ 2024-12-18 12:00 UTC (permalink / raw)
  To: igt-dev
  Cc: Marcin Bernatowicz, Adam Miszczak, Jakub Kolakowski,
	Lukasz Laguna, Michał Wajdeczko, Michał Winiarski,
	Narasimha C V, Piotr Piórkowski, Satyanarayana K V P,
	Tomasz Lis

Add helper functions to get and set SR-IOV debugfs attributes for u32,
u64, and boolean types.

Functions added:
- __xe_sriov_pf_debugfs_get_u32
- __xe_sriov_pf_debugfs_set_u32
- __xe_sriov_pf_debugfs_get_u64
- __xe_sriov_pf_debugfs_set_u64
- __xe_sriov_pf_debugfs_get_boolean
- __xe_sriov_pf_debugfs_set_boolean

Signed-off-by: Marcin Bernatowicz <marcin.bernatowicz@linux.intel.com>
Cc: Adam Miszczak <adam.miszczak@linux.intel.com>
Cc: Jakub Kolakowski <jakub1.kolakowski@intel.com>
Cc: Lukasz Laguna <lukasz.laguna@intel.com>
Cc: Michał Wajdeczko <michal.wajdeczko@intel.com>
Cc: Michał Winiarski <michal.winiarski@intel.com>
Cc: Narasimha C V <narasimha.c.v@intel.com>
Cc: Piotr Piórkowski <piotr.piorkowski@intel.com>
Cc: Satyanarayana K V P <satyanarayana.k.v.p@intel.com>
Cc: Tomasz Lis <tomasz.lis@intel.com>
---
 lib/xe/xe_sriov_debugfs.c | 151 ++++++++++++++++++++++++++++++++++++++
 lib/xe/xe_sriov_debugfs.h |  18 +++++
 2 files changed, 169 insertions(+)

diff --git a/lib/xe/xe_sriov_debugfs.c b/lib/xe/xe_sriov_debugfs.c
index c87f91492..121dabe73 100644
--- a/lib/xe/xe_sriov_debugfs.c
+++ b/lib/xe/xe_sriov_debugfs.c
@@ -9,6 +9,7 @@
 #include "drmtest.h"
 #include "igt_debugfs.h"
 #include "igt_sriov_device.h"
+#include "igt_sysfs.h"
 #include "xe/xe_query.h"
 #include "xe/xe_sriov_debugfs.h"
 #include "xe/xe_sriov_provisioning.h"
@@ -204,3 +205,153 @@ cleanup:
 
 	return ret;
 }
+
+static int xe_sriov_pf_debugfs_path_open(int pf, unsigned int vf_num,
+					 unsigned int gt_num)
+{
+	char path[PATH_MAX];
+
+	if (igt_debug_on_f(!xe_sriov_pf_debugfs_path(pf, vf_num, gt_num, path,
+						     sizeof(path)),
+			   "path: %s\n", path))
+		return -1;
+
+	return open(path, O_RDONLY);
+}
+
+/**
+ * DEFINE_XE_SRIOV_PF_DEBUGFS_FUNC - Define a function for accessing debugfs attributes
+ * @type: Data type of the value to read or write (e.g., `uint32_t`, `bool`, etc.)
+ * @suffix: Function suffix, appended to `__xe_sriov_pf_debugfs_` to name the function
+ * @sysfs_func: The sysfs helper function to perform the actual read or write operation
+ *
+ * Generates a function for accessing a debugfs attribute of a PF device.
+ * It handles opening the debugfs path, performing the sysfs operation, and closing the
+ * debugfs directory.
+ *
+ * The generated function has the following signature:
+ *
+ *	int __xe_sriov_pf_debugfs_<suffix>(int pf, unsigned int vf_num,
+ *					   unsigned int gt_num,
+ *					   const char *attr, type value)
+ *
+ * where:
+ * - `pf` is the PF device file descriptor.
+ * - `vf_num` is the VF number.
+ * - `gt_num` is the GT number.
+ * - `attr` is the name of the debugfs attribute.
+ * - `value` is the data to read or write, depending on the sysfs function.
+ *
+ * Example:
+ *
+ *	DEFINE_XE_SRIOV_PF_DEBUGFS_FUNC(uint32_t, set_u32, __igt_sysfs_set_u32);
+ *
+ * This expands to a function:
+ *
+ *	int __xe_sriov_pf_debugfs_set_u32(int pf, unsigned int vf_num,
+ *					  unsigned int gt_num,
+ *					  const char *attr, uint32_t value);
+ *
+ * The function returns:
+ * - `0` on success
+ * - Negative error code on failure
+ */
+#define DEFINE_XE_SRIOV_PF_DEBUGFS_FUNC(type, suffix, sysfs_func)		\
+	int __xe_sriov_pf_debugfs_##suffix(int pf, unsigned int vf_num,		\
+					   unsigned int gt_num,			\
+					   const char *attr, type value)	\
+	{									\
+		bool ret;							\
+		int dir = xe_sriov_pf_debugfs_path_open(pf, vf_num, gt_num);	\
+										\
+		if (igt_debug_on(dir < 0))					\
+			return dir;						\
+										\
+		ret = sysfs_func(dir, attr, value);				\
+		close(dir);							\
+		return ret ? 0 : -1;						\
+	}
+
+/**
+ * __xe_sriov_pf_debugfs_get_u32 - Get a 32-bit unsigned integer from debugfs
+ * @pf: PF device file descriptor
+ * @vf_num: VF number
+ * @gt_num: GT number
+ * @attr: Debugfs attribute to read
+ * @value: Pointer to store the retrieved value
+ *
+ * Reads a 32-bit unsigned integer from the specified debugfs attribute.
+ *
+ * Return: 0 on success, negative error code on failure.
+ */
+DEFINE_XE_SRIOV_PF_DEBUGFS_FUNC(uint32_t *, get_u32, __igt_sysfs_get_u32)
+
+/**
+ * __xe_sriov_pf_debugfs_set_u32 - Set a 32-bit unsigned integer in debugfs
+ * @pf: PF device file descriptor
+ * @vf_num: VF number
+ * @gt_num: GT number
+ * @attr: Debugfs attribute to write to
+ * @value: The value to set
+ *
+ * Writes a 32-bit unsigned integer to the specified debugfs attribute.
+ *
+ * Return: 0 on success, negative error code on failure.
+ */
+DEFINE_XE_SRIOV_PF_DEBUGFS_FUNC(uint32_t, set_u32, __igt_sysfs_set_u32)
+
+/**
+ * __xe_sriov_pf_debugfs_get_u64 - Get a 64-bit unsigned integer from debugfs
+ * @pf: PF device file descriptor
+ * @vf_num: VF number
+ * @gt_num: GT number
+ * @attr: Debugfs attribute to read
+ * @value: Pointer to store the retrieved value
+ *
+ * Reads a 64-bit unsigned integer from the specified debugfs attribute.
+ *
+ * Return: 0 on success, negative error code on failure.
+ */
+DEFINE_XE_SRIOV_PF_DEBUGFS_FUNC(uint64_t *, get_u64, __igt_sysfs_get_u64)
+
+/**
+ * __xe_sriov_pf_debugfs_set_u64 - Set a 64-bit unsigned integer in debugfs
+ * @pf: PF device file descriptor
+ * @vf_num: VF number
+ * @gt_num: GT number
+ * @attr: Debugfs attribute to write to
+ * @value: The value to set
+ *
+ * Writes a 64-bit unsigned integer to the specified debugfs attribute.
+ *
+ * Return: 0 on success, negative error code on failure.
+ */
+DEFINE_XE_SRIOV_PF_DEBUGFS_FUNC(uint64_t, set_u64, __igt_sysfs_set_u64)
+
+/**
+ * __xe_sriov_pf_debugfs_get_boolean - Get a boolean value from debugfs
+ * @pf: PF device file descriptor
+ * @vf_num: VF number
+ * @gt_num: GT number
+ * @attr: Debugfs attribute to read
+ * @value: Pointer to store the retrieved value
+ *
+ * Reads a boolean value from the specified debugfs attribute.
+ *
+ * Return: 0 on success, negative error code on failure.
+ */
+DEFINE_XE_SRIOV_PF_DEBUGFS_FUNC(bool *, get_boolean, __igt_sysfs_get_boolean)
+
+/**
+ * __xe_sriov_pf_debugfs_set_boolean - Set a boolean value in debugfs
+ * @pf: PF device file descriptor
+ * @vf_num: VF number
+ * @gt_num: GT number
+ * @attr: Debugfs attribute to write to
+ * @value: The value to set
+ *
+ * Writes a boolean value to the specified debugfs attribute.
+ *
+ * Return: 0 on success, negative error code on failure.
+ */
+DEFINE_XE_SRIOV_PF_DEBUGFS_FUNC(bool, set_boolean, __igt_sysfs_set_boolean)
diff --git a/lib/xe/xe_sriov_debugfs.h b/lib/xe/xe_sriov_debugfs.h
index 856445e76..2db965f9b 100644
--- a/lib/xe/xe_sriov_debugfs.h
+++ b/lib/xe/xe_sriov_debugfs.h
@@ -16,5 +16,23 @@ int xe_sriov_pf_debugfs_read_provisioned_ranges(int pf_fd, enum xe_sriov_shared_
 						unsigned int gt_id,
 						struct xe_sriov_provisioned_range **ranges,
 						unsigned int *nr_ranges);
+int __xe_sriov_pf_debugfs_get_u32(int pf, unsigned int vf_num,
+				  unsigned int gt_num, const char *attr,
+				  uint32_t *value);
+int __xe_sriov_pf_debugfs_set_u32(int pf, unsigned int vf_num,
+				  unsigned int gt_num, const char *attr,
+				  uint32_t value);
+int __xe_sriov_pf_debugfs_get_u64(int pf, unsigned int vf_num,
+				  unsigned int gt_num, const char *attr,
+				  uint64_t *value);
+int __xe_sriov_pf_debugfs_set_u64(int pf, unsigned int vf_num,
+				  unsigned int gt_num, const char *attr,
+				  uint64_t value);
+int __xe_sriov_pf_debugfs_get_boolean(int pf, unsigned int vf_num,
+				      unsigned int gt_num, const char *attr,
+				      bool *value);
+int __xe_sriov_pf_debugfs_set_boolean(int pf, unsigned int vf_num,
+				      unsigned int gt_num, const char *attr,
+				      bool value);
 
 #endif /* __XE_SRIOV_DEBUGFS_H__ */
-- 
2.31.1


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

* [PATCH i-g-t 2/5] lib/xe/xe_sriov_provisioning: Add accessors for quota/spare attributes
  2024-12-18 12:00 [PATCH i-g-t 0/5] Add xe_sriov_auto_provisioning tests Marcin Bernatowicz
  2024-12-18 12:00 ` [PATCH i-g-t 1/5] lib/xe/xe_sriov_debugfs: Add debugfs get/set functions for u32, u64, bool Marcin Bernatowicz
@ 2024-12-18 12:00 ` Marcin Bernatowicz
  2024-12-18 14:28   ` Laguna, Lukasz
  2024-12-18 12:00 ` [PATCH i-g-t 3/5] lib/xe/xe_sriov_provisioning: Add shared resource provisionability check Marcin Bernatowicz
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 17+ messages in thread
From: Marcin Bernatowicz @ 2024-12-18 12:00 UTC (permalink / raw)
  To: igt-dev
  Cc: Marcin Bernatowicz, Adam Miszczak, Jakub Kolakowski,
	Lukasz Laguna, Michał Wajdeczko, Michał Winiarski,
	Narasimha C V, Piotr Piórkowski, Satyanarayana K V P,
	Tomasz Lis

Introduce functions to get and set SR-IOV provisioning quota and spare
attributes. These functions provide access to shared resource attributes
such as GGTT, LMEM, contexts, and doorbells for both PF and VF contexts.

Add returning and asserting variants to allow flexible error handling
based on usage scenarios.

Signed-off-by: Marcin Bernatowicz <marcin.bernatowicz@linux.intel.com>
Cc: Adam Miszczak <adam.miszczak@linux.intel.com>
Cc: Jakub Kolakowski <jakub1.kolakowski@intel.com>
Cc: Lukasz Laguna <lukasz.laguna@intel.com>
Cc: Michał Wajdeczko <michal.wajdeczko@intel.com>
Cc: Michał Winiarski <michal.winiarski@intel.com>
Cc: Narasimha C V <narasimha.c.v@intel.com>
Cc: Piotr Piórkowski <piotr.piorkowski@intel.com>
Cc: Satyanarayana K V P <satyanarayana.k.v.p@intel.com>
Cc: Tomasz Lis <tomasz.lis@intel.com>
---
 lib/xe/xe_sriov_provisioning.c | 124 +++++++++++++++++++++++++++++++++
 lib/xe/xe_sriov_provisioning.h |  14 ++++
 2 files changed, 138 insertions(+)

diff --git a/lib/xe/xe_sriov_provisioning.c b/lib/xe/xe_sriov_provisioning.c
index 67ae9cf54..536121931 100644
--- a/lib/xe/xe_sriov_provisioning.c
+++ b/lib/xe/xe_sriov_provisioning.c
@@ -9,6 +9,7 @@
 #include "intel_chipset.h"
 #include "linux_scaffold.h"
 #include "xe/xe_mmio.h"
+#include "xe/xe_sriov_debugfs.h"
 #include "xe/xe_sriov_provisioning.h"
 
 /**
@@ -150,3 +151,126 @@ int xe_sriov_find_ggtt_provisioned_pte_offsets(int pf_fd, int gt, struct xe_mmio
 
 	return 0;
 }
+
+/**
+ * xe_sriov_shared_res_attr_name - Retrieve the attribute name for a shared resource
+ * @res: Shared resource type (see enum xe_sriov_shared_res)
+ * @vf_num: VF number (1-based) or 0 for PF
+ *
+ * Returns the attribute name corresponding to the specified
+ * shared resource type and VF number. For VF (vf_num > 0), the "quota"
+ * attribute name is returned (e.g., "contexts_quota"). For PF (vf_num == 0),
+ * the "spare" attribute name is returned (e.g., "contexts_spare").
+ *
+ * Return:
+ * The attribute name as a string if the resource type is valid.
+ * NULL if the resource type is invalid.
+ */
+const char *xe_sriov_shared_res_attr_name(enum xe_sriov_shared_res res,
+					  unsigned int vf_num)
+{
+	switch (res) {
+	case XE_SRIOV_SHARED_RES_CONTEXTS:
+		return vf_num ? "contexts_quota" : "contexts_spare";
+	case XE_SRIOV_SHARED_RES_DOORBELLS:
+		return vf_num ? "doorbells_quota" : "doorbells_spare";
+	case XE_SRIOV_SHARED_RES_GGTT:
+		return vf_num ? "ggtt_quota" : "ggtt_spare";
+	case XE_SRIOV_SHARED_RES_LMEM:
+		return vf_num ? "lmem_quota" : "lmem_spare";
+	}
+
+	return NULL;
+}
+
+/**
+ * __xe_sriov_pf_get_shared_res_attr - Read shared resource attribute
+ * @pf: PF device file descriptor
+ * @res: Shared resource type (see enum xe_sriov_shared_res)
+ * @vf_num: VF number (1-based) or 0 for PF
+ * @gt_num: GT number
+ * @value: Pointer to store the read attribute value
+ *
+ * Reads the specified shared resource attribute for the given PF device @pf,
+ * VF number @vf_num, and GT @gt_num. The attribute depends on @vf_num:
+ * - For VF (vf_num > 0), reads the "quota" attribute.
+ * - For PF (vf_num == 0), reads the "spare" attribute.
+ *
+ *
+ * Return: 0 on success, negative error code on failure.
+ */
+int __xe_sriov_pf_get_shared_res_attr(int pf, enum xe_sriov_shared_res res,
+				      unsigned int vf_num, unsigned int gt_num,
+				      uint64_t *value)
+{
+	return __xe_sriov_pf_debugfs_get_u64(pf, vf_num, gt_num,
+					     xe_sriov_shared_res_attr_name(res, vf_num),
+					     value);
+}
+
+/**
+ * xe_sriov_pf_get_shared_res_attr - Read shared resource attribute
+ * @pf: PF device file descriptor
+ * @res: Shared resource type (see enum xe_sriov_shared_res)
+ * @vf_num: VF number (1-based) or 0 for PF
+ * @gt_num: GT number
+ *
+ * A throwing version of __xe_sriov_pf_get_shared_res_attr().
+ * Instead of returning an error code, it returns the quota value and asserts
+ * in case of an error.
+ *
+ * Return: The value for the given shared resource attribute.
+ *         Asserts in case of failure.
+ */
+uint64_t xe_sriov_pf_get_shared_res_attr(int pf, enum xe_sriov_shared_res res,
+					 unsigned int vf_num,
+					 unsigned int gt_num)
+{
+	uint64_t value;
+
+	igt_fail_on(__xe_sriov_pf_get_shared_res_attr(pf, res, vf_num, gt_num, &value));
+
+	return value;
+}
+
+/**
+ * __xe_sriov_pf_set_shared_res_attr - Set a shared resource attribute
+ * @pf: PF device file descriptor
+ * @res: Shared resource type (see enum xe_sriov_shared_res)
+ * @vf_num: VF number (1-based) or 0 for PF
+ * @gt_num: GT number
+ * @value: Value to set for the shared resource attribute
+ *
+ * Sets the specified shared resource attribute for the given PF device @pf,
+ * VF number @vf_num, and GT @gt_num. The attribute depends on @vf_num:
+ * - For VF (vf_num > 0), reads the "quota" attribute.
+ * - For PF (vf_num == 0), reads the "spare" attribute.
+ *
+ * Return: 0 on success, negative error code on failure.
+ */
+int __xe_sriov_pf_set_shared_res_attr(int pf, enum xe_sriov_shared_res res,
+				      unsigned int vf_num, unsigned int gt_num,
+				      uint64_t value)
+{
+	return __xe_sriov_pf_debugfs_set_u64(pf, vf_num, gt_num,
+					     xe_sriov_shared_res_attr_name(res, vf_num),
+					     value);
+}
+
+/**
+ * xe_sriov_pf_set_shared_res_attr - Set the shared resource attribute value
+ * @pf: PF device file descriptor
+ * @res: Shared resource type (see enum xe_sriov_shared_res)
+ * @vf_num: VF number (1-based) or 0 for PF
+ * @gt_num: GT number
+ * @value: Value to set
+ *
+ * A throwing version of __xe_sriov_pf_set_shared_res_attr().
+ * Instead of returning an error code, it asserts in case of an error.
+ */
+void xe_sriov_pf_set_shared_res_attr(int pf, enum xe_sriov_shared_res res,
+				     unsigned int vf_num, unsigned int gt_num,
+				     uint64_t value)
+{
+	igt_fail_on(__xe_sriov_pf_set_shared_res_attr(pf, res, vf_num, gt_num, value));
+}
diff --git a/lib/xe/xe_sriov_provisioning.h b/lib/xe/xe_sriov_provisioning.h
index aa2f08f52..168b50394 100644
--- a/lib/xe/xe_sriov_provisioning.h
+++ b/lib/xe/xe_sriov_provisioning.h
@@ -46,5 +46,19 @@ const char *xe_sriov_shared_res_to_string(enum xe_sriov_shared_res res);
 int xe_sriov_find_ggtt_provisioned_pte_offsets(int pf_fd, int gt, struct xe_mmio *mmio,
 					       struct xe_sriov_provisioned_range **ranges,
 					       unsigned int *nr_ranges);
+const char *xe_sriov_shared_res_attr_name(enum xe_sriov_shared_res res,
+					  unsigned int vf_num);
+int __xe_sriov_pf_get_shared_res_attr(int pf, enum xe_sriov_shared_res res,
+				      unsigned int vf_num, unsigned int gt_num,
+				      uint64_t *value);
+uint64_t xe_sriov_pf_get_shared_res_attr(int pf, enum xe_sriov_shared_res res,
+					 unsigned int vf_num,
+					 unsigned int gt_num);
+int __xe_sriov_pf_set_shared_res_attr(int pf, enum xe_sriov_shared_res res,
+				      unsigned int vf_num, unsigned int gt_num,
+				      uint64_t value);
+void xe_sriov_pf_set_shared_res_attr(int pf, enum xe_sriov_shared_res res,
+				     unsigned int vf_num, unsigned int gt_num,
+				     uint64_t value);
 
 #endif /* __XE_SRIOV_PROVISIONING_H__ */
-- 
2.31.1


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

* [PATCH i-g-t 3/5] lib/xe/xe_sriov_provisioning: Add shared resource provisionability check
  2024-12-18 12:00 [PATCH i-g-t 0/5] Add xe_sriov_auto_provisioning tests Marcin Bernatowicz
  2024-12-18 12:00 ` [PATCH i-g-t 1/5] lib/xe/xe_sriov_debugfs: Add debugfs get/set functions for u32, u64, bool Marcin Bernatowicz
  2024-12-18 12:00 ` [PATCH i-g-t 2/5] lib/xe/xe_sriov_provisioning: Add accessors for quota/spare attributes Marcin Bernatowicz
@ 2024-12-18 12:00 ` Marcin Bernatowicz
  2024-12-18 14:47   ` Laguna, Lukasz
  2024-12-18 12:00 ` [PATCH i-g-t 4/5] lib/igt_sriov_device: Add helper functions for VF range validation Marcin Bernatowicz
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 17+ messages in thread
From: Marcin Bernatowicz @ 2024-12-18 12:00 UTC (permalink / raw)
  To: igt-dev
  Cc: Marcin Bernatowicz, Adam Miszczak, Jakub Kolakowski,
	Lukasz Laguna, Michał Wajdeczko, Michał Winiarski,
	Narasimha C V, Piotr Piórkowski, Satyanarayana K V P,
	Tomasz Lis

Introduce a helper `xe_sriov_is_shared_res_provisionable` to determine
if a shared resource can be provisioned.

Add macros `xe_sriov_for_each_shared_res` and
`xe_sriov_for_each_provisionable_shared_res` to iterate over shared
resources and provisionable shared resources, respectively.

Signed-off-by: Marcin Bernatowicz <marcin.bernatowicz@linux.intel.com>
Cc: Adam Miszczak <adam.miszczak@linux.intel.com>
Cc: Jakub Kolakowski <jakub1.kolakowski@intel.com>
Cc: Lukasz Laguna <lukasz.laguna@intel.com>
Cc: Michał Wajdeczko <michal.wajdeczko@intel.com>
Cc: Michał Winiarski <michal.winiarski@intel.com>
Cc: Narasimha C V <narasimha.c.v@intel.com>
Cc: Piotr Piórkowski <piotr.piorkowski@intel.com>
Cc: Satyanarayana K V P <satyanarayana.k.v.p@intel.com>
Cc: Tomasz Lis <tomasz.lis@intel.com>
---
 lib/xe/xe_sriov_provisioning.c | 22 ++++++++++++++++++++++
 lib/xe/xe_sriov_provisioning.h | 29 +++++++++++++++++++++++++++++
 2 files changed, 51 insertions(+)

diff --git a/lib/xe/xe_sriov_provisioning.c b/lib/xe/xe_sriov_provisioning.c
index 536121931..22035ffd8 100644
--- a/lib/xe/xe_sriov_provisioning.c
+++ b/lib/xe/xe_sriov_provisioning.c
@@ -9,6 +9,7 @@
 #include "intel_chipset.h"
 #include "linux_scaffold.h"
 #include "xe/xe_mmio.h"
+#include "xe/xe_query.h"
 #include "xe/xe_sriov_debugfs.h"
 #include "xe/xe_sriov_provisioning.h"
 
@@ -274,3 +275,24 @@ void xe_sriov_pf_set_shared_res_attr(int pf, enum xe_sriov_shared_res res,
 {
 	igt_fail_on(__xe_sriov_pf_set_shared_res_attr(pf, res, vf_num, gt_num, value));
 }
+
+/**
+ * xe_sriov_is_shared_res_provisionable - Check if a shared resource is provisionable
+ * @pf: PF device file descriptor
+ * @res: Shared resource type (see enum xe_sriov_shared_res)
+ * @gt_num: GT number
+ *
+ * Determines whether a specified shared resource can be provisioned.
+ *
+ * Return: true if the shared resource is provisionable, false otherwise.
+ */
+bool xe_sriov_is_shared_res_provisionable(int pf, enum xe_sriov_shared_res res,
+					  unsigned int gt_num)
+{
+	if (res == XE_SRIOV_SHARED_RES_LMEM)
+		return xe_has_vram(pf) && !xe_is_media_gt(pf, gt_num);
+	else if (res == XE_SRIOV_SHARED_RES_GGTT)
+		return !xe_is_media_gt(pf, gt_num);
+
+	return true;
+}
diff --git a/lib/xe/xe_sriov_provisioning.h b/lib/xe/xe_sriov_provisioning.h
index 168b50394..b4300ec2e 100644
--- a/lib/xe/xe_sriov_provisioning.h
+++ b/lib/xe/xe_sriov_provisioning.h
@@ -27,6 +27,34 @@ enum xe_sriov_shared_res {
 	XE_SRIOV_SHARED_RES_LMEM,
 };
 
+/**
+ * XE_SRIOV_SHARED_RES_NUM - Number of shared resource types
+ */
+#define XE_SRIOV_SHARED_RES_NUM (XE_SRIOV_SHARED_RES_LMEM + 1)
+
+/**
+ * xe_sriov_for_each_shared_res - Iterate over all shared resource types
+ * @res: Loop counter variable of type `enum xe_sriov_shared_res`
+ *
+ * Iterates over each shared resource type defined in the `enum xe_sriov_shared_res`.
+ */
+#define xe_sriov_for_each_shared_res(res) \
+	for ((res) = 0; (res) < XE_SRIOV_SHARED_RES_NUM; (res)++)
+
+/**
+ * xe_sriov_for_each_provisionable_shared_res - Iterate over provisionable shared
+ * resource types
+ * @res: Loop counter variable of type `enum xe_sriov_shared_res`
+ * @pf: PF device file descriptor of type int
+ * @gt: GT number of type unsigned int
+ *
+ * Iterates over each provisionable shared resource type for the given PF device
+ * and GT number.
+ */
+#define xe_sriov_for_each_provisionable_shared_res(res, pf, gt) \
+	for ((res) = 0; (res) < XE_SRIOV_SHARED_RES_NUM; (res)++) \
+		for_if(xe_sriov_is_shared_res_provisionable((pf), (res), (gt)))
+
 /**
  * struct xe_sriov_provisioned_range - Provisioned range for a Virtual Function (VF)
  * @vf_id: The ID of the VF
@@ -43,6 +71,7 @@ struct xe_sriov_provisioned_range {
 };
 
 const char *xe_sriov_shared_res_to_string(enum xe_sriov_shared_res res);
+bool xe_sriov_is_shared_res_provisionable(int pf, enum xe_sriov_shared_res res, unsigned int gt);
 int xe_sriov_find_ggtt_provisioned_pte_offsets(int pf_fd, int gt, struct xe_mmio *mmio,
 					       struct xe_sriov_provisioned_range **ranges,
 					       unsigned int *nr_ranges);
-- 
2.31.1


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

* [PATCH i-g-t 4/5] lib/igt_sriov_device: Add helper functions for VF range validation
  2024-12-18 12:00 [PATCH i-g-t 0/5] Add xe_sriov_auto_provisioning tests Marcin Bernatowicz
                   ` (2 preceding siblings ...)
  2024-12-18 12:00 ` [PATCH i-g-t 3/5] lib/xe/xe_sriov_provisioning: Add shared resource provisionability check Marcin Bernatowicz
@ 2024-12-18 12:00 ` Marcin Bernatowicz
  2024-12-19 14:39   ` Laguna, Lukasz
  2024-12-18 12:00 ` [PATCH i-g-t 5/5] tests/xe_sriov_auto_provisioning: Add tests for SR-IOV auto-provisioning Marcin Bernatowicz
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 17+ messages in thread
From: Marcin Bernatowicz @ 2024-12-18 12:00 UTC (permalink / raw)
  To: igt-dev
  Cc: Marcin Bernatowicz, Marcin Bernatowicz, Adam Miszczak,
	Jakub Kolakowski, Lukasz Laguna, Michał Wajdeczko,
	Michał Winiarski, Narasimha C V, Piotr Piórkowski,
	Satyanarayana K V P, Tomasz Lis

Add __is_valid_range() to check if a VF range is valid. Introduce
igt_sriov_random_vf_in_range() to get a random VF number within a
specified range. Update for_random_sriov_vf to use the new helper
functions for better range handling.

Signed-off-by: Marcin Bernatowicz <marcin.bernatowicz@intel.com>
Cc: Adam Miszczak <adam.miszczak@linux.intel.com>
Cc: Jakub Kolakowski <jakub1.kolakowski@intel.com>
Cc: Lukasz Laguna <lukasz.laguna@intel.com>
Cc: Michał Wajdeczko <michal.wajdeczko@intel.com>
Cc: Michał Winiarski <michal.winiarski@intel.com>
Cc: Narasimha C V <narasimha.c.v@intel.com>
Cc: Piotr Piórkowski <piotr.piorkowski@intel.com>
Cc: Satyanarayana K V P <satyanarayana.k.v.p@intel.com>
Cc: Tomasz Lis <tomasz.lis@intel.com>
Signed-off-by: Marcin Bernatowicz <marcin.bernatowicz@linux.intel.com>
---
 lib/igt_sriov_device.h | 82 ++++++++++++++++++++++++++++++++++++++----
 1 file changed, 75 insertions(+), 7 deletions(-)

diff --git a/lib/igt_sriov_device.h b/lib/igt_sriov_device.h
index 4b63ceb22..de25a7d98 100644
--- a/lib/igt_sriov_device.h
+++ b/lib/igt_sriov_device.h
@@ -34,6 +34,45 @@ int igt_sriov_device_sysfs_open(int pf, unsigned int vf_num);
 bool igt_sriov_device_reset_exists(int pf, unsigned int vf_num);
 bool igt_sriov_device_reset(int pf, unsigned int vf_num);
 
+/**
+ * __is_valid_range - Helper to check VF range is valid
+ * @start_vf: Starting VF number
+ * @end_vf: Ending VF number
+ * @total_vfs: Total number of VFs
+ *
+ * Return: true if the range is valid, false otherwise.
+ */
+static inline bool __is_valid_range(unsigned int start_vf, unsigned int end_vf,
+				    unsigned int total_vfs)
+{
+	return !igt_warn_on_f(start_vf > end_vf || end_vf > total_vfs || start_vf == 0,
+			      "start_vf=%u, end_vf=%u, total_vfs=%u\n",
+			      start_vf, end_vf, total_vfs);
+}
+
+/**
+ * igt_sriov_random_vf_in_range - Get a random VF number within a specified range
+ * @pf_fd: PF device file descriptor
+ * @start: Starting VF number in the range
+ * @end: Ending VF number in the range
+ *
+ * Returns a random VF number within the specified range [start, end].
+ * If the range is invalid (start > end, end > total VFs,
+ * or start == 0), the function returns 0.
+ *
+ * Return: A random VF number within the range, or 0 if the range is invalid.
+ */
+static inline unsigned int
+igt_sriov_random_vf_in_range(int pf_fd, unsigned int start, unsigned int end)
+{
+	unsigned int total_vfs = igt_sriov_get_total_vfs(pf_fd);
+
+	if (!__is_valid_range(start, end, total_vfs))
+		return 0;
+
+	return start + random() % (end - start + 1);
+}
+
 /**
  * for_each_sriov_vf - Helper for running code on each VF
  * @__pf_fd: PF device file descriptor
@@ -48,17 +87,46 @@ bool igt_sriov_device_reset(int pf, unsigned int vf_num);
 #define for_each_sriov_num_vfs for_each_sriov_vf
 
 /**
- * for_random_sriov_vf - Helper for running code on random VF
+ * for_random_sriov_vf_in_range - Iterate over a random VF in a specified range
+ * @__pf_fd: PF device file descriptor
+ * @__start: Starting VF number in the range
+ * @__end: Ending VF number in the range
+ * @__vf_num: Variable to store the random VF number
+ *
+ * Iterates over a random VF number within the specified range [__start, __end].
+ * The loop runs only if the range is valid and a random
+ * VF number is successfully selected.
+ */
+#define for_random_sriov_vf_in_range(__pf_fd, __start, __end, __vf_num) \
+	for (unsigned int __vf_num = igt_sriov_random_vf_in_range(__pf_fd, __start, __end); \
+	     __vf_num != 0; __vf_num = 0)
+
+/**
+ * for_random_sriov_vf_starting_from - Iterate over a random VF starting from a specified VF
+ * @__pf_fd: PF device file descriptor
+ * @__start: Starting VF number
+ * @__vf_num: Variable to store the random VF number
+ *
+ * This macro iterates over a random VF number starting from the specified
+ * VF number @__start to the total number of VFs associated with the given
+ * PF @__pf_fd.
+ */
+#define for_random_sriov_vf_starting_from(__pf_fd, __start, __vf_num) \
+	for_random_sriov_vf_in_range(__pf_fd, __start, igt_sriov_get_total_vfs(__pf_fd), __vf_num)
+
+/**
+ * for_random_sriov_vf - Iterate over a random VF for a given PF
  * @__pf_fd: PF device file descriptor
- * @__vf_num: stores random VF
+ * @__vf_num: Variable to store the random VF number
  *
- * Helper allows to run code using random VF number (stored in @__vf_num)
- * picked from the range of all VFs associated with given PF @__pf_fd.
+ * Iterates over a random VF number selected from the range
+ * of all VFs associated with the given PF @__pf_fd. The loop runs only
+ * if a random VF number is successfully selected.
  */
 #define for_random_sriov_vf(__pf_fd, __vf_num) \
-	for (unsigned int __vf_num = 1 + random() % igt_sriov_get_total_vfs(__pf_fd), __tmp = 0; \
-	     __tmp < 1; \
-	     ++__tmp)
+	for_random_sriov_vf_in_range(__pf_fd, 1, igt_sriov_get_total_vfs(__pf_fd), __vf_num)
+
+/* for_random_sriov_num_vfs - Alias for for_random_sriov_vf */
 #define for_random_sriov_num_vfs for_random_sriov_vf
 
 /**
-- 
2.31.1


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

* [PATCH i-g-t 5/5] tests/xe_sriov_auto_provisioning: Add tests for SR-IOV auto-provisioning
  2024-12-18 12:00 [PATCH i-g-t 0/5] Add xe_sriov_auto_provisioning tests Marcin Bernatowicz
                   ` (3 preceding siblings ...)
  2024-12-18 12:00 ` [PATCH i-g-t 4/5] lib/igt_sriov_device: Add helper functions for VF range validation Marcin Bernatowicz
@ 2024-12-18 12:00 ` Marcin Bernatowicz
  2024-12-19 14:48   ` Laguna, Lukasz
  2024-12-18 22:25 ` ✓ i915.CI.BAT: success for Add xe_sriov_auto_provisioning tests Patchwork
                   ` (3 subsequent siblings)
  8 siblings, 1 reply; 17+ messages in thread
From: Marcin Bernatowicz @ 2024-12-18 12:00 UTC (permalink / raw)
  To: igt-dev
  Cc: Marcin Bernatowicz, Adam Miszczak, Jakub Kolakowski,
	Lukasz Laguna, Michał Wajdeczko, Michał Winiarski,
	Narasimha C V, Piotr Piórkowski, Satyanarayana K V P,
	Tomasz Lis

Added subtests validating below scenarios:
- auto-provisioned resources are allocated by PF driver in fairly manner,
- auto-provisioned resources are released once VFs are disabled,
- verify that ranges of auto-provisioned resources are exclusive.

The tests rely on ggtt_provisioned, lmem_provisioned,
contexts_provisioned and doorbells_provisioned debugfs attributes.

Signed-off-by: Marcin Bernatowicz <marcin.bernatowicz@linux.intel.com>
Cc: Adam Miszczak <adam.miszczak@linux.intel.com>
Cc: Jakub Kolakowski <jakub1.kolakowski@intel.com>
Cc: Lukasz Laguna <lukasz.laguna@intel.com>
Cc: Michał Wajdeczko <michal.wajdeczko@intel.com>
Cc: Michał Winiarski <michal.winiarski@intel.com>
Cc: Narasimha C V <narasimha.c.v@intel.com>
Cc: Piotr Piórkowski <piotr.piorkowski@intel.com>
Cc: Satyanarayana K V P <satyanarayana.k.v.p@intel.com>
Cc: Tomasz Lis <tomasz.lis@intel.com>
---
 tests/intel/xe_sriov_auto_provisioning.c | 399 +++++++++++++++++++++++
 tests/meson.build                        |   1 +
 2 files changed, 400 insertions(+)
 create mode 100644 tests/intel/xe_sriov_auto_provisioning.c

diff --git a/tests/intel/xe_sriov_auto_provisioning.c b/tests/intel/xe_sriov_auto_provisioning.c
new file mode 100644
index 000000000..a5ae60525
--- /dev/null
+++ b/tests/intel/xe_sriov_auto_provisioning.c
@@ -0,0 +1,399 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright(c) 2023 Intel Corporation. All rights reserved.
+ */
+
+#include <stdbool.h>
+
+#include "drmtest.h"
+#include "igt_core.h"
+#include "igt_sriov_device.h"
+#include "igt_sysfs.h"
+#include "xe/xe_sriov_debugfs.h"
+#include "xe/xe_sriov_provisioning.h"
+#include "xe/xe_query.h"
+
+/**
+ * TEST: xe_sriov_auto_provisioning
+ * Category: Core
+ * Mega feature: SR-IOV
+ * Sub-category: provisioning
+ * Functionality: auto-provisioning
+ * Run type: FULL
+ * Description: Examine behavior of SR-IOV auto-provisioning
+ *
+ * SUBTEST: auto-provisioning-fair
+ * Description:
+ *   Verify that auto-provisioned resources are allocated by PF driver in fairly manner
+ *
+ * SUBTEST: auto-provisioned-resources-released-on-vfs-disabling
+ * Description:
+ *   Verify that auto-provisioned resources are released once VFs are disabled
+ *
+ * SUBTEST: exclusive-ranges
+ * Description:
+ *   Verify that ranges of auto-provisioned resources are exclusive
+ */
+
+IGT_TEST_DESCRIPTION("Xe tests for SR-IOV auto-provisioning");
+
+static int compare_ranges_by_vf_id(const void *a, const void *b)
+{
+	const struct xe_sriov_provisioned_range *range_a = a;
+	const struct xe_sriov_provisioned_range *range_b = b;
+
+	return (range_a->vf_id - range_b->vf_id);
+}
+
+static int validate_vf_ids(enum xe_sriov_shared_res res,
+			   struct xe_sriov_provisioned_range *ranges,
+			   unsigned int nr_ranges, unsigned int num_vfs)
+{
+	unsigned int current_vf_id = 0;
+
+	igt_assert(num_vfs);
+
+	if (igt_debug_on_f(nr_ranges == 0,
+			   "%s: No VF ranges\n",
+			   xe_sriov_debugfs_provisioned_attr_name(res)))
+		return -ENOENT;
+
+	igt_assert(ranges);
+	qsort(ranges, nr_ranges, sizeof(ranges[0]), compare_ranges_by_vf_id);
+
+	for (unsigned int i = 0; i < nr_ranges; i++) {
+		unsigned int vf_id = ranges[i].vf_id;
+
+		/* Skip duplicates */
+		if (vf_id == current_vf_id)
+			continue;
+
+		if (igt_debug_on_f(vf_id < 1 || vf_id > num_vfs,
+				   "%s: Out of range VF%u\n",
+				   xe_sriov_debugfs_provisioned_attr_name(res), vf_id))
+			return -ERANGE;
+
+		if (igt_debug_on_f(vf_id > current_vf_id + 1,
+				   "%s: Missing VF%u\n",
+				   xe_sriov_debugfs_provisioned_attr_name(res),
+				   current_vf_id + 1))
+			return -ESRCH;
+
+		current_vf_id = vf_id;
+	}
+
+	if (igt_debug_on_f(current_vf_id != num_vfs,
+			   "%s: Missing VF%u\n",
+			   xe_sriov_debugfs_provisioned_attr_name(res), num_vfs))
+		return -ESRCH;
+
+	return 0;
+}
+
+/* Expects ranges sorted by VF IDs */
+static int validate_fair_allocation(enum xe_sriov_shared_res res,
+				    struct xe_sriov_provisioned_range *ranges,
+				    unsigned int nr_ranges)
+{
+	uint64_t expected_allocation = 0;
+	uint64_t current_allocation = 0;
+	unsigned int current_vf_id;
+
+	igt_assert(nr_ranges);
+	current_vf_id = ranges[0].vf_id;
+
+	for (unsigned int i = 0; i <= nr_ranges; i++) {
+		if (i == nr_ranges || ranges[i].vf_id != current_vf_id) {
+			/* Check allocation consistency for the previous VF ID */
+			if (expected_allocation == 0)
+				expected_allocation = current_allocation;
+			else if (igt_debug_on_f(current_allocation != expected_allocation,
+						"%s: Allocation mismatch, expected=%lu VF%u=%lu\n",
+						xe_sriov_debugfs_provisioned_attr_name(res),
+						expected_allocation, current_vf_id,
+						current_allocation))
+				return -1;
+
+			/* Reset for the new VF ID (if not at the end) */
+			if (i < nr_ranges) {
+				current_vf_id = ranges[i].vf_id;
+				current_allocation = 0;
+			}
+		}
+
+		/* Accumulate allocation for the current VF ID */
+		if (i < nr_ranges)
+			current_allocation += ranges[i].end - ranges[i].start + 1;
+	}
+
+	return 0;
+}
+
+static int check_fair_allocation(int pf_fd, unsigned int num_vfs, unsigned int gt_id,
+				 enum xe_sriov_shared_res res)
+{
+	struct xe_sriov_provisioned_range *ranges;
+	unsigned int nr_ranges;
+	int ret;
+
+	ret = xe_sriov_pf_debugfs_read_provisioned_ranges(pf_fd, res, gt_id, &ranges, &nr_ranges);
+	if (igt_debug_on_f(ret, "Failed read %s on GT%u (%d)\n",
+			   xe_sriov_debugfs_provisioned_attr_name(res), gt_id, ret))
+		return ret;
+
+	ret = validate_vf_ids(res, ranges, nr_ranges, num_vfs);
+	if (ret) {
+		free(ranges);
+		return ret;
+	}
+
+	ret = validate_fair_allocation(res, ranges, nr_ranges);
+	if (ret) {
+		free(ranges);
+		return ret;
+	}
+
+	free(ranges);
+
+	return 0;
+}
+
+static void auto_provisioning_fair(int pf_fd, unsigned int num_vfs)
+{
+	enum xe_sriov_shared_res res;
+	unsigned int gt;
+	int fails = 0;
+
+	igt_sriov_disable_driver_autoprobe(pf_fd);
+	igt_sriov_enable_vfs(pf_fd, num_vfs);
+
+	xe_for_each_gt(pf_fd, gt) {
+		xe_sriov_for_each_provisionable_shared_res(res, pf_fd, gt) {
+			if (igt_debug_on_f(check_fair_allocation(pf_fd, num_vfs, gt, res),
+					   "%s fair allocation failed on gt%u\n",
+					   xe_sriov_shared_res_to_string(res), gt))
+				fails++;
+		}
+	}
+
+	igt_sriov_disable_vfs(pf_fd);
+
+	igt_fail_on_f(fails, "fair allocation failed\n");
+}
+
+static void auto_provisioning_release(int pf_fd, unsigned int num_vfs)
+{
+	struct xe_sriov_provisioned_range *ranges;
+	unsigned int nr_ranges;
+	enum xe_sriov_shared_res res;
+	unsigned int gt;
+	int fails = 0;
+
+	igt_sriov_disable_driver_autoprobe(pf_fd);
+	igt_sriov_enable_vfs(pf_fd, num_vfs);
+
+	xe_for_each_gt(pf_fd, gt) {
+		xe_sriov_for_each_provisionable_shared_res(res, pf_fd, gt) {
+			if (igt_warn_on_f(xe_sriov_pf_debugfs_read_provisioned_ranges(pf_fd, res,
+										      gt,
+										      &ranges,
+										      &nr_ranges),
+					  "Failed read %s on gt%u\n",
+					  xe_sriov_debugfs_provisioned_attr_name(res), gt)) {
+				continue;
+			}
+
+			igt_warn_on_f(validate_vf_ids(res, ranges, nr_ranges, num_vfs),
+				      "%s: VF IDs validation failed on gt%u\n",
+				      xe_sriov_debugfs_provisioned_attr_name(res), gt);
+			free(ranges);
+		}
+	}
+
+	igt_sriov_disable_vfs(pf_fd);
+
+	xe_for_each_gt(pf_fd, gt) {
+		xe_sriov_for_each_provisionable_shared_res(res, pf_fd, gt) {
+			if (igt_debug_on_f(xe_sriov_pf_debugfs_read_provisioned_ranges(pf_fd, res,
+										       gt,
+										       &ranges,
+										       &nr_ranges),
+					   "Failed read %s on gt%u\n",
+					   xe_sriov_debugfs_provisioned_attr_name(res), gt)) {
+				fails++;
+				continue;
+			}
+
+			if (igt_debug_on_f(nr_ranges,
+					   "%s contains unexpected ranges on gt%u\n",
+					   xe_sriov_debugfs_provisioned_attr_name(res), gt)) {
+				fails++;
+				for (unsigned int i = 0; i < nr_ranges; i++) {
+					igt_debug((res == XE_SRIOV_SHARED_RES_GGTT) ?
+							"%s:VF%u: %lx-%lx\n" :
+							"%s:VF%u %lu-%lu\n",
+						  xe_sriov_shared_res_to_string(res),
+						  ranges[i].vf_id, ranges[i].start, ranges[i].end);
+				}
+			}
+			free(ranges);
+		}
+	}
+
+	igt_fail_on_f(fails, "shared resource release check failed\n");
+}
+
+static int compare_ranges_by_start(const void *a, const void *b)
+{
+	const struct xe_sriov_provisioned_range *range_a = a;
+	const struct xe_sriov_provisioned_range *range_b = b;
+
+	if (range_a->start < range_b->start)
+		return -1;
+	if (range_a->start > range_b->start)
+		return 1;
+	return 0;
+}
+
+static int check_no_overlap(int pf_fd, unsigned int num_vfs, unsigned int gt_id,
+			    enum xe_sriov_shared_res res)
+{
+	struct xe_sriov_provisioned_range *ranges;
+	unsigned int nr_ranges;
+	int ret;
+
+	ret = xe_sriov_pf_debugfs_read_provisioned_ranges(pf_fd, res, gt_id, &ranges, &nr_ranges);
+	if (ret)
+		return ret;
+
+	ret = validate_vf_ids(res, ranges, nr_ranges, num_vfs);
+	if (ret) {
+		free(ranges);
+		return ret;
+	}
+
+	igt_assert(ranges);
+	qsort(ranges, nr_ranges, sizeof(ranges[0]), compare_ranges_by_start);
+
+	for (unsigned int i = 0; i < nr_ranges - 1; i++)
+		if (ranges[i].end >= ranges[i + 1].start) {
+			igt_debug((res == XE_SRIOV_SHARED_RES_GGTT) ?
+				  "Overlapping ranges: VF%u [%lx-%lx] and VF%u [%lx-%lx]\n" :
+				  "Overlapping ranges: VF%u [%lu-%lu] and VF%u [%lu-%lu]\n",
+				  ranges[i].vf_id, ranges[i].start, ranges[i].end,
+				  ranges[i + 1].vf_id, ranges[i + 1].start, ranges[i + 1].end);
+			free(ranges);
+			return -1;
+		}
+
+	free(ranges);
+
+	return 0;
+}
+
+static void auto_provisioning_exclusive_ranges(int pf_fd, unsigned int num_vfs)
+{
+	enum xe_sriov_shared_res res;
+	unsigned int gt;
+	int fails = 0;
+
+	igt_sriov_disable_driver_autoprobe(pf_fd);
+	igt_sriov_enable_vfs(pf_fd, num_vfs);
+
+	xe_for_each_gt(pf_fd, gt) {
+		xe_sriov_for_each_provisionable_shared_res(res, pf_fd, gt) {
+			if (res == XE_SRIOV_SHARED_RES_LMEM)
+				/*
+				 * lmem_provisioned is not applicable for this test,
+				 * as it does not expose ranges
+				 */
+				continue;
+
+			if (igt_debug_on_f(check_no_overlap(pf_fd, num_vfs, gt, res),
+					   "%s overlap check failed on gt%u\n",
+					   xe_sriov_shared_res_to_string(res), gt))
+				fails++;
+		}
+	}
+
+	igt_sriov_disable_vfs(pf_fd);
+
+	igt_fail_on_f(fails, "exclusive ranges check failed\n");
+}
+
+igt_main
+{
+	enum xe_sriov_shared_res res;
+	unsigned int gt;
+	bool autoprobe;
+	int pf_fd;
+
+	igt_fixture {
+		struct xe_sriov_provisioned_range *ranges;
+		unsigned int nr_ranges;
+		int ret;
+
+		pf_fd = drm_open_driver(DRIVER_XE);
+		igt_require(igt_sriov_is_pf(pf_fd));
+		igt_require(igt_sriov_get_enabled_vfs(pf_fd) == 0);
+
+		xe_for_each_gt(pf_fd, gt) {
+			xe_sriov_for_each_provisionable_shared_res(res, pf_fd, gt) {
+				ret = xe_sriov_pf_debugfs_read_provisioned_ranges(pf_fd, res, gt,
+										  &ranges,
+										  &nr_ranges);
+				igt_skip_on_f(ret, "Failed read %s on gt%u (%d)\n",
+					      xe_sriov_debugfs_provisioned_attr_name(res),
+					      gt, ret);
+				igt_skip_on_f(nr_ranges != 0, "Unexpected %s content on gt%u\n",
+					      xe_sriov_debugfs_provisioned_attr_name(res), gt);
+			}
+		}
+		autoprobe = igt_sriov_is_driver_autoprobe_enabled(pf_fd);
+	}
+
+	igt_describe("Verify that auto-provisioned resources are allocated by PF driver in fairly manner");
+	igt_subtest_with_dynamic("auto-provisioning-fair") {
+		for_random_sriov_num_vfs(pf_fd, num_vfs) {
+			igt_dynamic_f("numvfs-random") {
+				igt_debug("numvfs=%u\n", num_vfs);
+				auto_provisioning_fair(pf_fd, num_vfs);
+			}
+		}
+	}
+
+	igt_describe("Verify that auto-provisioned resources are released once VFs are disabled");
+	igt_subtest_with_dynamic("auto-provisioned-resources-released-on-vfs-disabling") {
+		for_random_sriov_num_vfs(pf_fd, num_vfs) {
+			igt_dynamic_f("numvfs-random") {
+				igt_debug("numvfs=%u\n", num_vfs);
+				auto_provisioning_release(pf_fd, num_vfs);
+			}
+		}
+	}
+
+	igt_describe("Verify that ranges of auto-provisioned resources are exclusive");
+	igt_subtest_with_dynamic_f("exclusive-ranges") {
+		unsigned int total_vfs = igt_sriov_get_total_vfs(pf_fd);
+
+		igt_skip_on(total_vfs < 2);
+
+		for_random_sriov_vf_in_range(pf_fd, 2, total_vfs, num_vfs) {
+			igt_dynamic_f("numvfs-random") {
+				igt_debug("numvfs=%u\n", num_vfs);
+				auto_provisioning_exclusive_ranges(pf_fd, num_vfs);
+			}
+		}
+	}
+
+	igt_fixture {
+		igt_sriov_disable_vfs(pf_fd);
+		/* abort to avoid execution of next tests with enabled VFs */
+		igt_abort_on_f(igt_sriov_get_enabled_vfs(pf_fd) > 0, "Failed to disable VF(s)");
+		autoprobe ? igt_sriov_enable_driver_autoprobe(pf_fd) :
+			    igt_sriov_disable_driver_autoprobe(pf_fd);
+		igt_abort_on_f(autoprobe != igt_sriov_is_driver_autoprobe_enabled(pf_fd),
+			       "Failed to restore sriov_drivers_autoprobe value\n");
+		drm_close_driver(pf_fd);
+	}
+}
diff --git a/tests/meson.build b/tests/meson.build
index 2724c7a9a..01076f401 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -315,6 +315,7 @@ intel_xe_progs = [
 	'xe_vm',
 	'xe_waitfence',
 	'xe_spin_batch',
+	'xe_sriov_auto_provisioning',
 	'xe_sriov_flr',
 	'xe_sysfs_defaults',
 	'xe_sysfs_preempt_timeout',
-- 
2.31.1


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

* Re: [PATCH i-g-t 1/5] lib/xe/xe_sriov_debugfs: Add debugfs get/set functions for u32, u64, bool
  2024-12-18 12:00 ` [PATCH i-g-t 1/5] lib/xe/xe_sriov_debugfs: Add debugfs get/set functions for u32, u64, bool Marcin Bernatowicz
@ 2024-12-18 14:18   ` Laguna, Lukasz
  0 siblings, 0 replies; 17+ messages in thread
From: Laguna, Lukasz @ 2024-12-18 14:18 UTC (permalink / raw)
  To: Marcin Bernatowicz, igt-dev
  Cc: Adam Miszczak, Jakub Kolakowski, Michał Wajdeczko,
	Michał Winiarski, Narasimha C V, Piotr Piórkowski,
	Satyanarayana K V P, Tomasz Lis

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

On 12/18/2024 13:00, Marcin Bernatowicz wrote:
> Add helper functions to get and set SR-IOV debugfs attributes for u32,
> u64, and boolean types.
>
> Functions added:
> - __xe_sriov_pf_debugfs_get_u32
> - __xe_sriov_pf_debugfs_set_u32
> - __xe_sriov_pf_debugfs_get_u64
> - __xe_sriov_pf_debugfs_set_u64
> - __xe_sriov_pf_debugfs_get_boolean
> - __xe_sriov_pf_debugfs_set_boolean
>
> Signed-off-by: Marcin Bernatowicz<marcin.bernatowicz@linux.intel.com>
> Cc: Adam Miszczak<adam.miszczak@linux.intel.com>
> Cc: Jakub Kolakowski<jakub1.kolakowski@intel.com>
> Cc: Lukasz Laguna<lukasz.laguna@intel.com>
> Cc: Michał Wajdeczko<michal.wajdeczko@intel.com>
> Cc: Michał Winiarski<michal.winiarski@intel.com>
> Cc: Narasimha C V<narasimha.c.v@intel.com>
> Cc: Piotr Piórkowski<piotr.piorkowski@intel.com>
> Cc: Satyanarayana K V P<satyanarayana.k.v.p@intel.com>
> Cc: Tomasz Lis<tomasz.lis@intel.com>
> ---
>   lib/xe/xe_sriov_debugfs.c | 151 ++++++++++++++++++++++++++++++++++++++
>   lib/xe/xe_sriov_debugfs.h |  18 +++++
>   2 files changed, 169 insertions(+)
>
> diff --git a/lib/xe/xe_sriov_debugfs.c b/lib/xe/xe_sriov_debugfs.c
> index c87f91492..121dabe73 100644
> --- a/lib/xe/xe_sriov_debugfs.c
> +++ b/lib/xe/xe_sriov_debugfs.c
> @@ -9,6 +9,7 @@
>   #include "drmtest.h"
>   #include "igt_debugfs.h"
>   #include "igt_sriov_device.h"
> +#include "igt_sysfs.h"
>   #include "xe/xe_query.h"
>   #include "xe/xe_sriov_debugfs.h"
>   #include "xe/xe_sriov_provisioning.h"
> @@ -204,3 +205,153 @@ cleanup:
>   
>   	return ret;
>   }
> +
> +static int xe_sriov_pf_debugfs_path_open(int pf, unsigned int vf_num,
> +					 unsigned int gt_num)
> +{
> +	char path[PATH_MAX];
> +
> +	if (igt_debug_on_f(!xe_sriov_pf_debugfs_path(pf, vf_num, gt_num, path,
> +						     sizeof(path)),
> +			   "path: %s\n", path))
> +		return -1;
> +
> +	return open(path, O_RDONLY);
> +}
> +
> +/**
> + * DEFINE_XE_SRIOV_PF_DEBUGFS_FUNC - Define a function for accessing debugfs attributes
> + * @type: Data type of the value to read or write (e.g., `uint32_t`, `bool`, etc.)
> + * @suffix: Function suffix, appended to `__xe_sriov_pf_debugfs_` to name the function

nit: maybe "Function name suffix appended to `__xe_sriov_pf_debugfs_`" ?

> + * @sysfs_func: The sysfs helper function to perform the actual read or write operation
> + *
> + * Generates a function for accessing a debugfs attribute of a PF device.
> + * It handles opening the debugfs path, performing the sysfs operation, and closing the
> + * debugfs directory.
> + *
> + * The generated function has the following signature:
> + *
> + *	int __xe_sriov_pf_debugfs_<suffix>(int pf, unsigned int vf_num,
> + *					   unsigned int gt_num,
> + *					   const char *attr, type value)
> + *
> + * where:
> + * - `pf` is the PF device file descriptor.
> + * - `vf_num` is the VF number.
> + * - `gt_num` is the GT number.
> + * - `attr` is the name of the debugfs attribute.
> + * - `value` is the data to read or write, depending on the sysfs function.
> + *
> + * Example:
> + *
> + *	DEFINE_XE_SRIOV_PF_DEBUGFS_FUNC(uint32_t, set_u32, __igt_sysfs_set_u32);
> + *
> + * This expands to a function:
> + *
> + *	int __xe_sriov_pf_debugfs_set_u32(int pf, unsigned int vf_num,
> + *					  unsigned int gt_num,
> + *					  const char *attr, uint32_t value);
> + *
> + * The function returns:
> + * - `0` on success
> + * - Negative error code on failure
> + */
> +#define DEFINE_XE_SRIOV_PF_DEBUGFS_FUNC(type, suffix, sysfs_func)		\
> +	int __xe_sriov_pf_debugfs_##suffix(int pf, unsigned int vf_num,		\
> +					   unsigned int gt_num,			\
> +					   const char *attr, type value)	\
> +	{									\
> +		bool ret;							\
> +		int dir = xe_sriov_pf_debugfs_path_open(pf, vf_num, gt_num);	\
> +										\
> +		if (igt_debug_on(dir < 0))					\
> +			return dir;						\
> +										\
> +		ret = sysfs_func(dir, attr, value);				\
> +		close(dir);							\
> +		return ret ? 0 : -1;						\
> +	}
> +
> +/**
> + * __xe_sriov_pf_debugfs_get_u32 - Get a 32-bit unsigned integer from debugfs
> + * @pf: PF device file descriptor
> + * @vf_num: VF number
> + * @gt_num: GT number
> + * @attr: Debugfs attribute to read
> + * @value: Pointer to store the retrieved value
> + *
> + * Reads a 32-bit unsigned integer from the specified debugfs attribute.
> + *
> + * Return: 0 on success, negative error code on failure.
> + */
> +DEFINE_XE_SRIOV_PF_DEBUGFS_FUNC(uint32_t *, get_u32, __igt_sysfs_get_u32)
> +
> +/**
> + * __xe_sriov_pf_debugfs_set_u32 - Set a 32-bit unsigned integer in debugfs
> + * @pf: PF device file descriptor
> + * @vf_num: VF number
> + * @gt_num: GT number
> + * @attr: Debugfs attribute to write to
> + * @value: The value to set
> + *
> + * Writes a 32-bit unsigned integer to the specified debugfs attribute.
> + *
> + * Return: 0 on success, negative error code on failure.
> + */
> +DEFINE_XE_SRIOV_PF_DEBUGFS_FUNC(uint32_t, set_u32, __igt_sysfs_set_u32)
> +
> +/**
> + * __xe_sriov_pf_debugfs_get_u64 - Get a 64-bit unsigned integer from debugfs
> + * @pf: PF device file descriptor
> + * @vf_num: VF number
> + * @gt_num: GT number
> + * @attr: Debugfs attribute to read
> + * @value: Pointer to store the retrieved value
> + *
> + * Reads a 64-bit unsigned integer from the specified debugfs attribute.
> + *
> + * Return: 0 on success, negative error code on failure.
> + */
> +DEFINE_XE_SRIOV_PF_DEBUGFS_FUNC(uint64_t *, get_u64, __igt_sysfs_get_u64)
> +
> +/**
> + * __xe_sriov_pf_debugfs_set_u64 - Set a 64-bit unsigned integer in debugfs
> + * @pf: PF device file descriptor
> + * @vf_num: VF number
> + * @gt_num: GT number
> + * @attr: Debugfs attribute to write to
> + * @value: The value to set
> + *
> + * Writes a 64-bit unsigned integer to the specified debugfs attribute.
> + *
> + * Return: 0 on success, negative error code on failure.
> + */
> +DEFINE_XE_SRIOV_PF_DEBUGFS_FUNC(uint64_t, set_u64, __igt_sysfs_set_u64)
> +
> +/**
> + * __xe_sriov_pf_debugfs_get_boolean - Get a boolean value from debugfs
> + * @pf: PF device file descriptor
> + * @vf_num: VF number
> + * @gt_num: GT number
> + * @attr: Debugfs attribute to read
> + * @value: Pointer to store the retrieved value
> + *
> + * Reads a boolean value from the specified debugfs attribute.
> + *
> + * Return: 0 on success, negative error code on failure.
> + */
> +DEFINE_XE_SRIOV_PF_DEBUGFS_FUNC(bool *, get_boolean, __igt_sysfs_get_boolean)
> +
> +/**
> + * __xe_sriov_pf_debugfs_set_boolean - Set a boolean value in debugfs
> + * @pf: PF device file descriptor
> + * @vf_num: VF number
> + * @gt_num: GT number
> + * @attr: Debugfs attribute to write to
> + * @value: The value to set
> + *
> + * Writes a boolean value to the specified debugfs attribute.
> + *
> + * Return: 0 on success, negative error code on failure.
> + */
> +DEFINE_XE_SRIOV_PF_DEBUGFS_FUNC(bool, set_boolean, __igt_sysfs_set_boolean)
> diff --git a/lib/xe/xe_sriov_debugfs.h b/lib/xe/xe_sriov_debugfs.h
> index 856445e76..2db965f9b 100644
> --- a/lib/xe/xe_sriov_debugfs.h
> +++ b/lib/xe/xe_sriov_debugfs.h
> @@ -16,5 +16,23 @@ int xe_sriov_pf_debugfs_read_provisioned_ranges(int pf_fd, enum xe_sriov_shared_
>   						unsigned int gt_id,
>   						struct xe_sriov_provisioned_range **ranges,
>   						unsigned int *nr_ranges);
> +int __xe_sriov_pf_debugfs_get_u32(int pf, unsigned int vf_num,
> +				  unsigned int gt_num, const char *attr,
> +				  uint32_t *value);
> +int __xe_sriov_pf_debugfs_set_u32(int pf, unsigned int vf_num,
> +				  unsigned int gt_num, const char *attr,
> +				  uint32_t value);
> +int __xe_sriov_pf_debugfs_get_u64(int pf, unsigned int vf_num,
> +				  unsigned int gt_num, const char *attr,
> +				  uint64_t *value);
> +int __xe_sriov_pf_debugfs_set_u64(int pf, unsigned int vf_num,
> +				  unsigned int gt_num, const char *attr,
> +				  uint64_t value);
> +int __xe_sriov_pf_debugfs_get_boolean(int pf, unsigned int vf_num,
> +				      unsigned int gt_num, const char *attr,
> +				      bool *value);
> +int __xe_sriov_pf_debugfs_set_boolean(int pf, unsigned int vf_num,
> +				      unsigned int gt_num, const char *attr,
> +				      bool value);
>   
>   #endif /* __XE_SRIOV_DEBUGFS_H__ */

One small nit, but overall looks good:
Reviewed-by: Lukasz Laguna <lukasz.laguna@intel.com>

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

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

* Re: [PATCH i-g-t 2/5] lib/xe/xe_sriov_provisioning: Add accessors for quota/spare attributes
  2024-12-18 12:00 ` [PATCH i-g-t 2/5] lib/xe/xe_sriov_provisioning: Add accessors for quota/spare attributes Marcin Bernatowicz
@ 2024-12-18 14:28   ` Laguna, Lukasz
  0 siblings, 0 replies; 17+ messages in thread
From: Laguna, Lukasz @ 2024-12-18 14:28 UTC (permalink / raw)
  To: Marcin Bernatowicz, igt-dev
  Cc: Adam Miszczak, Jakub Kolakowski, Michał Wajdeczko,
	Michał Winiarski, Narasimha C V, Piotr Piórkowski,
	Satyanarayana K V P, Tomasz Lis

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

On 12/18/2024 13:00, Marcin Bernatowicz wrote:
> Introduce functions to get and set SR-IOV provisioning quota and spare
> attributes. These functions provide access to shared resource attributes
> such as GGTT, LMEM, contexts, and doorbells for both PF and VF contexts.
>
> Add returning and asserting variants to allow flexible error handling
> based on usage scenarios.
>
> Signed-off-by: Marcin Bernatowicz<marcin.bernatowicz@linux.intel.com>
> Cc: Adam Miszczak<adam.miszczak@linux.intel.com>
> Cc: Jakub Kolakowski<jakub1.kolakowski@intel.com>
> Cc: Lukasz Laguna<lukasz.laguna@intel.com>
> Cc: Michał Wajdeczko<michal.wajdeczko@intel.com>
> Cc: Michał Winiarski<michal.winiarski@intel.com>
> Cc: Narasimha C V<narasimha.c.v@intel.com>
> Cc: Piotr Piórkowski<piotr.piorkowski@intel.com>
> Cc: Satyanarayana K V P<satyanarayana.k.v.p@intel.com>
> Cc: Tomasz Lis<tomasz.lis@intel.com>
> ---
>   lib/xe/xe_sriov_provisioning.c | 124 +++++++++++++++++++++++++++++++++
>   lib/xe/xe_sriov_provisioning.h |  14 ++++
>   2 files changed, 138 insertions(+)
>
> diff --git a/lib/xe/xe_sriov_provisioning.c b/lib/xe/xe_sriov_provisioning.c
> index 67ae9cf54..536121931 100644
> --- a/lib/xe/xe_sriov_provisioning.c
> +++ b/lib/xe/xe_sriov_provisioning.c
> @@ -9,6 +9,7 @@
>   #include "intel_chipset.h"
>   #include "linux_scaffold.h"
>   #include "xe/xe_mmio.h"
> +#include "xe/xe_sriov_debugfs.h"
>   #include "xe/xe_sriov_provisioning.h"
>   
>   /**
> @@ -150,3 +151,126 @@ int xe_sriov_find_ggtt_provisioned_pte_offsets(int pf_fd, int gt, struct xe_mmio
>   
>   	return 0;
>   }
> +
> +/**
> + * xe_sriov_shared_res_attr_name - Retrieve the attribute name for a shared resource
> + * @res: Shared resource type (see enum xe_sriov_shared_res)
> + * @vf_num: VF number (1-based) or 0 for PF
> + *
> + * Returns the attribute name corresponding to the specified
> + * shared resource type and VF number. For VF (vf_num > 0), the "quota"
> + * attribute name is returned (e.g., "contexts_quota"). For PF (vf_num == 0),
> + * the "spare" attribute name is returned (e.g., "contexts_spare").
> + *
> + * Return:
> + * The attribute name as a string if the resource type is valid.
> + * NULL if the resource type is invalid.
> + */
> +const char *xe_sriov_shared_res_attr_name(enum xe_sriov_shared_res res,
> +					  unsigned int vf_num)
> +{
> +	switch (res) {
> +	case XE_SRIOV_SHARED_RES_CONTEXTS:
> +		return vf_num ? "contexts_quota" : "contexts_spare";
> +	case XE_SRIOV_SHARED_RES_DOORBELLS:
> +		return vf_num ? "doorbells_quota" : "doorbells_spare";
> +	case XE_SRIOV_SHARED_RES_GGTT:
> +		return vf_num ? "ggtt_quota" : "ggtt_spare";
> +	case XE_SRIOV_SHARED_RES_LMEM:
> +		return vf_num ? "lmem_quota" : "lmem_spare";
> +	}
> +
> +	return NULL;
> +}
> +
> +/**
> + * __xe_sriov_pf_get_shared_res_attr - Read shared resource attribute
> + * @pf: PF device file descriptor
> + * @res: Shared resource type (see enum xe_sriov_shared_res)
> + * @vf_num: VF number (1-based) or 0 for PF
> + * @gt_num: GT number
> + * @value: Pointer to store the read attribute value
> + *
> + * Reads the specified shared resource attribute for the given PF device @pf,
> + * VF number @vf_num, and GT @gt_num. The attribute depends on @vf_num:
> + * - For VF (vf_num > 0), reads the "quota" attribute.
> + * - For PF (vf_num == 0), reads the "spare" attribute.
> + *
> + *
> + * Return: 0 on success, negative error code on failure.
> + */
> +int __xe_sriov_pf_get_shared_res_attr(int pf, enum xe_sriov_shared_res res,
> +				      unsigned int vf_num, unsigned int gt_num,
> +				      uint64_t *value)
> +{
> +	return __xe_sriov_pf_debugfs_get_u64(pf, vf_num, gt_num,
> +					     xe_sriov_shared_res_attr_name(res, vf_num),
> +					     value);
> +}
> +
> +/**
> + * xe_sriov_pf_get_shared_res_attr - Read shared resource attribute
> + * @pf: PF device file descriptor
> + * @res: Shared resource type (see enum xe_sriov_shared_res)
> + * @vf_num: VF number (1-based) or 0 for PF
> + * @gt_num: GT number
> + *
> + * A throwing version of __xe_sriov_pf_get_shared_res_attr().
> + * Instead of returning an error code, it returns the quota value and asserts
> + * in case of an error.
> + *
> + * Return: The value for the given shared resource attribute.
> + *         Asserts in case of failure.
> + */
> +uint64_t xe_sriov_pf_get_shared_res_attr(int pf, enum xe_sriov_shared_res res,
> +					 unsigned int vf_num,
> +					 unsigned int gt_num)
> +{
> +	uint64_t value;
> +
> +	igt_fail_on(__xe_sriov_pf_get_shared_res_attr(pf, res, vf_num, gt_num, &value));
> +
> +	return value;
> +}
> +
> +/**
> + * __xe_sriov_pf_set_shared_res_attr - Set a shared resource attribute
> + * @pf: PF device file descriptor
> + * @res: Shared resource type (see enum xe_sriov_shared_res)
> + * @vf_num: VF number (1-based) or 0 for PF
> + * @gt_num: GT number
> + * @value: Value to set for the shared resource attribute
> + *
> + * Sets the specified shared resource attribute for the given PF device @pf,
> + * VF number @vf_num, and GT @gt_num. The attribute depends on @vf_num:
> + * - For VF (vf_num > 0), reads the "quota" attribute.
> + * - For PF (vf_num == 0), reads the "spare" attribute.
> + *
> + * Return: 0 on success, negative error code on failure.
> + */
> +int __xe_sriov_pf_set_shared_res_attr(int pf, enum xe_sriov_shared_res res,
> +				      unsigned int vf_num, unsigned int gt_num,
> +				      uint64_t value)
> +{
> +	return __xe_sriov_pf_debugfs_set_u64(pf, vf_num, gt_num,
> +					     xe_sriov_shared_res_attr_name(res, vf_num),
> +					     value);
> +}
> +
> +/**
> + * xe_sriov_pf_set_shared_res_attr - Set the shared resource attribute value
> + * @pf: PF device file descriptor
> + * @res: Shared resource type (see enum xe_sriov_shared_res)
> + * @vf_num: VF number (1-based) or 0 for PF
> + * @gt_num: GT number
> + * @value: Value to set
> + *
> + * A throwing version of __xe_sriov_pf_set_shared_res_attr().
> + * Instead of returning an error code, it asserts in case of an error.
> + */
> +void xe_sriov_pf_set_shared_res_attr(int pf, enum xe_sriov_shared_res res,
> +				     unsigned int vf_num, unsigned int gt_num,
> +				     uint64_t value)
> +{
> +	igt_fail_on(__xe_sriov_pf_set_shared_res_attr(pf, res, vf_num, gt_num, value));
> +}
> diff --git a/lib/xe/xe_sriov_provisioning.h b/lib/xe/xe_sriov_provisioning.h
> index aa2f08f52..168b50394 100644
> --- a/lib/xe/xe_sriov_provisioning.h
> +++ b/lib/xe/xe_sriov_provisioning.h
> @@ -46,5 +46,19 @@ const char *xe_sriov_shared_res_to_string(enum xe_sriov_shared_res res);
>   int xe_sriov_find_ggtt_provisioned_pte_offsets(int pf_fd, int gt, struct xe_mmio *mmio,
>   					       struct xe_sriov_provisioned_range **ranges,
>   					       unsigned int *nr_ranges);
> +const char *xe_sriov_shared_res_attr_name(enum xe_sriov_shared_res res,
> +					  unsigned int vf_num);
> +int __xe_sriov_pf_get_shared_res_attr(int pf, enum xe_sriov_shared_res res,
> +				      unsigned int vf_num, unsigned int gt_num,
> +				      uint64_t *value);
> +uint64_t xe_sriov_pf_get_shared_res_attr(int pf, enum xe_sriov_shared_res res,
> +					 unsigned int vf_num,
> +					 unsigned int gt_num);
> +int __xe_sriov_pf_set_shared_res_attr(int pf, enum xe_sriov_shared_res res,
> +				      unsigned int vf_num, unsigned int gt_num,
> +				      uint64_t value);
> +void xe_sriov_pf_set_shared_res_attr(int pf, enum xe_sriov_shared_res res,
> +				     unsigned int vf_num, unsigned int gt_num,
> +				     uint64_t value);
>   
>   #endif /* __XE_SRIOV_PROVISIONING_H__ */

LGTM,
Reviewed-by: Lukasz Laguna <lukasz.laguna@intel.com>

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

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

* Re: [PATCH i-g-t 3/5] lib/xe/xe_sriov_provisioning: Add shared resource provisionability check
  2024-12-18 12:00 ` [PATCH i-g-t 3/5] lib/xe/xe_sriov_provisioning: Add shared resource provisionability check Marcin Bernatowicz
@ 2024-12-18 14:47   ` Laguna, Lukasz
  0 siblings, 0 replies; 17+ messages in thread
From: Laguna, Lukasz @ 2024-12-18 14:47 UTC (permalink / raw)
  To: Marcin Bernatowicz, igt-dev
  Cc: Adam Miszczak, Jakub Kolakowski, Michał Wajdeczko,
	Michał Winiarski, Narasimha C V, Piotr Piórkowski,
	Satyanarayana K V P, Tomasz Lis

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

On 12/18/2024 13:00, Marcin Bernatowicz wrote:
> Introduce a helper `xe_sriov_is_shared_res_provisionable` to determine
> if a shared resource can be provisioned.
>
> Add macros `xe_sriov_for_each_shared_res` and
> `xe_sriov_for_each_provisionable_shared_res` to iterate over shared
> resources and provisionable shared resources, respectively.
>
> Signed-off-by: Marcin Bernatowicz<marcin.bernatowicz@linux.intel.com>
> Cc: Adam Miszczak<adam.miszczak@linux.intel.com>
> Cc: Jakub Kolakowski<jakub1.kolakowski@intel.com>
> Cc: Lukasz Laguna<lukasz.laguna@intel.com>
> Cc: Michał Wajdeczko<michal.wajdeczko@intel.com>
> Cc: Michał Winiarski<michal.winiarski@intel.com>
> Cc: Narasimha C V<narasimha.c.v@intel.com>
> Cc: Piotr Piórkowski<piotr.piorkowski@intel.com>
> Cc: Satyanarayana K V P<satyanarayana.k.v.p@intel.com>
> Cc: Tomasz Lis<tomasz.lis@intel.com>
> ---
>   lib/xe/xe_sriov_provisioning.c | 22 ++++++++++++++++++++++
>   lib/xe/xe_sriov_provisioning.h | 29 +++++++++++++++++++++++++++++
>   2 files changed, 51 insertions(+)
>
> diff --git a/lib/xe/xe_sriov_provisioning.c b/lib/xe/xe_sriov_provisioning.c
> index 536121931..22035ffd8 100644
> --- a/lib/xe/xe_sriov_provisioning.c
> +++ b/lib/xe/xe_sriov_provisioning.c
> @@ -9,6 +9,7 @@
>   #include "intel_chipset.h"
>   #include "linux_scaffold.h"
>   #include "xe/xe_mmio.h"
> +#include "xe/xe_query.h"
>   #include "xe/xe_sriov_debugfs.h"
>   #include "xe/xe_sriov_provisioning.h"
>   
> @@ -274,3 +275,24 @@ void xe_sriov_pf_set_shared_res_attr(int pf, enum xe_sriov_shared_res res,
>   {
>   	igt_fail_on(__xe_sriov_pf_set_shared_res_attr(pf, res, vf_num, gt_num, value));
>   }
> +
> +/**
> + * xe_sriov_is_shared_res_provisionable - Check if a shared resource is provisionable
> + * @pf: PF device file descriptor
> + * @res: Shared resource type (see enum xe_sriov_shared_res)
> + * @gt_num: GT number
> + *
> + * Determines whether a specified shared resource can be provisioned.
> + *
> + * Return: true if the shared resource is provisionable, false otherwise.
> + */
> +bool xe_sriov_is_shared_res_provisionable(int pf, enum xe_sriov_shared_res res,
> +					  unsigned int gt_num)
> +{
> +	if (res == XE_SRIOV_SHARED_RES_LMEM)
> +		return xe_has_vram(pf) && !xe_is_media_gt(pf, gt_num);
> +	else if (res == XE_SRIOV_SHARED_RES_GGTT)
> +		return !xe_is_media_gt(pf, gt_num);
> +
> +	return true;
> +}
> diff --git a/lib/xe/xe_sriov_provisioning.h b/lib/xe/xe_sriov_provisioning.h
> index 168b50394..b4300ec2e 100644
> --- a/lib/xe/xe_sriov_provisioning.h
> +++ b/lib/xe/xe_sriov_provisioning.h
> @@ -27,6 +27,34 @@ enum xe_sriov_shared_res {
>   	XE_SRIOV_SHARED_RES_LMEM,
>   };
>   
> +/**
> + * XE_SRIOV_SHARED_RES_NUM - Number of shared resource types
> + */
> +#define XE_SRIOV_SHARED_RES_NUM (XE_SRIOV_SHARED_RES_LMEM + 1)
> +
> +/**
> + * xe_sriov_for_each_shared_res - Iterate over all shared resource types
> + * @res: Loop counter variable of type `enum xe_sriov_shared_res`
> + *
> + * Iterates over each shared resource type defined in the `enum xe_sriov_shared_res`.
> + */
> +#define xe_sriov_for_each_shared_res(res) \
> +	for ((res) = 0; (res) < XE_SRIOV_SHARED_RES_NUM; (res)++)
> +
> +/**
> + * xe_sriov_for_each_provisionable_shared_res - Iterate over provisionable shared
> + * resource types
> + * @res: Loop counter variable of type `enum xe_sriov_shared_res`
> + * @pf: PF device file descriptor of type int
> + * @gt: GT number of type unsigned int
> + *
> + * Iterates over each provisionable shared resource type for the given PF device
> + * and GT number.
> + */
> +#define xe_sriov_for_each_provisionable_shared_res(res, pf, gt) \
> +	for ((res) = 0; (res) < XE_SRIOV_SHARED_RES_NUM; (res)++) \
> +		for_if(xe_sriov_is_shared_res_provisionable((pf), (res), (gt)))
> +
>   /**
>    * struct xe_sriov_provisioned_range - Provisioned range for a Virtual Function (VF)
>    * @vf_id: The ID of the VF
> @@ -43,6 +71,7 @@ struct xe_sriov_provisioned_range {
>   };
>   
>   const char *xe_sriov_shared_res_to_string(enum xe_sriov_shared_res res);
> +bool xe_sriov_is_shared_res_provisionable(int pf, enum xe_sriov_shared_res res, unsigned int gt);
>   int xe_sriov_find_ggtt_provisioned_pte_offsets(int pf_fd, int gt, struct xe_mmio *mmio,
>   					       struct xe_sriov_provisioned_range **ranges,
>   					       unsigned int *nr_ranges);

LGTM,
Reviewed-by: Lukasz Laguna <lukasz.laguna@intel.com>

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

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

* ✓ i915.CI.BAT: success for Add xe_sriov_auto_provisioning tests
  2024-12-18 12:00 [PATCH i-g-t 0/5] Add xe_sriov_auto_provisioning tests Marcin Bernatowicz
                   ` (4 preceding siblings ...)
  2024-12-18 12:00 ` [PATCH i-g-t 5/5] tests/xe_sriov_auto_provisioning: Add tests for SR-IOV auto-provisioning Marcin Bernatowicz
@ 2024-12-18 22:25 ` Patchwork
  2024-12-19  1:00 ` ✓ Xe.CI.BAT: " Patchwork
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2024-12-18 22:25 UTC (permalink / raw)
  To: Marcin Bernatowicz; +Cc: igt-dev

== Series Details ==

Series: Add xe_sriov_auto_provisioning tests
URL   : https://patchwork.freedesktop.org/series/142781/
State : success

== Summary ==

CI Bug Log - changes from IGT_8164 -> IGTPW_12344
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/index.html

Participating hosts (45 -> 43)
------------------------------

  Missing    (2): bat-atsm-1 fi-snb-2520m 

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

  Here are the changes found in IGTPW_12344 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@i915_module_load@load:
    - bat-twl-1:          [PASS][1] -> [DMESG-WARN][2] ([i915#1982])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8164/bat-twl-1/igt@i915_module_load@load.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/bat-twl-1/igt@i915_module_load@load.html

  * igt@i915_selftest@live@workarounds:
    - bat-arlh-3:         [PASS][3] -> [ABORT][4] ([i915#12061]) +1 other test abort
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8164/bat-arlh-3/igt@i915_selftest@live@workarounds.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/bat-arlh-3/igt@i915_selftest@live@workarounds.html

  
#### Possible fixes ####

  * igt@i915_selftest@live@late_gt_pm:
    - fi-cfl-8109u:       [DMESG-WARN][5] ([i915#11621]) -> [PASS][6] +132 other tests pass
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8164/fi-cfl-8109u/igt@i915_selftest@live@late_gt_pm.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/fi-cfl-8109u/igt@i915_selftest@live@late_gt_pm.html

  * igt@i915_selftest@live@workarounds:
    - bat-arls-5:         [ABORT][7] ([i915#12061]) -> [PASS][8]
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8164/bat-arls-5/igt@i915_selftest@live@workarounds.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/bat-arls-5/igt@i915_selftest@live@workarounds.html
    - {bat-mtlp-9}:       [ABORT][9] ([i915#12061]) -> [PASS][10] +1 other test pass
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8164/bat-mtlp-9/igt@i915_selftest@live@workarounds.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/bat-mtlp-9/igt@i915_selftest@live@workarounds.html

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

  [i915#11621]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11621
  [i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
  [i915#1982]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1982


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

  * CI: CI-20190529 -> None
  * IGT: IGT_8164 -> IGTPW_12344
  * Linux: CI_DRM_15864 -> CI_DRM_15865

  CI-20190529: 20190529
  CI_DRM_15864: e9a5d74b7f60fe6f7d55ebe636ff871214b6caec @ git://anongit.freedesktop.org/gfx-ci/linux
  CI_DRM_15865: d8f0c44e2ed948dcc45d04a0dfa83612995a702b @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_12344: f2c153c4a567369dd10c22c3d8b8cb8ce10d3a85 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  IGT_8164: e9d9934c7c6dc6878792d82424fc928e7f6996cb @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/index.html

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

* ✓ Xe.CI.BAT: success for Add xe_sriov_auto_provisioning tests
  2024-12-18 12:00 [PATCH i-g-t 0/5] Add xe_sriov_auto_provisioning tests Marcin Bernatowicz
                   ` (5 preceding siblings ...)
  2024-12-18 22:25 ` ✓ i915.CI.BAT: success for Add xe_sriov_auto_provisioning tests Patchwork
@ 2024-12-19  1:00 ` Patchwork
  2024-12-19 12:22 ` ✗ i915.CI.Full: failure " Patchwork
  2024-12-19 17:51 ` ✗ Xe.CI.Full: " Patchwork
  8 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2024-12-19  1:00 UTC (permalink / raw)
  To: Marcin Bernatowicz; +Cc: igt-dev

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

== Series Details ==

Series: Add xe_sriov_auto_provisioning tests
URL   : https://patchwork.freedesktop.org/series/142781/
State : success

== Summary ==

CI Bug Log - changes from XEIGT_8164_BAT -> XEIGTPW_12344_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

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

  No changes in participating hosts

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

  Here are the changes found in XEIGTPW_12344_BAT that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@kms_psr@psr-cursor-plane-move:
    - bat-adlp-7:         [PASS][1] -> [SKIP][2] ([Intel XE#455]) +1 other test skip
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/bat-adlp-7/igt@kms_psr@psr-cursor-plane-move.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/bat-adlp-7/igt@kms_psr@psr-cursor-plane-move.html

  * igt@kms_psr@psr-primary-page-flip@edp-1:
    - bat-adlp-7:         [PASS][3] -> [DMESG-WARN][4] ([Intel XE#3517]) +1 other test dmesg-warn
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/bat-adlp-7/igt@kms_psr@psr-primary-page-flip@edp-1.html
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/bat-adlp-7/igt@kms_psr@psr-primary-page-flip@edp-1.html

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


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

  * IGT: IGT_8164 -> IGTPW_12344
  * Linux: xe-2396-e9a5d74b7f60fe6f7d55ebe636ff871214b6caec -> xe-2397-d8f0c44e2ed948dcc45d04a0dfa83612995a702b

  IGTPW_12344: f2c153c4a567369dd10c22c3d8b8cb8ce10d3a85 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  IGT_8164: e9d9934c7c6dc6878792d82424fc928e7f6996cb @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-2396-e9a5d74b7f60fe6f7d55ebe636ff871214b6caec: e9a5d74b7f60fe6f7d55ebe636ff871214b6caec
  xe-2397-d8f0c44e2ed948dcc45d04a0dfa83612995a702b: d8f0c44e2ed948dcc45d04a0dfa83612995a702b

== Logs ==

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

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

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

* ✗ i915.CI.Full: failure for Add xe_sriov_auto_provisioning tests
  2024-12-18 12:00 [PATCH i-g-t 0/5] Add xe_sriov_auto_provisioning tests Marcin Bernatowicz
                   ` (6 preceding siblings ...)
  2024-12-19  1:00 ` ✓ Xe.CI.BAT: " Patchwork
@ 2024-12-19 12:22 ` Patchwork
  2024-12-19 17:51 ` ✗ Xe.CI.Full: " Patchwork
  8 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2024-12-19 12:22 UTC (permalink / raw)
  To: Marcin Bernatowicz; +Cc: igt-dev

== Series Details ==

Series: Add xe_sriov_auto_provisioning tests
URL   : https://patchwork.freedesktop.org/series/142781/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_15865_full -> IGTPW_12344_full
====================================================

Summary
-------

  **FAILURE**

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

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/index.html

Participating hosts (11 -> 10)
------------------------------

  Missing    (1): shard-glk-0 

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

  Here are the unknown changes that may have been introduced in IGTPW_12344_full:

### IGT changes ###

#### Possible regressions ####

  * igt@gem_exec_gttfill@engines:
    - shard-dg2:          [PASS][1] -> [INCOMPLETE][2] +1 other test incomplete
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-dg2-10/igt@gem_exec_gttfill@engines.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-8/igt@gem_exec_gttfill@engines.html

  * igt@gem_tiled_swapping@non-threaded:
    - shard-tglu:         NOTRUN -> [FAIL][3]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-6/igt@gem_tiled_swapping@non-threaded.html

  * igt@kms_async_flips@crc-atomic@pipe-a-hdmi-a-1:
    - shard-snb:          NOTRUN -> [INCOMPLETE][4] +1 other test incomplete
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-snb2/igt@kms_async_flips@crc-atomic@pipe-a-hdmi-a-1.html

  * igt@kms_async_flips@crc-atomic@pipe-a-hdmi-a-2:
    - shard-glk:          NOTRUN -> [INCOMPLETE][5] +1 other test incomplete
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-glk8/igt@kms_async_flips@crc-atomic@pipe-a-hdmi-a-2.html

  * igt@perf_pmu@busy-accuracy-50@vcs1:
    - shard-dg1:          [PASS][6] -> [FAIL][7] +1 other test fail
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-dg1-13/igt@perf_pmu@busy-accuracy-50@vcs1.html
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-14/igt@perf_pmu@busy-accuracy-50@vcs1.html

  
#### Warnings ####

  * igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-pwrite:
    - shard-dg2:          [SKIP][8] ([i915#3458]) -> [INCOMPLETE][9]
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-dg2-3/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-pwrite.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-8/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-pwrite.html

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

  Here are the changes found in IGTPW_12344_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@api_intel_bb@blit-reloc-purge-cache:
    - shard-dg1:          NOTRUN -> [SKIP][10] ([i915#8411]) +1 other test skip
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-18/igt@api_intel_bb@blit-reloc-purge-cache.html

  * igt@api_intel_bb@object-reloc-purge-cache:
    - shard-dg2:          NOTRUN -> [SKIP][11] ([i915#8411]) +1 other test skip
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-8/igt@api_intel_bb@object-reloc-purge-cache.html
    - shard-rkl:          NOTRUN -> [SKIP][12] ([i915#8411])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-5/igt@api_intel_bb@object-reloc-purge-cache.html

  * igt@device_reset@unbind-cold-reset-rebind:
    - shard-tglu-1:       NOTRUN -> [SKIP][13] ([i915#11078])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@device_reset@unbind-cold-reset-rebind.html

  * igt@drm_fdinfo@busy-check-all@bcs0:
    - shard-dg1:          NOTRUN -> [SKIP][14] ([i915#8414]) +11 other tests skip
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-18/igt@drm_fdinfo@busy-check-all@bcs0.html

  * igt@drm_fdinfo@busy-check-all@ccs0:
    - shard-mtlp:         NOTRUN -> [SKIP][15] ([i915#8414]) +7 other tests skip
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-1/igt@drm_fdinfo@busy-check-all@ccs0.html

  * igt@drm_fdinfo@most-busy-check-all@bcs0:
    - shard-dg2:          NOTRUN -> [SKIP][16] ([i915#8414]) +15 other tests skip
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-6/igt@drm_fdinfo@most-busy-check-all@bcs0.html

  * igt@gem_ccs@block-copy-compressed:
    - shard-dg1:          NOTRUN -> [SKIP][17] ([i915#3555] / [i915#9323])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-18/igt@gem_ccs@block-copy-compressed.html

  * igt@gem_ccs@block-multicopy-inplace:
    - shard-rkl:          NOTRUN -> [SKIP][18] ([i915#3555] / [i915#9323]) +1 other test skip
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-3/igt@gem_ccs@block-multicopy-inplace.html

  * igt@gem_ccs@large-ctrl-surf-copy:
    - shard-tglu-1:       NOTRUN -> [SKIP][19] ([i915#13008])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@gem_ccs@large-ctrl-surf-copy.html

  * igt@gem_ccs@suspend-resume:
    - shard-tglu:         NOTRUN -> [SKIP][20] ([i915#9323])
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-8/igt@gem_ccs@suspend-resume.html

  * igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-smem-lmem0:
    - shard-dg2:          [PASS][21] -> [INCOMPLETE][22] ([i915#12392] / [i915#7297])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-dg2-4/igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-smem-lmem0.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-1/igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-smem-lmem0.html

  * igt@gem_close_race@multigpu-basic-process:
    - shard-dg2:          NOTRUN -> [SKIP][23] ([i915#7697])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-2/igt@gem_close_race@multigpu-basic-process.html
    - shard-rkl:          NOTRUN -> [SKIP][24] ([i915#7697])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-2/igt@gem_close_race@multigpu-basic-process.html

  * igt@gem_create@create-ext-cpu-access-sanity-check:
    - shard-tglu:         NOTRUN -> [SKIP][25] ([i915#6335])
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-9/igt@gem_create@create-ext-cpu-access-sanity-check.html

  * igt@gem_create@create-ext-set-pat:
    - shard-tglu-1:       NOTRUN -> [SKIP][26] ([i915#8562])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@gem_create@create-ext-set-pat.html

  * igt@gem_ctx_persistence@engines-mixed-process:
    - shard-snb:          NOTRUN -> [SKIP][27] ([i915#1099]) +6 other tests skip
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-snb1/igt@gem_ctx_persistence@engines-mixed-process.html

  * igt@gem_ctx_persistence@heartbeat-hang:
    - shard-dg2:          NOTRUN -> [SKIP][28] ([i915#8555])
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-4/igt@gem_ctx_persistence@heartbeat-hang.html

  * igt@gem_ctx_sseu@engines:
    - shard-dg1:          NOTRUN -> [SKIP][29] ([i915#280])
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-18/igt@gem_ctx_sseu@engines.html

  * igt@gem_ctx_sseu@mmap-args:
    - shard-dg2:          NOTRUN -> [SKIP][30] ([i915#280])
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-7/igt@gem_ctx_sseu@mmap-args.html
    - shard-rkl:          NOTRUN -> [SKIP][31] ([i915#280]) +1 other test skip
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-4/igt@gem_ctx_sseu@mmap-args.html
    - shard-tglu-1:       NOTRUN -> [SKIP][32] ([i915#280])
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@gem_ctx_sseu@mmap-args.html

  * igt@gem_eio@kms:
    - shard-tglu:         [PASS][33] -> [DMESG-WARN][34] ([i915#13363])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-tglu-4/igt@gem_eio@kms.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-9/igt@gem_eio@kms.html

  * igt@gem_exec_balancer@bonded-semaphore:
    - shard-dg2:          NOTRUN -> [SKIP][35] ([i915#4812])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-2/igt@gem_exec_balancer@bonded-semaphore.html

  * igt@gem_exec_balancer@full-late:
    - shard-mtlp:         [PASS][36] -> [FAIL][37] ([i915#13364])
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-mtlp-2/igt@gem_exec_balancer@full-late.html
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-4/igt@gem_exec_balancer@full-late.html

  * igt@gem_exec_balancer@full-pulse:
    - shard-mtlp:         NOTRUN -> [FAIL][38] ([i915#13364])
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-4/igt@gem_exec_balancer@full-pulse.html

  * igt@gem_exec_balancer@parallel-contexts:
    - shard-tglu-1:       NOTRUN -> [SKIP][39] ([i915#4525])
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@gem_exec_balancer@parallel-contexts.html

  * igt@gem_exec_balancer@parallel-ordering:
    - shard-rkl:          NOTRUN -> [SKIP][40] ([i915#4525])
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-3/igt@gem_exec_balancer@parallel-ordering.html

  * igt@gem_exec_capture@capture-invisible@smem0:
    - shard-glk:          NOTRUN -> [SKIP][41] ([i915#6334]) +1 other test skip
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-glk5/igt@gem_exec_capture@capture-invisible@smem0.html

  * igt@gem_exec_capture@capture@vecs0-lmem0:
    - shard-dg2:          NOTRUN -> [FAIL][42] ([i915#11965]) +4 other tests fail
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-1/igt@gem_exec_capture@capture@vecs0-lmem0.html

  * igt@gem_exec_endless@dispatch:
    - shard-dg2:          NOTRUN -> [TIMEOUT][43] ([i915#3778] / [i915#7016]) +1 other test timeout
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-6/igt@gem_exec_endless@dispatch.html

  * igt@gem_exec_flush@basic-uc-rw-default:
    - shard-dg1:          NOTRUN -> [SKIP][44] ([i915#3539] / [i915#4852]) +1 other test skip
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-13/igt@gem_exec_flush@basic-uc-rw-default.html

  * igt@gem_exec_flush@basic-wb-ro-default:
    - shard-dg2:          NOTRUN -> [SKIP][45] ([i915#3539] / [i915#4852]) +1 other test skip
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-1/igt@gem_exec_flush@basic-wb-ro-default.html

  * igt@gem_exec_reloc@basic-active:
    - shard-rkl:          NOTRUN -> [SKIP][46] ([i915#3281]) +12 other tests skip
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-3/igt@gem_exec_reloc@basic-active.html

  * igt@gem_exec_reloc@basic-cpu-read:
    - shard-dg2:          NOTRUN -> [SKIP][47] ([i915#3281]) +9 other tests skip
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-2/igt@gem_exec_reloc@basic-cpu-read.html

  * igt@gem_exec_reloc@basic-cpu-read-noreloc:
    - shard-mtlp:         NOTRUN -> [SKIP][48] ([i915#3281]) +2 other tests skip
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-4/igt@gem_exec_reloc@basic-cpu-read-noreloc.html

  * igt@gem_exec_reloc@basic-write-gtt-active:
    - shard-dg1:          NOTRUN -> [SKIP][49] ([i915#3281]) +9 other tests skip
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-14/igt@gem_exec_reloc@basic-write-gtt-active.html

  * igt@gem_exec_schedule@preempt-queue:
    - shard-dg1:          NOTRUN -> [SKIP][50] ([i915#4812]) +1 other test skip
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-17/igt@gem_exec_schedule@preempt-queue.html

  * igt@gem_exec_schedule@reorder-wide:
    - shard-dg2:          NOTRUN -> [SKIP][51] ([i915#4537] / [i915#4812]) +1 other test skip
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-5/igt@gem_exec_schedule@reorder-wide.html

  * igt@gem_exec_suspend@basic-s0@smem:
    - shard-dg2:          [PASS][52] -> [INCOMPLETE][53] ([i915#11441] / [i915#13304]) +1 other test incomplete
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-dg2-8/igt@gem_exec_suspend@basic-s0@smem.html
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-4/igt@gem_exec_suspend@basic-s0@smem.html

  * igt@gem_exec_suspend@basic-s4-devices:
    - shard-rkl:          NOTRUN -> [ABORT][54] ([i915#7975] / [i915#8213]) +1 other test abort
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-7/igt@gem_exec_suspend@basic-s4-devices.html

  * igt@gem_fence_thrash@bo-write-verify-y:
    - shard-dg2:          NOTRUN -> [SKIP][55] ([i915#4860]) +1 other test skip
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-7/igt@gem_fence_thrash@bo-write-verify-y.html

  * igt@gem_fenced_exec_thrash@no-spare-fences:
    - shard-mtlp:         NOTRUN -> [SKIP][56] ([i915#4860])
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-5/igt@gem_fenced_exec_thrash@no-spare-fences.html

  * igt@gem_lmem_swapping@heavy-verify-multi:
    - shard-tglu-1:       NOTRUN -> [SKIP][57] ([i915#4613])
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@gem_lmem_swapping@heavy-verify-multi.html

  * igt@gem_lmem_swapping@parallel-random-verify:
    - shard-mtlp:         NOTRUN -> [SKIP][58] ([i915#4613])
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-7/igt@gem_lmem_swapping@parallel-random-verify.html

  * igt@gem_lmem_swapping@parallel-random-verify-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][59] ([i915#4613]) +4 other tests skip
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-5/igt@gem_lmem_swapping@parallel-random-verify-ccs.html

  * igt@gem_lmem_swapping@random-engines:
    - shard-glk:          NOTRUN -> [SKIP][60] ([i915#4613]) +4 other tests skip
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-glk5/igt@gem_lmem_swapping@random-engines.html

  * igt@gem_lmem_swapping@verify-ccs:
    - shard-tglu:         NOTRUN -> [SKIP][61] ([i915#4613]) +1 other test skip
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-4/igt@gem_lmem_swapping@verify-ccs.html

  * igt@gem_lmem_swapping@verify-random-ccs:
    - shard-dg1:          NOTRUN -> [SKIP][62] ([i915#12193])
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-18/igt@gem_lmem_swapping@verify-random-ccs.html

  * igt@gem_lmem_swapping@verify-random-ccs@lmem0:
    - shard-dg1:          NOTRUN -> [SKIP][63] ([i915#4565])
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-18/igt@gem_lmem_swapping@verify-random-ccs@lmem0.html

  * igt@gem_mmap_gtt@cpuset-basic-small-copy-xy:
    - shard-dg1:          NOTRUN -> [SKIP][64] ([i915#4077]) +9 other tests skip
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-13/igt@gem_mmap_gtt@cpuset-basic-small-copy-xy.html

  * igt@gem_mmap_wc@write-prefaulted:
    - shard-dg2:          NOTRUN -> [SKIP][65] ([i915#4083]) +4 other tests skip
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-5/igt@gem_mmap_wc@write-prefaulted.html

  * igt@gem_mmap_wc@write-wc-read-gtt:
    - shard-dg1:          NOTRUN -> [SKIP][66] ([i915#4083]) +1 other test skip
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-12/igt@gem_mmap_wc@write-wc-read-gtt.html

  * igt@gem_partial_pwrite_pread@reads-uncached:
    - shard-dg2:          NOTRUN -> [SKIP][67] ([i915#3282]) +4 other tests skip
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-3/igt@gem_partial_pwrite_pread@reads-uncached.html
    - shard-dg1:          NOTRUN -> [SKIP][68] ([i915#3282]) +2 other tests skip
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-18/igt@gem_partial_pwrite_pread@reads-uncached.html

  * igt@gem_pread@exhaustion:
    - shard-tglu:         NOTRUN -> [WARN][69] ([i915#2658])
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-3/igt@gem_pread@exhaustion.html

  * igt@gem_pxp@create-valid-protected-context:
    - shard-dg2:          NOTRUN -> [SKIP][70] ([i915#4270]) +2 other tests skip
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-6/igt@gem_pxp@create-valid-protected-context.html

  * igt@gem_pxp@hw-rejects-pxp-context:
    - shard-tglu:         NOTRUN -> [SKIP][71] ([i915#13033])
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-2/igt@gem_pxp@hw-rejects-pxp-context.html

  * igt@gem_pxp@protected-encrypted-src-copy-not-readible:
    - shard-rkl:          NOTRUN -> [TIMEOUT][72] ([i915#12917] / [i915#12964]) +2 other tests timeout
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-1/igt@gem_pxp@protected-encrypted-src-copy-not-readible.html

  * igt@gem_pxp@regular-baseline-src-copy-readible:
    - shard-rkl:          NOTRUN -> [TIMEOUT][73] ([i915#12964]) +1 other test timeout
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-2/igt@gem_pxp@regular-baseline-src-copy-readible.html

  * igt@gem_pxp@reject-modify-context-protection-off-1:
    - shard-rkl:          NOTRUN -> [SKIP][74] ([i915#4270])
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-1/igt@gem_pxp@reject-modify-context-protection-off-1.html

  * igt@gem_pxp@reject-modify-context-protection-off-3:
    - shard-dg1:          NOTRUN -> [SKIP][75] ([i915#4270]) +3 other tests skip
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-17/igt@gem_pxp@reject-modify-context-protection-off-3.html

  * igt@gem_pxp@verify-pxp-execution-after-suspend-resume:
    - shard-tglu:         [PASS][76] -> [SKIP][77] ([i915#4270]) +1 other test skip
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-tglu-2/igt@gem_pxp@verify-pxp-execution-after-suspend-resume.html
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-3/igt@gem_pxp@verify-pxp-execution-after-suspend-resume.html

  * igt@gem_render_copy@mixed-tiled-to-y-tiled-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][78] ([i915#5190] / [i915#8428]) +5 other tests skip
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-11/igt@gem_render_copy@mixed-tiled-to-y-tiled-ccs.html

  * igt@gem_render_copy@x-tiled-to-vebox-yf-tiled:
    - shard-mtlp:         NOTRUN -> [SKIP][79] ([i915#8428]) +1 other test skip
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-8/igt@gem_render_copy@x-tiled-to-vebox-yf-tiled.html

  * igt@gem_set_tiling_vs_pwrite:
    - shard-rkl:          NOTRUN -> [SKIP][80] ([i915#3282]) +4 other tests skip
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-2/igt@gem_set_tiling_vs_pwrite.html

  * igt@gem_tiled_partial_pwrite_pread@writes:
    - shard-dg2:          NOTRUN -> [SKIP][81] ([i915#4077]) +11 other tests skip
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-5/igt@gem_tiled_partial_pwrite_pread@writes.html

  * igt@gem_tiled_pread_basic:
    - shard-dg2:          NOTRUN -> [SKIP][82] ([i915#4079])
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-6/igt@gem_tiled_pread_basic.html

  * igt@gem_userptr_blits@coherency-unsync:
    - shard-dg2:          NOTRUN -> [SKIP][83] ([i915#3297]) +2 other tests skip
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-2/igt@gem_userptr_blits@coherency-unsync.html

  * igt@gem_userptr_blits@dmabuf-sync:
    - shard-rkl:          NOTRUN -> [SKIP][84] ([i915#3297] / [i915#3323])
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-2/igt@gem_userptr_blits@dmabuf-sync.html

  * igt@gem_userptr_blits@invalid-mmap-offset-unsync:
    - shard-tglu-1:       NOTRUN -> [SKIP][85] ([i915#3297])
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@gem_userptr_blits@invalid-mmap-offset-unsync.html

  * igt@gem_userptr_blits@readonly-pwrite-unsync:
    - shard-mtlp:         NOTRUN -> [SKIP][86] ([i915#3297]) +2 other tests skip
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-6/igt@gem_userptr_blits@readonly-pwrite-unsync.html

  * igt@gem_userptr_blits@sd-probe:
    - shard-dg2:          NOTRUN -> [SKIP][87] ([i915#3297] / [i915#4958])
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-5/igt@gem_userptr_blits@sd-probe.html

  * igt@gem_userptr_blits@unsync-unmap-cycles:
    - shard-rkl:          NOTRUN -> [SKIP][88] ([i915#3297]) +4 other tests skip
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-3/igt@gem_userptr_blits@unsync-unmap-cycles.html
    - shard-dg1:          NOTRUN -> [SKIP][89] ([i915#3297]) +1 other test skip
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-18/igt@gem_userptr_blits@unsync-unmap-cycles.html
    - shard-tglu:         NOTRUN -> [SKIP][90] ([i915#3297]) +1 other test skip
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-3/igt@gem_userptr_blits@unsync-unmap-cycles.html

  * igt@gem_workarounds@suspend-resume-context:
    - shard-glk:          [PASS][91] -> [INCOMPLETE][92] ([i915#13356])
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-glk8/igt@gem_workarounds@suspend-resume-context.html
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-glk6/igt@gem_workarounds@suspend-resume-context.html

  * igt@gen9_exec_parse@batch-invalid-length:
    - shard-rkl:          NOTRUN -> [SKIP][93] ([i915#2527]) +4 other tests skip
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-3/igt@gen9_exec_parse@batch-invalid-length.html

  * igt@gen9_exec_parse@bb-oversize:
    - shard-dg1:          NOTRUN -> [SKIP][94] ([i915#2527]) +1 other test skip
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-14/igt@gen9_exec_parse@bb-oversize.html

  * igt@gen9_exec_parse@secure-batches:
    - shard-tglu-1:       NOTRUN -> [SKIP][95] ([i915#2527] / [i915#2856]) +1 other test skip
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@gen9_exec_parse@secure-batches.html

  * igt@gen9_exec_parse@unaligned-access:
    - shard-dg2:          NOTRUN -> [SKIP][96] ([i915#2856])
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-3/igt@gen9_exec_parse@unaligned-access.html

  * igt@gen9_exec_parse@unaligned-jump:
    - shard-tglu:         NOTRUN -> [SKIP][97] ([i915#2527] / [i915#2856]) +2 other tests skip
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-5/igt@gen9_exec_parse@unaligned-jump.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-snb:          [PASS][98] -> [ABORT][99] ([i915#9820])
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-snb7/igt@i915_module_load@reload-with-fault-injection.html
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-snb4/igt@i915_module_load@reload-with-fault-injection.html

  * igt@i915_pm_freq_api@freq-basic-api:
    - shard-tglu:         NOTRUN -> [SKIP][100] ([i915#8399])
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-4/igt@i915_pm_freq_api@freq-basic-api.html

  * igt@i915_pm_freq_api@freq-reset-multiple:
    - shard-tglu-1:       NOTRUN -> [SKIP][101] ([i915#8399])
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@i915_pm_freq_api@freq-reset-multiple.html

  * igt@i915_pm_freq_api@freq-suspend:
    - shard-rkl:          NOTRUN -> [SKIP][102] ([i915#8399])
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-5/igt@i915_pm_freq_api@freq-suspend.html

  * igt@i915_pm_rc6_residency@rc6-idle@gt0-vcs0:
    - shard-dg1:          [PASS][103] -> [FAIL][104] ([i915#3591])
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-dg1-12/igt@i915_pm_rc6_residency@rc6-idle@gt0-vcs0.html
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-13/igt@i915_pm_rc6_residency@rc6-idle@gt0-vcs0.html

  * igt@i915_pm_rps@thresholds-idle:
    - shard-dg2:          NOTRUN -> [SKIP][105] ([i915#11681])
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-4/igt@i915_pm_rps@thresholds-idle.html
    - shard-dg1:          NOTRUN -> [SKIP][106] ([i915#11681])
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-18/igt@i915_pm_rps@thresholds-idle.html

  * igt@i915_power@sanity:
    - shard-rkl:          NOTRUN -> [SKIP][107] ([i915#7984])
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-5/igt@i915_power@sanity.html

  * igt@i915_selftest@live:
    - shard-rkl:          NOTRUN -> [DMESG-FAIL][108] ([i915#13342])
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-7/igt@i915_selftest@live.html

  * igt@i915_selftest@live@gt_pm:
    - shard-rkl:          NOTRUN -> [DMESG-FAIL][109] ([i915#13338])
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-7/igt@i915_selftest@live@gt_pm.html

  * igt@i915_selftest@mock:
    - shard-snb:          NOTRUN -> [DMESG-WARN][110] ([i915#9311]) +1 other test dmesg-warn
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-snb7/igt@i915_selftest@mock.html

  * igt@i915_selftest@mock@memory_region:
    - shard-tglu:         NOTRUN -> [DMESG-WARN][111] ([i915#9311])
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-3/igt@i915_selftest@mock@memory_region.html

  * igt@i915_suspend@basic-s3-without-i915:
    - shard-tglu:         NOTRUN -> [INCOMPLETE][112] ([i915#7443])
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-9/igt@i915_suspend@basic-s3-without-i915.html

  * igt@i915_suspend@forcewake:
    - shard-glk:          NOTRUN -> [INCOMPLETE][113] ([i915#4817])
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-glk7/igt@i915_suspend@forcewake.html

  * igt@intel_hwmon@hwmon-read:
    - shard-rkl:          NOTRUN -> [SKIP][114] ([i915#7707])
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-4/igt@intel_hwmon@hwmon-read.html
    - shard-tglu-1:       NOTRUN -> [SKIP][115] ([i915#7707])
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@intel_hwmon@hwmon-read.html

  * igt@kms_addfb_basic@addfb25-framebuffer-vs-set-tiling:
    - shard-dg2:          NOTRUN -> [SKIP][116] ([i915#4212]) +1 other test skip
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-4/igt@kms_addfb_basic@addfb25-framebuffer-vs-set-tiling.html

  * igt@kms_addfb_basic@addfb25-y-tiled-small-legacy:
    - shard-dg2:          NOTRUN -> [SKIP][117] ([i915#5190])
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-2/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html
    - shard-mtlp:         NOTRUN -> [SKIP][118] ([i915#5190])
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-2/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html

  * igt@kms_addfb_basic@bo-too-small-due-to-tiling:
    - shard-dg1:          NOTRUN -> [SKIP][119] ([i915#4212]) +1 other test skip
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-14/igt@kms_addfb_basic@bo-too-small-due-to-tiling.html
    - shard-mtlp:         NOTRUN -> [SKIP][120] ([i915#4212])
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-1/igt@kms_addfb_basic@bo-too-small-due-to-tiling.html

  * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-edp-1-4-rc-ccs-cc:
    - shard-mtlp:         NOTRUN -> [SKIP][121] ([i915#8709]) +11 other tests skip
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-8/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-edp-1-4-rc-ccs-cc.html

  * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-hdmi-a-1-y-rc-ccs-cc:
    - shard-rkl:          NOTRUN -> [SKIP][122] ([i915#8709]) +3 other tests skip
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-4/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-hdmi-a-1-y-rc-ccs-cc.html

  * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-4-y-rc-ccs:
    - shard-dg1:          NOTRUN -> [SKIP][123] ([i915#8709]) +15 other tests skip
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-17/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-4-y-rc-ccs.html

  * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-dp-4-4-rc-ccs-cc:
    - shard-dg2:          NOTRUN -> [SKIP][124] ([i915#8709]) +23 other tests skip
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-10/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-dp-4-4-rc-ccs-cc.html

  * igt@kms_async_flips@crc@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [INCOMPLETE][125] ([i915#13287]) +1 other test incomplete
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-5/igt@kms_async_flips@crc@pipe-a-hdmi-a-2.html

  * igt@kms_async_flips@invalid-async-flip:
    - shard-dg2:          NOTRUN -> [SKIP][126] ([i915#12967] / [i915#6228])
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-11/igt@kms_async_flips@invalid-async-flip.html

  * igt@kms_atomic@plane-overlay-legacy:
    - shard-dg1:          [PASS][127] -> [DMESG-WARN][128] ([i915#4423]) +3 other tests dmesg-warn
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-dg1-17/igt@kms_atomic@plane-overlay-legacy.html
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-12/igt@kms_atomic@plane-overlay-legacy.html

  * igt@kms_atomic_transition@plane-all-modeset-transition:
    - shard-dg2:          [PASS][129] -> [FAIL][130] ([i915#5956])
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-dg2-7/igt@kms_atomic_transition@plane-all-modeset-transition.html
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-10/igt@kms_atomic_transition@plane-all-modeset-transition.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing:
    - shard-tglu:         NOTRUN -> [FAIL][131] ([i915#11808]) +1 other test fail
   [131]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-2/igt@kms_atomic_transition@plane-all-modeset-transition-fencing.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels:
    - shard-tglu-1:       NOTRUN -> [SKIP][132] ([i915#1769] / [i915#3555])
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html

  * igt@kms_atomic_transition@plane-all-modeset-transition@pipe-a-dp-4:
    - shard-dg2:          NOTRUN -> [FAIL][133] ([i915#5956])
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-10/igt@kms_atomic_transition@plane-all-modeset-transition@pipe-a-dp-4.html

  * igt@kms_big_fb@4-tiled-32bpp-rotate-0:
    - shard-tglu-1:       NOTRUN -> [SKIP][134] ([i915#5286]) +2 other tests skip
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_big_fb@4-tiled-32bpp-rotate-0.html

  * igt@kms_big_fb@4-tiled-32bpp-rotate-270:
    - shard-tglu:         NOTRUN -> [SKIP][135] ([i915#5286]) +5 other tests skip
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-5/igt@kms_big_fb@4-tiled-32bpp-rotate-270.html

  * igt@kms_big_fb@4-tiled-addfb:
    - shard-rkl:          NOTRUN -> [SKIP][136] ([i915#5286]) +5 other tests skip
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-7/igt@kms_big_fb@4-tiled-addfb.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
    - shard-dg1:          NOTRUN -> [SKIP][137] ([i915#4538] / [i915#5286]) +3 other tests skip
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-12/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip:
    - shard-mtlp:         [PASS][138] -> [DMESG-FAIL][139] ([i915#11627] / [i915#13314])
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-mtlp-6/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html
   [139]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-4/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html

  * igt@kms_big_fb@x-tiled-64bpp-rotate-270:
    - shard-rkl:          NOTRUN -> [SKIP][140] ([i915#3638]) +4 other tests skip
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-3/igt@kms_big_fb@x-tiled-64bpp-rotate-270.html

  * igt@kms_big_fb@y-tiled-64bpp-rotate-90:
    - shard-dg1:          NOTRUN -> [SKIP][141] ([i915#3638]) +2 other tests skip
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-18/igt@kms_big_fb@y-tiled-64bpp-rotate-90.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip:
    - shard-dg2:          NOTRUN -> [SKIP][142] ([i915#4538] / [i915#5190]) +7 other tests skip
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-7/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html

  * igt@kms_big_fb@yf-tiled-16bpp-rotate-270:
    - shard-dg1:          NOTRUN -> [SKIP][143] ([i915#4538]) +1 other test skip
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-12/igt@kms_big_fb@yf-tiled-16bpp-rotate-270.html

  * igt@kms_ccs@bad-aux-stride-4-tiled-mtl-mc-ccs@pipe-d-hdmi-a-1:
    - shard-tglu-1:       NOTRUN -> [SKIP][144] ([i915#6095]) +24 other tests skip
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_ccs@bad-aux-stride-4-tiled-mtl-mc-ccs@pipe-d-hdmi-a-1.html

  * igt@kms_ccs@bad-pixel-format-y-tiled-ccs@pipe-d-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][145] ([i915#10307] / [i915#10434] / [i915#6095]) +1 other test skip
   [145]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-4/igt@kms_ccs@bad-pixel-format-y-tiled-ccs@pipe-d-hdmi-a-1.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs:
    - shard-mtlp:         NOTRUN -> [SKIP][146] ([i915#12313])
   [146]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-4/igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-mtl-mc-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][147] ([i915#6095]) +86 other tests skip
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-3/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-mc-ccs.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs:
    - shard-dg1:          NOTRUN -> [SKIP][148] ([i915#12313])
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-14/igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs:
    - shard-tglu-1:       NOTRUN -> [SKIP][149] ([i915#12313])
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-bmg-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][150] ([i915#12313])
   [150]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-11/igt@kms_ccs@crc-primary-rotation-180-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-rc-ccs-cc:
    - shard-tglu:         NOTRUN -> [SKIP][151] ([i915#6095]) +34 other tests skip
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-8/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-rc-ccs-cc.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-rc-ccs@pipe-c-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][152] ([i915#6095]) +14 other tests skip
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-1/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-rc-ccs@pipe-c-edp-1.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][153] ([i915#12313]) +2 other tests skip
   [153]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-3/igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][154] ([i915#12805])
   [154]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-5/igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs.html
    - shard-tglu:         NOTRUN -> [SKIP][155] ([i915#12805])
   [155]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-4/igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc@pipe-d-hdmi-a-3:
    - shard-dg1:          NOTRUN -> [SKIP][156] ([i915#6095]) +198 other tests skip
   [156]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-13/igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc@pipe-d-hdmi-a-3.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc@pipe-b-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][157] ([i915#6095]) +21 other tests skip
   [157]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-3/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc@pipe-b-hdmi-a-3.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs:
    - shard-tglu:         NOTRUN -> [SKIP][158] ([i915#12313])
   [158]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-6/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][159] ([i915#10307] / [i915#6095]) +155 other tests skip
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-2/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-3.html

  * igt@kms_cdclk@mode-transition-all-outputs:
    - shard-tglu-1:       NOTRUN -> [SKIP][160] ([i915#3742]) +1 other test skip
   [160]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_cdclk@mode-transition-all-outputs.html

  * igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][161] ([i915#7213]) +3 other tests skip
   [161]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-5/igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-3.html

  * igt@kms_cdclk@plane-scaling:
    - shard-rkl:          NOTRUN -> [SKIP][162] ([i915#3742])
   [162]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-3/igt@kms_cdclk@plane-scaling.html
    - shard-dg1:          NOTRUN -> [SKIP][163] ([i915#3742])
   [163]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-18/igt@kms_cdclk@plane-scaling.html

  * igt@kms_cdclk@plane-scaling@pipe-b-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][164] ([i915#4087]) +4 other tests skip
   [164]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-3/igt@kms_cdclk@plane-scaling@pipe-b-hdmi-a-3.html

  * igt@kms_chamelium_audio@dp-audio:
    - shard-tglu:         NOTRUN -> [SKIP][165] ([i915#7828]) +5 other tests skip
   [165]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-8/igt@kms_chamelium_audio@dp-audio.html

  * igt@kms_chamelium_audio@hdmi-audio:
    - shard-tglu-1:       NOTRUN -> [SKIP][166] ([i915#7828]) +3 other tests skip
   [166]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_chamelium_audio@hdmi-audio.html

  * igt@kms_chamelium_color@degamma:
    - shard-dg2:          NOTRUN -> [SKIP][167] +9 other tests skip
   [167]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-7/igt@kms_chamelium_color@degamma.html

  * igt@kms_chamelium_frames@dp-crc-multiple:
    - shard-dg2:          NOTRUN -> [SKIP][168] ([i915#7828]) +7 other tests skip
   [168]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-4/igt@kms_chamelium_frames@dp-crc-multiple.html

  * igt@kms_chamelium_hpd@dp-hpd-enable-disable-mode:
    - shard-rkl:          NOTRUN -> [SKIP][169] ([i915#7828]) +9 other tests skip
   [169]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-4/igt@kms_chamelium_hpd@dp-hpd-enable-disable-mode.html

  * igt@kms_chamelium_hpd@hdmi-hpd-storm-disable:
    - shard-dg1:          NOTRUN -> [SKIP][170] ([i915#7828]) +7 other tests skip
   [170]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-12/igt@kms_chamelium_hpd@hdmi-hpd-storm-disable.html

  * igt@kms_content_protection@atomic-dpms:
    - shard-dg2:          NOTRUN -> [SKIP][171] ([i915#7118] / [i915#9424])
   [171]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-6/igt@kms_content_protection@atomic-dpms.html
    - shard-dg1:          NOTRUN -> [SKIP][172] ([i915#7116] / [i915#9424])
   [172]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-14/igt@kms_content_protection@atomic-dpms.html

  * igt@kms_content_protection@atomic@pipe-a-dp-4:
    - shard-dg2:          NOTRUN -> [TIMEOUT][173] ([i915#7173])
   [173]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-10/igt@kms_content_protection@atomic@pipe-a-dp-4.html

  * igt@kms_content_protection@legacy:
    - shard-tglu:         NOTRUN -> [SKIP][174] ([i915#6944] / [i915#7116] / [i915#7118] / [i915#9424])
   [174]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-8/igt@kms_content_protection@legacy.html
    - shard-rkl:          NOTRUN -> [SKIP][175] ([i915#7118] / [i915#9424])
   [175]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-2/igt@kms_content_protection@legacy.html

  * igt@kms_content_protection@lic-type-0:
    - shard-tglu:         NOTRUN -> [SKIP][176] ([i915#6944] / [i915#9424])
   [176]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-3/igt@kms_content_protection@lic-type-0.html

  * igt@kms_content_protection@lic-type-1:
    - shard-mtlp:         NOTRUN -> [SKIP][177] ([i915#6944] / [i915#9424])
   [177]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-3/igt@kms_content_protection@lic-type-1.html

  * igt@kms_content_protection@mei-interface:
    - shard-tglu-1:       NOTRUN -> [SKIP][178] ([i915#6944] / [i915#9424])
   [178]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_content_protection@mei-interface.html

  * igt@kms_content_protection@srm:
    - shard-dg2:          NOTRUN -> [SKIP][179] ([i915#7118])
   [179]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-1/igt@kms_content_protection@srm.html
    - shard-rkl:          NOTRUN -> [SKIP][180] ([i915#7118])
   [180]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-7/igt@kms_content_protection@srm.html
    - shard-dg1:          NOTRUN -> [SKIP][181] ([i915#7116])
   [181]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-17/igt@kms_content_protection@srm.html
    - shard-tglu:         NOTRUN -> [SKIP][182] ([i915#6944] / [i915#7116] / [i915#7118])
   [182]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-8/igt@kms_content_protection@srm.html
    - shard-mtlp:         NOTRUN -> [SKIP][183] ([i915#6944])
   [183]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-7/igt@kms_content_protection@srm.html

  * igt@kms_cursor_crc@cursor-offscreen-32x32:
    - shard-tglu-1:       NOTRUN -> [SKIP][184] ([i915#3555]) +1 other test skip
   [184]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_cursor_crc@cursor-offscreen-32x32.html
    - shard-dg1:          NOTRUN -> [SKIP][185] ([i915#3555]) +6 other tests skip
   [185]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-13/igt@kms_cursor_crc@cursor-offscreen-32x32.html

  * igt@kms_cursor_crc@cursor-offscreen-512x170:
    - shard-mtlp:         NOTRUN -> [SKIP][186] ([i915#13049])
   [186]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-3/igt@kms_cursor_crc@cursor-offscreen-512x170.html

  * igt@kms_cursor_crc@cursor-onscreen-512x170:
    - shard-dg2:          NOTRUN -> [SKIP][187] ([i915#13049])
   [187]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-1/igt@kms_cursor_crc@cursor-onscreen-512x170.html

  * igt@kms_cursor_crc@cursor-rapid-movement-32x10:
    - shard-rkl:          NOTRUN -> [SKIP][188] ([i915#3555]) +8 other tests skip
   [188]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-4/igt@kms_cursor_crc@cursor-rapid-movement-32x10.html

  * igt@kms_cursor_crc@cursor-rapid-movement-512x170:
    - shard-rkl:          NOTRUN -> [SKIP][189] ([i915#13049])
   [189]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-1/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html

  * igt@kms_cursor_crc@cursor-sliding-256x85:
    - shard-mtlp:         NOTRUN -> [SKIP][190] ([i915#8814])
   [190]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-8/igt@kms_cursor_crc@cursor-sliding-256x85.html

  * igt@kms_cursor_crc@cursor-sliding-32x32:
    - shard-mtlp:         NOTRUN -> [SKIP][191] ([i915#3555] / [i915#8814])
   [191]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-1/igt@kms_cursor_crc@cursor-sliding-32x32.html

  * igt@kms_cursor_crc@cursor-sliding-512x170:
    - shard-tglu:         NOTRUN -> [SKIP][192] ([i915#13049]) +1 other test skip
   [192]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-3/igt@kms_cursor_crc@cursor-sliding-512x170.html

  * igt@kms_cursor_crc@cursor-suspend:
    - shard-glk:          NOTRUN -> [INCOMPLETE][193] ([i915#12358] / [i915#7882])
   [193]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-glk1/igt@kms_cursor_crc@cursor-suspend.html

  * igt@kms_cursor_crc@cursor-suspend@pipe-a-hdmi-a-1:
    - shard-glk:          NOTRUN -> [INCOMPLETE][194] ([i915#12358])
   [194]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-glk1/igt@kms_cursor_crc@cursor-suspend@pipe-a-hdmi-a-1.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic:
    - shard-dg2:          NOTRUN -> [SKIP][195] ([i915#4103] / [i915#4213])
   [195]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-4/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html
    - shard-dg1:          NOTRUN -> [SKIP][196] ([i915#4103] / [i915#4213])
   [196]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-18/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
    - shard-rkl:          NOTRUN -> [SKIP][197] ([i915#4103]) +2 other tests skip
   [197]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-3/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html

  * igt@kms_cursor_legacy@cursorb-vs-flipa-toggle:
    - shard-dg2:          NOTRUN -> [SKIP][198] ([i915#13046] / [i915#5354])
   [198]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-1/igt@kms_cursor_legacy@cursorb-vs-flipa-toggle.html

  * igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size:
    - shard-mtlp:         NOTRUN -> [SKIP][199] ([i915#9809])
   [199]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-8/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size:
    - shard-snb:          NOTRUN -> [FAIL][200] ([i915#2346])
   [200]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-snb2/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html

  * igt@kms_cursor_legacy@flip-vs-cursor-toggle:
    - shard-mtlp:         [PASS][201] -> [FAIL][202] ([i915#2346])
   [201]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-mtlp-8/igt@kms_cursor_legacy@flip-vs-cursor-toggle.html
   [202]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-2/igt@kms_cursor_legacy@flip-vs-cursor-toggle.html

  * igt@kms_display_modes@mst-extended-mode-negative:
    - shard-rkl:          NOTRUN -> [SKIP][203] ([i915#8588])
   [203]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-1/igt@kms_display_modes@mst-extended-mode-negative.html

  * igt@kms_draw_crc@draw-method-mmap-gtt:
    - shard-dg1:          NOTRUN -> [SKIP][204] ([i915#8812])
   [204]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-12/igt@kms_draw_crc@draw-method-mmap-gtt.html
    - shard-mtlp:         NOTRUN -> [SKIP][205] ([i915#3555] / [i915#8812])
   [205]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-6/igt@kms_draw_crc@draw-method-mmap-gtt.html
    - shard-dg2:          NOTRUN -> [SKIP][206] ([i915#8812])
   [206]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-5/igt@kms_draw_crc@draw-method-mmap-gtt.html

  * igt@kms_dsc@dsc-basic:
    - shard-rkl:          NOTRUN -> [SKIP][207] ([i915#3555] / [i915#3840]) +1 other test skip
   [207]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-3/igt@kms_dsc@dsc-basic.html
    - shard-dg1:          NOTRUN -> [SKIP][208] ([i915#3555] / [i915#3840]) +1 other test skip
   [208]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-14/igt@kms_dsc@dsc-basic.html

  * igt@kms_dsc@dsc-fractional-bpp:
    - shard-dg2:          NOTRUN -> [SKIP][209] ([i915#3840] / [i915#9688])
   [209]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-10/igt@kms_dsc@dsc-fractional-bpp.html
    - shard-rkl:          NOTRUN -> [SKIP][210] ([i915#3840])
   [210]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-5/igt@kms_dsc@dsc-fractional-bpp.html
    - shard-dg1:          NOTRUN -> [SKIP][211] ([i915#3840])
   [211]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-14/igt@kms_dsc@dsc-fractional-bpp.html

  * igt@kms_dsc@dsc-fractional-bpp-with-bpc:
    - shard-tglu:         NOTRUN -> [SKIP][212] ([i915#3840])
   [212]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-6/igt@kms_dsc@dsc-fractional-bpp-with-bpc.html

  * igt@kms_dsc@dsc-with-bpc:
    - shard-dg2:          NOTRUN -> [SKIP][213] ([i915#3555] / [i915#3840])
   [213]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-11/igt@kms_dsc@dsc-with-bpc.html

  * igt@kms_dsc@dsc-with-output-formats-with-bpc:
    - shard-tglu:         NOTRUN -> [SKIP][214] ([i915#3840] / [i915#9053])
   [214]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-4/igt@kms_dsc@dsc-with-output-formats-with-bpc.html

  * igt@kms_fbcon_fbt@psr:
    - shard-rkl:          NOTRUN -> [SKIP][215] ([i915#3955])
   [215]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-4/igt@kms_fbcon_fbt@psr.html
    - shard-tglu:         NOTRUN -> [SKIP][216] ([i915#3469])
   [216]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-4/igt@kms_fbcon_fbt@psr.html

  * igt@kms_feature_discovery@display-4x:
    - shard-rkl:          NOTRUN -> [SKIP][217] ([i915#1839])
   [217]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-2/igt@kms_feature_discovery@display-4x.html

  * igt@kms_feature_discovery@dp-mst:
    - shard-tglu:         NOTRUN -> [SKIP][218] ([i915#9337])
   [218]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-5/igt@kms_feature_discovery@dp-mst.html

  * igt@kms_feature_discovery@psr1:
    - shard-dg2:          NOTRUN -> [SKIP][219] ([i915#658])
   [219]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-10/igt@kms_feature_discovery@psr1.html
    - shard-rkl:          NOTRUN -> [SKIP][220] ([i915#658])
   [220]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-5/igt@kms_feature_discovery@psr1.html
    - shard-dg1:          NOTRUN -> [SKIP][221] ([i915#658])
   [221]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-14/igt@kms_feature_discovery@psr1.html

  * igt@kms_feature_discovery@psr2:
    - shard-tglu-1:       NOTRUN -> [SKIP][222] ([i915#658])
   [222]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_feature_discovery@psr2.html

  * igt@kms_flip@2x-blocking-absolute-wf_vblank:
    - shard-mtlp:         NOTRUN -> [SKIP][223] ([i915#3637]) +1 other test skip
   [223]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-6/igt@kms_flip@2x-blocking-absolute-wf_vblank.html

  * igt@kms_flip@2x-flip-vs-absolute-wf_vblank:
    - shard-tglu:         NOTRUN -> [SKIP][224] ([i915#3637]) +5 other tests skip
   [224]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-5/igt@kms_flip@2x-flip-vs-absolute-wf_vblank.html

  * igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible:
    - shard-tglu-1:       NOTRUN -> [SKIP][225] ([i915#3637]) +2 other tests skip
   [225]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible.html

  * igt@kms_flip@2x-flip-vs-dpms:
    - shard-rkl:          NOTRUN -> [SKIP][226] ([i915#9934]) +9 other tests skip
   [226]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-5/igt@kms_flip@2x-flip-vs-dpms.html
    - shard-dg1:          NOTRUN -> [SKIP][227] ([i915#9934]) +7 other tests skip
   [227]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-18/igt@kms_flip@2x-flip-vs-dpms.html

  * igt@kms_flip@2x-flip-vs-fences:
    - shard-dg1:          NOTRUN -> [SKIP][228] ([i915#8381])
   [228]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-17/igt@kms_flip@2x-flip-vs-fences.html
    - shard-mtlp:         NOTRUN -> [SKIP][229] ([i915#8381])
   [229]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-6/igt@kms_flip@2x-flip-vs-fences.html

  * igt@kms_flip@2x-flip-vs-modeset-vs-hang:
    - shard-dg2:          NOTRUN -> [SKIP][230] ([i915#9934]) +9 other tests skip
   [230]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-11/igt@kms_flip@2x-flip-vs-modeset-vs-hang.html

  * igt@kms_flip@2x-plain-flip-fb-recreate:
    - shard-glk:          NOTRUN -> [FAIL][231] ([i915#11989]) +1 other test fail
   [231]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-glk4/igt@kms_flip@2x-plain-flip-fb-recreate.html

  * igt@kms_flip@2x-plain-flip-fb-recreate-interruptible:
    - shard-snb:          [PASS][232] -> [FAIL][233] ([i915#11989]) +1 other test fail
   [232]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-snb7/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible.html
   [233]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-snb4/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible.html

  * igt@kms_flip@2x-plain-flip-ts-check-interruptible@ab-vga1-hdmi-a1:
    - shard-snb:          NOTRUN -> [FAIL][234] ([i915#10826]) +1 other test fail
   [234]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-snb1/igt@kms_flip@2x-plain-flip-ts-check-interruptible@ab-vga1-hdmi-a1.html

  * igt@kms_flip@absolute-wf_vblank-interruptible:
    - shard-rkl:          [PASS][235] -> [DMESG-WARN][236] ([i915#12917] / [i915#12964]) +1 other test dmesg-warn
   [235]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-rkl-7/igt@kms_flip@absolute-wf_vblank-interruptible.html
   [236]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-5/igt@kms_flip@absolute-wf_vblank-interruptible.html

  * igt@kms_flip@flip-vs-expired-vblank@c-hdmi-a1:
    - shard-glk:          NOTRUN -> [FAIL][237] ([i915#13027]) +1 other test fail
   [237]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-glk9/igt@kms_flip@flip-vs-expired-vblank@c-hdmi-a1.html

  * igt@kms_flip@flip-vs-fences-interruptible:
    - shard-dg2:          NOTRUN -> [SKIP][238] ([i915#8381]) +1 other test skip
   [238]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-10/igt@kms_flip@flip-vs-fences-interruptible.html

  * igt@kms_flip@flip-vs-fences@a-hdmi-a1:
    - shard-rkl:          NOTRUN -> [DMESG-WARN][239] ([i915#12964]) +28 other tests dmesg-warn
   [239]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-7/igt@kms_flip@flip-vs-fences@a-hdmi-a1.html

  * igt@kms_flip@flip-vs-suspend-interruptible:
    - shard-glk:          NOTRUN -> [INCOMPLETE][240] ([i915#12745] / [i915#1982] / [i915#4839])
   [240]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-glk5/igt@kms_flip@flip-vs-suspend-interruptible.html

  * igt@kms_flip@flip-vs-suspend-interruptible@a-hdmi-a1:
    - shard-glk:          NOTRUN -> [INCOMPLETE][241] ([i915#12745] / [i915#1982])
   [241]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-glk5/igt@kms_flip@flip-vs-suspend-interruptible@a-hdmi-a1.html

  * igt@kms_flip@plain-flip-fb-recreate-interruptible:
    - shard-tglu:         [PASS][242] -> [FAIL][243] ([i915#11989]) +2 other tests fail
   [242]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-tglu-5/igt@kms_flip@plain-flip-fb-recreate-interruptible.html
   [243]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-8/igt@kms_flip@plain-flip-fb-recreate-interruptible.html

  * igt@kms_flip@plain-flip-fb-recreate-interruptible@a-hdmi-a3:
    - shard-dg2:          NOTRUN -> [FAIL][244] ([i915#11989]) +3 other tests fail
   [244]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-1/igt@kms_flip@plain-flip-fb-recreate-interruptible@a-hdmi-a3.html

  * igt@kms_flip@wf_vblank-ts-check-interruptible:
    - shard-dg2:          [PASS][245] -> [FAIL][246] ([i915#11989]) +1 other test fail
   [245]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-dg2-2/igt@kms_flip@wf_vblank-ts-check-interruptible.html
   [246]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-6/igt@kms_flip@wf_vblank-ts-check-interruptible.html

  * igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-downscaling:
    - shard-mtlp:         NOTRUN -> [SKIP][247] ([i915#3555] / [i915#8810] / [i915#8813])
   [247]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-4/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-downscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-downscaling@pipe-a-default-mode:
    - shard-mtlp:         NOTRUN -> [SKIP][248] ([i915#8810])
   [248]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-4/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-downscaling@pipe-a-default-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-downscaling@pipe-a-valid-mode:
    - shard-rkl:          NOTRUN -> [SKIP][249] ([i915#2672]) +4 other tests skip
   [249]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-3/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-downscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling@pipe-a-valid-mode:
    - shard-dg1:          NOTRUN -> [SKIP][250] ([i915#2587] / [i915#2672]) +3 other tests skip
   [250]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-13/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-downscaling:
    - shard-dg2:          NOTRUN -> [SKIP][251] ([i915#2672] / [i915#3555]) +3 other tests skip
   [251]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-7/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-downscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-downscaling@pipe-a-valid-mode:
    - shard-dg2:          NOTRUN -> [SKIP][252] ([i915#2672]) +4 other tests skip
   [252]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-7/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-downscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling:
    - shard-dg1:          NOTRUN -> [SKIP][253] ([i915#2587] / [i915#2672] / [i915#3555]) +1 other test skip
   [253]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-18/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-64bpp-ytile-downscaling@pipe-a-valid-mode:
    - shard-rkl:          [PASS][254] -> [DMESG-WARN][255] ([i915#12964]) +27 other tests dmesg-warn
   [254]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-rkl-3/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-64bpp-ytile-downscaling@pipe-a-valid-mode.html
   [255]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-1/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-64bpp-ytile-downscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling:
    - shard-dg2:          NOTRUN -> [SKIP][256] ([i915#2672] / [i915#3555] / [i915#5190])
   [256]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-6/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling:
    - shard-rkl:          NOTRUN -> [SKIP][257] ([i915#2672] / [i915#3555]) +4 other tests skip
   [257]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-2/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling@pipe-a-valid-mode:
    - shard-tglu:         NOTRUN -> [SKIP][258] ([i915#2587] / [i915#2672]) +1 other test skip
   [258]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-5/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling:
    - shard-tglu-1:       NOTRUN -> [SKIP][259] ([i915#2672] / [i915#3555])
   [259]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling@pipe-a-valid-mode:
    - shard-tglu-1:       NOTRUN -> [SKIP][260] ([i915#2587] / [i915#2672])
   [260]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling:
    - shard-dg1:          NOTRUN -> [SKIP][261] ([i915#2672] / [i915#3555]) +1 other test skip
   [261]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-14/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling:
    - shard-tglu:         NOTRUN -> [SKIP][262] ([i915#2672] / [i915#3555]) +1 other test skip
   [262]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-10/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling.html

  * igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-mmap-cpu:
    - shard-dg2:          [PASS][263] -> [FAIL][264] ([i915#6880]) +2 other tests fail
   [263]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-dg2-3/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-mmap-cpu.html
   [264]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-3/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-indfb-plflip-blt:
    - shard-dg2:          NOTRUN -> [SKIP][265] ([i915#5354]) +29 other tests skip
   [265]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-indfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-render:
    - shard-mtlp:         NOTRUN -> [SKIP][266] ([i915#1825]) +9 other tests skip
   [266]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-8/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-msflip-blt:
    - shard-snb:          [PASS][267] -> [SKIP][268] +4 other tests skip
   [267]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-snb1/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-msflip-blt.html
   [268]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-snb7/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-pwrite:
    - shard-tglu-1:       NOTRUN -> [SKIP][269] +41 other tests skip
   [269]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-pwrite.html
    - shard-dg1:          NOTRUN -> [SKIP][270] +28 other tests skip
   [270]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-13/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-fullscreen:
    - shard-tglu:         NOTRUN -> [SKIP][271] +56 other tests skip
   [271]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-2/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-fullscreen.html

  * igt@kms_frontbuffer_tracking@pipe-fbc-rte:
    - shard-tglu-1:       NOTRUN -> [SKIP][272] ([i915#9766])
   [272]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_frontbuffer_tracking@pipe-fbc-rte.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-indfb-plflip-blt:
    - shard-dg1:          NOTRUN -> [SKIP][273] ([i915#3458]) +9 other tests skip
   [273]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-18/igt@kms_frontbuffer_tracking@psr-1p-primscrn-indfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-pwrite:
    - shard-rkl:          NOTRUN -> [SKIP][274] ([i915#3023]) +37 other tests skip
   [274]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-2/igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-indfb-msflip-blt:
    - shard-rkl:          NOTRUN -> [SKIP][275] ([i915#1825]) +61 other tests skip
   [275]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-7/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-indfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-mmap-gtt:
    - shard-mtlp:         NOTRUN -> [SKIP][276] ([i915#8708]) +3 other tests skip
   [276]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-6/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][277] ([i915#8708]) +20 other tests skip
   [277]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-5/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@psr-rgb101010-draw-render:
    - shard-dg2:          NOTRUN -> [SKIP][278] ([i915#3458]) +15 other tests skip
   [278]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-8/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-render.html

  * igt@kms_frontbuffer_tracking@psr-rgb565-draw-mmap-wc:
    - shard-dg1:          NOTRUN -> [SKIP][279] ([i915#8708]) +19 other tests skip
   [279]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-18/igt@kms_frontbuffer_tracking@psr-rgb565-draw-mmap-wc.html

  * igt@kms_getfb@getfb-reject-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][280] ([i915#6118])
   [280]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-11/igt@kms_getfb@getfb-reject-ccs.html

  * igt@kms_hdr@bpc-switch:
    - shard-tglu-1:       NOTRUN -> [SKIP][281] ([i915#3555] / [i915#8228])
   [281]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_hdr@bpc-switch.html

  * igt@kms_hdr@brightness-with-hdr:
    - shard-dg2:          NOTRUN -> [SKIP][282] ([i915#12713])
   [282]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-6/igt@kms_hdr@brightness-with-hdr.html
    - shard-dg1:          NOTRUN -> [SKIP][283] ([i915#1187] / [i915#12713])
   [283]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-13/igt@kms_hdr@brightness-with-hdr.html

  * igt@kms_hdr@static-toggle:
    - shard-dg2:          NOTRUN -> [SKIP][284] ([i915#3555] / [i915#8228]) +1 other test skip
   [284]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-2/igt@kms_hdr@static-toggle.html
    - shard-tglu:         NOTRUN -> [SKIP][285] ([i915#3555] / [i915#8228])
   [285]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-3/igt@kms_hdr@static-toggle.html

  * igt@kms_joiner@basic-big-joiner:
    - shard-mtlp:         NOTRUN -> [SKIP][286] ([i915#10656])
   [286]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-8/igt@kms_joiner@basic-big-joiner.html

  * igt@kms_joiner@basic-force-big-joiner:
    - shard-rkl:          NOTRUN -> [SKIP][287] ([i915#12388])
   [287]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-2/igt@kms_joiner@basic-force-big-joiner.html

  * igt@kms_joiner@invalid-modeset-big-joiner:
    - shard-tglu:         NOTRUN -> [SKIP][288] ([i915#10656])
   [288]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-6/igt@kms_joiner@invalid-modeset-big-joiner.html
    - shard-dg2:          NOTRUN -> [SKIP][289] ([i915#10656])
   [289]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-6/igt@kms_joiner@invalid-modeset-big-joiner.html

  * igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
    - shard-rkl:          NOTRUN -> [SKIP][290] ([i915#4070] / [i915#4816])
   [290]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-1/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html

  * igt@kms_plane@plane-panning-bottom-right-suspend@pipe-a:
    - shard-rkl:          NOTRUN -> [DMESG-FAIL][291] ([i915#12964]) +1 other test dmesg-fail
   [291]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-2/igt@kms_plane@plane-panning-bottom-right-suspend@pipe-a.html

  * igt@kms_plane_lowres@tiling-yf:
    - shard-dg2:          NOTRUN -> [SKIP][292] ([i915#3555] / [i915#8821])
   [292]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-10/igt@kms_plane_lowres@tiling-yf.html

  * igt@kms_plane_multiple@tiling-yf:
    - shard-dg2:          NOTRUN -> [SKIP][293] ([i915#3555] / [i915#8806])
   [293]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-11/igt@kms_plane_multiple@tiling-yf.html

  * igt@kms_plane_scaling@plane-upscale-20x20-with-rotation@pipe-a:
    - shard-rkl:          NOTRUN -> [SKIP][294] ([i915#12247]) +10 other tests skip
   [294]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-2/igt@kms_plane_scaling@plane-upscale-20x20-with-rotation@pipe-a.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25:
    - shard-tglu:         NOTRUN -> [SKIP][295] ([i915#12247] / [i915#6953])
   [295]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-5/igt@kms_plane_scaling@planes-downscale-factor-0-25.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-b:
    - shard-tglu:         NOTRUN -> [SKIP][296] ([i915#12247]) +3 other tests skip
   [296]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-5/igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-b.html

  * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25:
    - shard-tglu-1:       NOTRUN -> [SKIP][297] ([i915#12247] / [i915#3555])
   [297]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25.html

  * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-a:
    - shard-tglu-1:       NOTRUN -> [SKIP][298] ([i915#12247]) +3 other tests skip
   [298]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-a.html

  * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-5:
    - shard-mtlp:         NOTRUN -> [SKIP][299] ([i915#12247] / [i915#3555] / [i915#6953]) +1 other test skip
   [299]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-4/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-5.html

  * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-5@pipe-a:
    - shard-mtlp:         NOTRUN -> [SKIP][300] ([i915#12247]) +7 other tests skip
   [300]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-4/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-5@pipe-a.html

  * igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25:
    - shard-dg2:          NOTRUN -> [SKIP][301] ([i915#12247] / [i915#6953] / [i915#9423])
   [301]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-3/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25.html
    - shard-rkl:          NOTRUN -> [SKIP][302] ([i915#12247] / [i915#6953])
   [302]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-2/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25.html
    - shard-dg1:          NOTRUN -> [SKIP][303] ([i915#12247] / [i915#6953])
   [303]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-18/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25.html

  * igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-b:
    - shard-dg1:          NOTRUN -> [SKIP][304] ([i915#12247]) +8 other tests skip
   [304]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-18/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-b.html

  * igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-d:
    - shard-dg2:          NOTRUN -> [SKIP][305] ([i915#12247]) +3 other tests skip
   [305]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-3/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-d.html

  * igt@kms_pm_backlight@bad-brightness:
    - shard-rkl:          NOTRUN -> [SKIP][306] ([i915#5354])
   [306]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-1/igt@kms_pm_backlight@bad-brightness.html
    - shard-dg1:          NOTRUN -> [SKIP][307] ([i915#5354])
   [307]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-18/igt@kms_pm_backlight@bad-brightness.html

  * igt@kms_pm_backlight@brightness-with-dpms:
    - shard-rkl:          NOTRUN -> [SKIP][308] ([i915#12343])
   [308]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-7/igt@kms_pm_backlight@brightness-with-dpms.html
    - shard-dg1:          NOTRUN -> [SKIP][309] ([i915#12343])
   [309]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-17/igt@kms_pm_backlight@brightness-with-dpms.html
    - shard-dg2:          NOTRUN -> [SKIP][310] ([i915#12343])
   [310]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-1/igt@kms_pm_backlight@brightness-with-dpms.html

  * igt@kms_pm_dc@dc3co-vpb-simulation:
    - shard-dg2:          NOTRUN -> [SKIP][311] ([i915#9685]) +1 other test skip
   [311]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-10/igt@kms_pm_dc@dc3co-vpb-simulation.html
    - shard-tglu:         NOTRUN -> [SKIP][312] ([i915#9685])
   [312]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-4/igt@kms_pm_dc@dc3co-vpb-simulation.html

  * igt@kms_pm_dc@dc5-retention-flops:
    - shard-tglu:         NOTRUN -> [SKIP][313] ([i915#3828])
   [313]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-10/igt@kms_pm_dc@dc5-retention-flops.html

  * igt@kms_pm_dc@dc6-psr:
    - shard-rkl:          NOTRUN -> [SKIP][314] ([i915#9685])
   [314]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-4/igt@kms_pm_dc@dc6-psr.html

  * igt@kms_pm_dc@dc9-dpms:
    - shard-tglu:         [PASS][315] -> [SKIP][316] ([i915#4281])
   [315]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-tglu-5/igt@kms_pm_dc@dc9-dpms.html
   [316]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-5/igt@kms_pm_dc@dc9-dpms.html

  * igt@kms_pm_lpsp@kms-lpsp:
    - shard-dg2:          [PASS][317] -> [SKIP][318] ([i915#9340])
   [317]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-dg2-8/igt@kms_pm_lpsp@kms-lpsp.html
   [318]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-10/igt@kms_pm_lpsp@kms-lpsp.html

  * igt@kms_pm_rpm@basic-rte:
    - shard-rkl:          [PASS][319] -> [DMESG-FAIL][320] ([i915#12964])
   [319]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-rkl-7/igt@kms_pm_rpm@basic-rte.html
   [320]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-4/igt@kms_pm_rpm@basic-rte.html

  * igt@kms_pm_rpm@dpms-mode-unset-lpsp:
    - shard-dg2:          NOTRUN -> [SKIP][321] ([i915#9519])
   [321]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-2/igt@kms_pm_rpm@dpms-mode-unset-lpsp.html

  * igt@kms_pm_rpm@fences:
    - shard-mtlp:         NOTRUN -> [SKIP][322] ([i915#4077]) +2 other tests skip
   [322]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-2/igt@kms_pm_rpm@fences.html

  * igt@kms_pm_rpm@modeset-lpsp-stress:
    - shard-rkl:          NOTRUN -> [SKIP][323] ([i915#9519]) +1 other test skip
   [323]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-5/igt@kms_pm_rpm@modeset-lpsp-stress.html

  * igt@kms_pm_rpm@modeset-non-lpsp-stress:
    - shard-dg2:          [PASS][324] -> [SKIP][325] ([i915#9519])
   [324]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-dg2-7/igt@kms_pm_rpm@modeset-non-lpsp-stress.html
   [325]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-4/igt@kms_pm_rpm@modeset-non-lpsp-stress.html

  * igt@kms_prime@basic-crc-hybrid:
    - shard-rkl:          NOTRUN -> [SKIP][326] ([i915#6524])
   [326]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-2/igt@kms_prime@basic-crc-hybrid.html
    - shard-mtlp:         NOTRUN -> [SKIP][327] ([i915#6524])
   [327]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-4/igt@kms_prime@basic-crc-hybrid.html

  * igt@kms_prime@basic-modeset-hybrid:
    - shard-tglu:         NOTRUN -> [SKIP][328] ([i915#6524])
   [328]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-6/igt@kms_prime@basic-modeset-hybrid.html
    - shard-dg2:          NOTRUN -> [SKIP][329] ([i915#6524] / [i915#6805])
   [329]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-6/igt@kms_prime@basic-modeset-hybrid.html

  * igt@kms_psr2_sf@fbc-pr-overlay-plane-update-sf-dmg-area:
    - shard-tglu:         NOTRUN -> [SKIP][330] ([i915#11520]) +3 other tests skip
   [330]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-8/igt@kms_psr2_sf@fbc-pr-overlay-plane-update-sf-dmg-area.html
    - shard-mtlp:         NOTRUN -> [SKIP][331] ([i915#12316]) +2 other tests skip
   [331]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-4/igt@kms_psr2_sf@fbc-pr-overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf:
    - shard-tglu-1:       NOTRUN -> [SKIP][332] ([i915#11520]) +4 other tests skip
   [332]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf.html

  * igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf@pipe-a-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][333] ([i915#9808])
   [333]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-6/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf@pipe-a-edp-1.html

  * igt@kms_psr2_sf@fbc-psr2-primary-plane-update-sf-dmg-area:
    - shard-glk:          NOTRUN -> [SKIP][334] ([i915#11520]) +13 other tests skip
   [334]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-glk6/igt@kms_psr2_sf@fbc-psr2-primary-plane-update-sf-dmg-area.html

  * igt@kms_psr2_sf@pr-overlay-plane-update-sf-dmg-area:
    - shard-rkl:          NOTRUN -> [SKIP][335] ([i915#11520]) +10 other tests skip
   [335]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-1/igt@kms_psr2_sf@pr-overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-fully-sf:
    - shard-snb:          NOTRUN -> [SKIP][336] ([i915#11520]) +17 other tests skip
   [336]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-snb7/igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area:
    - shard-dg2:          NOTRUN -> [SKIP][337] ([i915#11520]) +10 other tests skip
   [337]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-10/igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area.html
    - shard-dg1:          NOTRUN -> [SKIP][338] ([i915#11520]) +6 other tests skip
   [338]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-13/igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area.html

  * igt@kms_psr2_su@page_flip-nv12:
    - shard-tglu-1:       NOTRUN -> [SKIP][339] ([i915#9683])
   [339]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_psr2_su@page_flip-nv12.html

  * igt@kms_psr2_su@page_flip-p010:
    - shard-tglu:         NOTRUN -> [SKIP][340] ([i915#9683])
   [340]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-5/igt@kms_psr2_su@page_flip-p010.html

  * igt@kms_psr@fbc-pr-sprite-render:
    - shard-tglu-1:       NOTRUN -> [SKIP][341] ([i915#9732]) +7 other tests skip
   [341]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_psr@fbc-pr-sprite-render.html

  * igt@kms_psr@fbc-psr2-cursor-mmap-gtt:
    - shard-glk:          NOTRUN -> [SKIP][342] +427 other tests skip
   [342]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-glk8/igt@kms_psr@fbc-psr2-cursor-mmap-gtt.html

  * igt@kms_psr@fbc-psr2-cursor-plane-onoff:
    - shard-mtlp:         NOTRUN -> [SKIP][343] ([i915#9688]) +8 other tests skip
   [343]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-2/igt@kms_psr@fbc-psr2-cursor-plane-onoff.html

  * igt@kms_psr@psr-cursor-render:
    - shard-dg2:          NOTRUN -> [SKIP][344] ([i915#1072] / [i915#9732]) +22 other tests skip
   [344]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-2/igt@kms_psr@psr-cursor-render.html

  * igt@kms_psr@psr-sprite-plane-move:
    - shard-rkl:          NOTRUN -> [SKIP][345] ([i915#1072] / [i915#9732]) +25 other tests skip
   [345]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-4/igt@kms_psr@psr-sprite-plane-move.html

  * igt@kms_psr@psr2-cursor-plane-onoff:
    - shard-tglu:         NOTRUN -> [SKIP][346] ([i915#9732]) +18 other tests skip
   [346]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-2/igt@kms_psr@psr2-cursor-plane-onoff.html

  * igt@kms_psr@psr2-sprite-blt:
    - shard-dg1:          NOTRUN -> [SKIP][347] ([i915#1072] / [i915#9732]) +14 other tests skip
   [347]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-14/igt@kms_psr@psr2-sprite-blt.html

  * igt@kms_psr_stress_test@invalidate-primary-flip-overlay:
    - shard-tglu-1:       NOTRUN -> [SKIP][348] ([i915#9685]) +2 other tests skip
   [348]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html

  * igt@kms_rotation_crc@bad-tiling:
    - shard-mtlp:         NOTRUN -> [SKIP][349] ([i915#12755]) +1 other test skip
   [349]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-2/igt@kms_rotation_crc@bad-tiling.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
    - shard-tglu:         NOTRUN -> [SKIP][350] ([i915#5289])
   [350]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-9/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180:
    - shard-tglu-1:       NOTRUN -> [SKIP][351] ([i915#5289])
   [351]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-1/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90:
    - shard-rkl:          NOTRUN -> [SKIP][352] ([i915#5289]) +1 other test skip
   [352]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-5/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90.html
    - shard-dg1:          NOTRUN -> [SKIP][353] ([i915#5289])
   [353]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-18/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90.html

  * igt@kms_rotation_crc@sprite-rotation-90-pos-100-0:
    - shard-dg2:          NOTRUN -> [SKIP][354] ([i915#12755]) +1 other test skip
   [354]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-5/igt@kms_rotation_crc@sprite-rotation-90-pos-100-0.html

  * igt@kms_selftest@drm_framebuffer:
    - shard-glk:          NOTRUN -> [ABORT][355] ([i915#13179]) +1 other test abort
   [355]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-glk5/igt@kms_selftest@drm_framebuffer.html

  * igt@kms_setmode@basic:
    - shard-snb:          NOTRUN -> [FAIL][356] ([i915#5465]) +2 other tests fail
   [356]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-snb7/igt@kms_setmode@basic.html
    - shard-tglu:         [PASS][357] -> [FAIL][358] ([i915#5465]) +2 other tests fail
   [357]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-tglu-2/igt@kms_setmode@basic.html
   [358]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-8/igt@kms_setmode@basic.html

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-tglu:         NOTRUN -> [SKIP][359] ([i915#8623])
   [359]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-5/igt@kms_tiled_display@basic-test-pattern.html
    - shard-dg2:          NOTRUN -> [SKIP][360] ([i915#8623])
   [360]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-10/igt@kms_tiled_display@basic-test-pattern.html

  * igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-hdmi-a-1:
    - shard-glk:          [PASS][361] -> [INCOMPLETE][362] ([i915#12276])
   [361]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-glk6/igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-hdmi-a-1.html
   [362]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-glk8/igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-hdmi-a-1.html

  * igt@kms_vrr@flip-basic-fastset:
    - shard-tglu:         NOTRUN -> [SKIP][363] ([i915#9906])
   [363]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-6/igt@kms_vrr@flip-basic-fastset.html

  * igt@kms_vrr@flipline:
    - shard-dg2:          NOTRUN -> [SKIP][364] ([i915#3555]) +3 other tests skip
   [364]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-11/igt@kms_vrr@flipline.html
    - shard-tglu:         NOTRUN -> [SKIP][365] ([i915#3555])
   [365]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-9/igt@kms_vrr@flipline.html

  * igt@kms_vrr@lobf:
    - shard-rkl:          NOTRUN -> [SKIP][366] ([i915#11920])
   [366]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-1/igt@kms_vrr@lobf.html
    - shard-dg1:          NOTRUN -> [SKIP][367] ([i915#11920])
   [367]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-14/igt@kms_vrr@lobf.html

  * igt@kms_vrr@seamless-rr-switch-vrr:
    - shard-rkl:          NOTRUN -> [SKIP][368] ([i915#9906])
   [368]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-5/igt@kms_vrr@seamless-rr-switch-vrr.html

  * igt@kms_writeback@writeback-check-output-xrgb2101010:
    - shard-dg2:          NOTRUN -> [SKIP][369] ([i915#2437] / [i915#9412])
   [369]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-2/igt@kms_writeback@writeback-check-output-xrgb2101010.html
    - shard-rkl:          NOTRUN -> [SKIP][370] ([i915#2437] / [i915#9412])
   [370]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-3/igt@kms_writeback@writeback-check-output-xrgb2101010.html

  * igt@kms_writeback@writeback-fb-id:
    - shard-glk:          NOTRUN -> [SKIP][371] ([i915#2437]) +2 other tests skip
   [371]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-glk4/igt@kms_writeback@writeback-fb-id.html

  * igt@kms_writeback@writeback-invalid-parameters:
    - shard-rkl:          NOTRUN -> [SKIP][372] ([i915#2437])
   [372]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-2/igt@kms_writeback@writeback-invalid-parameters.html

  * igt@perf@gen8-unprivileged-single-ctx-counters:
    - shard-mtlp:         NOTRUN -> [SKIP][373] +6 other tests skip
   [373]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-6/igt@perf@gen8-unprivileged-single-ctx-counters.html

  * igt@perf@per-context-mode-unprivileged:
    - shard-rkl:          NOTRUN -> [SKIP][374] ([i915#2435])
   [374]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-2/igt@perf@per-context-mode-unprivileged.html
    - shard-dg1:          NOTRUN -> [SKIP][375] ([i915#2433])
   [375]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-18/igt@perf@per-context-mode-unprivileged.html

  * igt@perf_pmu@busy-accuracy-98:
    - shard-snb:          NOTRUN -> [SKIP][376] +574 other tests skip
   [376]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-snb2/igt@perf_pmu@busy-accuracy-98.html

  * igt@perf_pmu@busy-double-start:
    - shard-mtlp:         NOTRUN -> [FAIL][377] ([i915#4349]) +2 other tests fail
   [377]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-3/igt@perf_pmu@busy-double-start.html

  * igt@perf_pmu@busy@vecs1:
    - shard-dg2:          [PASS][378] -> [FAIL][379] ([i915#4349]) +7 other tests fail
   [378]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-dg2-2/igt@perf_pmu@busy@vecs1.html
   [379]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-10/igt@perf_pmu@busy@vecs1.html

  * igt@perf_pmu@cpu-hotplug:
    - shard-rkl:          NOTRUN -> [SKIP][380] ([i915#8850])
   [380]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-4/igt@perf_pmu@cpu-hotplug.html

  * igt@perf_pmu@frequency@gt0:
    - shard-dg1:          NOTRUN -> [FAIL][381] ([i915#12549] / [i915#6806]) +1 other test fail
   [381]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-12/igt@perf_pmu@frequency@gt0.html

  * igt@perf_pmu@rc6-suspend:
    - shard-glk:          NOTRUN -> [INCOMPLETE][382] ([i915#13341])
   [382]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-glk4/igt@perf_pmu@rc6-suspend.html

  * igt@prime_vgem@basic-fence-read:
    - shard-rkl:          NOTRUN -> [SKIP][383] ([i915#3291] / [i915#3708])
   [383]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-1/igt@prime_vgem@basic-fence-read.html
    - shard-mtlp:         NOTRUN -> [SKIP][384] ([i915#3708])
   [384]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-4/igt@prime_vgem@basic-fence-read.html

  * igt@prime_vgem@basic-gtt:
    - shard-mtlp:         NOTRUN -> [SKIP][385] ([i915#3708] / [i915#4077])
   [385]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-1/igt@prime_vgem@basic-gtt.html

  * igt@prime_vgem@basic-write:
    - shard-dg2:          NOTRUN -> [SKIP][386] ([i915#3291] / [i915#3708])
   [386]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-6/igt@prime_vgem@basic-write.html
    - shard-dg1:          NOTRUN -> [SKIP][387] ([i915#3708])
   [387]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-13/igt@prime_vgem@basic-write.html

  * igt@sriov_basic@bind-unbind-vf:
    - shard-dg1:          NOTRUN -> [SKIP][388] ([i915#9917])
   [388]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-12/igt@sriov_basic@bind-unbind-vf.html

  * igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all:
    - shard-tglu:         NOTRUN -> [FAIL][389] ([i915#12910])
   [389]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-10/igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all.html

  * igt@tools_test@sysfs_l3_parity:
    - shard-rkl:          NOTRUN -> [SKIP][390] +33 other tests skip
   [390]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-4/igt@tools_test@sysfs_l3_parity.html

  
#### Possible fixes ####

  * igt@gem_eio@hibernate:
    - shard-dg1:          [ABORT][391] ([i915#7975] / [i915#8213]) -> [PASS][392]
   [391]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-dg1-14/igt@gem_eio@hibernate.html
   [392]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-12/igt@gem_eio@hibernate.html

  * igt@gem_eio@kms:
    - shard-dg2:          [FAIL][393] ([i915#5784]) -> [PASS][394]
   [393]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-dg2-7/igt@gem_eio@kms.html
   [394]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-4/igt@gem_eio@kms.html

  * igt@gem_exec_big@single:
    - shard-tglu:         [ABORT][395] ([i915#11713]) -> [PASS][396]
   [395]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-tglu-2/igt@gem_exec_big@single.html
   [396]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-3/igt@gem_exec_big@single.html

  * igt@gem_lmem_swapping@parallel-multi:
    - shard-dg2:          [SKIP][397] -> [PASS][398]
   [397]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-dg2-11/igt@gem_lmem_swapping@parallel-multi.html
   [398]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg2-11/igt@gem_lmem_swapping@parallel-multi.html

  * igt@gem_lmem_swapping@smem-oom@lmem0:
    - shard-dg1:          [DMESG-WARN][399] ([i915#5493]) -> [PASS][400] +1 other test pass
   [399]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-dg1-17/igt@gem_lmem_swapping@smem-oom@lmem0.html
   [400]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-12/igt@gem_lmem_swapping@smem-oom@lmem0.html

  * igt@gem_pxp@reject-modify-context-protection-on:
    - shard-tglu:         [SKIP][401] ([i915#4270]) -> [PASS][402]
   [401]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-tglu-10/igt@gem_pxp@reject-modify-context-protection-on.html
   [402]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-9/igt@gem_pxp@reject-modify-context-protection-on.html

  * igt@gem_workarounds@suspend-resume:
    - shard-glk:          [INCOMPLETE][403] ([i915#13356]) -> [PASS][404]
   [403]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-glk1/igt@gem_workarounds@suspend-resume.html
   [404]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-glk8/igt@gem_workarounds@suspend-resume.html

  * igt@gem_workarounds@suspend-resume-fd:
    - shard-rkl:          [DMESG-FAIL][405] ([i915#12964]) -> [PASS][406]
   [405]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-rkl-4/igt@gem_workarounds@suspend-resume-fd.html
   [406]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-7/igt@gem_workarounds@suspend-resume-fd.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-dg1:          [ABORT][407] ([i915#9820]) -> [PASS][408]
   [407]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-dg1-14/igt@i915_module_load@reload-with-fault-injection.html
   [408]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-12/igt@i915_module_load@reload-with-fault-injection.html

  * igt@i915_pm_rc6_residency@rc6-accuracy:
    - shard-rkl:          [FAIL][409] ([i915#12942]) -> [PASS][410] +1 other test pass
   [409]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-rkl-7/igt@i915_pm_rc6_residency@rc6-accuracy.html
   [410]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-3/igt@i915_pm_rc6_residency@rc6-accuracy.html

  * igt@i915_pm_rc6_residency@rc6-idle@gt0-bcs0:
    - shard-dg1:          [FAIL][411] ([i915#3591]) -> [PASS][412]
   [411]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-dg1-12/igt@i915_pm_rc6_residency@rc6-idle@gt0-bcs0.html
   [412]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-13/igt@i915_pm_rc6_residency@rc6-idle@gt0-bcs0.html

  * igt@i915_selftest@mock@sanitycheck:
    - shard-tglu:         [ABORT][413] ([i915#13010]) -> [PASS][414]
   [413]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-tglu-7/igt@i915_selftest@mock@sanitycheck.html
   [414]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-3/igt@i915_selftest@mock@sanitycheck.html

  * igt@kms_async_flips@crc-atomic@pipe-a-hdmi-a-1:
    - shard-glk:          [INCOMPLETE][415] -> [PASS][416]
   [415]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-glk7/igt@kms_async_flips@crc-atomic@pipe-a-hdmi-a-1.html
   [416]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-glk8/igt@kms_async_flips@crc-atomic@pipe-a-hdmi-a-1.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180:
    - shard-mtlp:         [DMESG-FAIL][417] ([i915#13314]) -> [PASS][418] +1 other test pass
   [417]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-mtlp-5/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180.html
   [418]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-mtlp-5/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180.html

  * igt@kms_cursor_edge_walk@64x64-left-edge:
    - shard-rkl:          [DMESG-WARN][419] ([i915#12964]) -> [PASS][420] +17 other tests pass
   [419]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-rkl-3/igt@kms_cursor_edge_walk@64x64-left-edge.html
   [420]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-2/igt@kms_cursor_edge_walk@64x64-left-edge.html

  * igt@kms_cursor_legacy@flip-vs-cursor-busy-crc-legacy:
    - shard-dg1:          [DMESG-WARN][421] ([i915#4423]) -> [PASS][422]
   [421]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-dg1-17/igt@kms_cursor_legacy@flip-vs-cursor-busy-crc-legacy.html
   [422]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-12/igt@kms_cursor_legacy@flip-vs-cursor-busy-crc-legacy.html

  * igt@kms_flip@2x-blocking-wf_vblank@ab-vga1-hdmi-a1:
    - shard-snb:          [FAIL][423] ([i915#11989]) -> [PASS][424] +7 other tests pass
   [423]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-snb5/igt@kms_flip@2x-blocking-wf_vblank@ab-vga1-hdmi-a1.html
   [424]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-snb5/igt@kms_flip@2x-blocking-wf_vblank@ab-vga1-hdmi-a1.html

  * igt@kms_flip@flip-vs-absolute-wf_vblank@a-hdmi-a1:
    - shard-tglu:         [FAIL][425] ([i915#11989]) -> [PASS][426] +1 other test pass
   [425]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-tglu-3/igt@kms_flip@flip-vs-absolute-wf_vblank@a-hdmi-a1.html
   [426]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-tglu-4/igt@kms_flip@flip-vs-absolute-wf_vblank@a-hdmi-a1.html

  * igt@kms_flip@flip-vs-absolute-wf_vblank@a-hdmi-a4:
    - shard-dg1:          [FAIL][427] ([i915#11989]) -> [PASS][428] +2 other tests pass
   [427]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-dg1-17/igt@kms_flip@flip-vs-absolute-wf_vblank@a-hdmi-a4.html
   [428]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-dg1-14/igt@kms_flip@flip-vs-absolute-wf_vblank@a-hdmi-a4.html

  * igt@kms_flip@flip-vs-blocking-wf-vblank:
    - shard-rkl:          [FAIL][429] ([i915#11989]) -> [PASS][430] +2 other tests pass
   [429]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15865/shard-rkl-5/igt@kms_flip@flip-vs-blocking-wf-vblank.html
   [430]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/shard-rkl-3/igt@kms_flip@flip-vs-blocking-wf-vblank.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-pgflip-blt:
    - shard-snb:          [SKIP][431] -> [PASS][432] +6 other tests pass
   [431]: https://intel-gfx-ci.0

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12344/index.html

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

* Re: [PATCH i-g-t 4/5] lib/igt_sriov_device: Add helper functions for VF range validation
  2024-12-18 12:00 ` [PATCH i-g-t 4/5] lib/igt_sriov_device: Add helper functions for VF range validation Marcin Bernatowicz
@ 2024-12-19 14:39   ` Laguna, Lukasz
  0 siblings, 0 replies; 17+ messages in thread
From: Laguna, Lukasz @ 2024-12-19 14:39 UTC (permalink / raw)
  To: Marcin Bernatowicz, igt-dev
  Cc: Marcin Bernatowicz, Adam Miszczak, Jakub Kolakowski,
	Michał Wajdeczko, Michał Winiarski, Narasimha C V,
	Piotr Piórkowski, Satyanarayana K V P, Tomasz Lis

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

On 12/18/2024 13:00, Marcin Bernatowicz wrote:
> Add __is_valid_range() to check if a VF range is valid. Introduce
> igt_sriov_random_vf_in_range() to get a random VF number within a
> specified range. Update for_random_sriov_vf to use the new helper
> functions for better range handling.
>
> Signed-off-by: Marcin Bernatowicz<marcin.bernatowicz@intel.com>
> Cc: Adam Miszczak<adam.miszczak@linux.intel.com>
> Cc: Jakub Kolakowski<jakub1.kolakowski@intel.com>
> Cc: Lukasz Laguna<lukasz.laguna@intel.com>
> Cc: Michał Wajdeczko<michal.wajdeczko@intel.com>
> Cc: Michał Winiarski<michal.winiarski@intel.com>
> Cc: Narasimha C V<narasimha.c.v@intel.com>
> Cc: Piotr Piórkowski<piotr.piorkowski@intel.com>
> Cc: Satyanarayana K V P<satyanarayana.k.v.p@intel.com>
> Cc: Tomasz Lis<tomasz.lis@intel.com>
> Signed-off-by: Marcin Bernatowicz<marcin.bernatowicz@linux.intel.com>
> ---
>   lib/igt_sriov_device.h | 82 ++++++++++++++++++++++++++++++++++++++----
>   1 file changed, 75 insertions(+), 7 deletions(-)
>
> diff --git a/lib/igt_sriov_device.h b/lib/igt_sriov_device.h
> index 4b63ceb22..de25a7d98 100644
> --- a/lib/igt_sriov_device.h
> +++ b/lib/igt_sriov_device.h
> @@ -34,6 +34,45 @@ int igt_sriov_device_sysfs_open(int pf, unsigned int vf_num);
>   bool igt_sriov_device_reset_exists(int pf, unsigned int vf_num);
>   bool igt_sriov_device_reset(int pf, unsigned int vf_num);
>   
> +/**
> + * __is_valid_range - Helper to check VF range is valid
> + * @start_vf: Starting VF number
> + * @end_vf: Ending VF number
> + * @total_vfs: Total number of VFs
> + *
> + * Return: true if the range is valid, false otherwise.
> + */
> +static inline bool __is_valid_range(unsigned int start_vf, unsigned int end_vf,
> +				    unsigned int total_vfs)
> +{
> +	return !igt_warn_on_f(start_vf > end_vf || end_vf > total_vfs || start_vf == 0,
> +			      "start_vf=%u, end_vf=%u, total_vfs=%u\n",
> +			      start_vf, end_vf, total_vfs);
> +}
> +
> +/**
> + * igt_sriov_random_vf_in_range - Get a random VF number within a specified range
> + * @pf_fd: PF device file descriptor
> + * @start: Starting VF number in the range
> + * @end: Ending VF number in the range
> + *
> + * Returns a random VF number within the specified range [start, end].
> + * If the range is invalid (start > end, end > total VFs,
> + * or start == 0), the function returns 0.
> + *
> + * Return: A random VF number within the range, or 0 if the range is invalid.
> + */
> +static inline unsigned int
> +igt_sriov_random_vf_in_range(int pf_fd, unsigned int start, unsigned int end)
> +{
> +	unsigned int total_vfs = igt_sriov_get_total_vfs(pf_fd);
> +
> +	if (!__is_valid_range(start, end, total_vfs))
> +		return 0;
> +
> +	return start + random() % (end - start + 1);
> +}
> +
>   /**
>    * for_each_sriov_vf - Helper for running code on each VF
>    * @__pf_fd: PF device file descriptor
> @@ -48,17 +87,46 @@ bool igt_sriov_device_reset(int pf, unsigned int vf_num);
>   #define for_each_sriov_num_vfs for_each_sriov_vf
>   
>   /**
> - * for_random_sriov_vf - Helper for running code on random VF
> + * for_random_sriov_vf_in_range - Iterate over a random VF in a specified range
> + * @__pf_fd: PF device file descriptor
> + * @__start: Starting VF number in the range
> + * @__end: Ending VF number in the range
> + * @__vf_num: Variable to store the random VF number
> + *
> + * Iterates over a random VF number within the specified range [__start, __end].
> + * The loop runs only if the range is valid and a random
> + * VF number is successfully selected.
> + */
> +#define for_random_sriov_vf_in_range(__pf_fd, __start, __end, __vf_num) \
> +	for (unsigned int __vf_num = igt_sriov_random_vf_in_range(__pf_fd, __start, __end); \
> +	     __vf_num != 0; __vf_num = 0)
> +
> +/**
> + * for_random_sriov_vf_starting_from - Iterate over a random VF starting from a specified VF
> + * @__pf_fd: PF device file descriptor
> + * @__start: Starting VF number
> + * @__vf_num: Variable to store the random VF number
> + *
> + * This macro iterates over a random VF number starting from the specified
> + * VF number @__start to the total number of VFs associated with the given
> + * PF @__pf_fd.
> + */
> +#define for_random_sriov_vf_starting_from(__pf_fd, __start, __vf_num) \
> +	for_random_sriov_vf_in_range(__pf_fd, __start, igt_sriov_get_total_vfs(__pf_fd), __vf_num)
> +
> +/**
> + * for_random_sriov_vf - Iterate over a random VF for a given PF
>    * @__pf_fd: PF device file descriptor
> - * @__vf_num: stores random VF
> + * @__vf_num: Variable to store the random VF number
>    *
> - * Helper allows to run code using random VF number (stored in @__vf_num)
> - * picked from the range of all VFs associated with given PF @__pf_fd.
> + * Iterates over a random VF number selected from the range
> + * of all VFs associated with the given PF @__pf_fd. The loop runs only
> + * if a random VF number is successfully selected.
>    */
>   #define for_random_sriov_vf(__pf_fd, __vf_num) \
> -	for (unsigned int __vf_num = 1 + random() % igt_sriov_get_total_vfs(__pf_fd), __tmp = 0; \
> -	     __tmp < 1; \
> -	     ++__tmp)
> +	for_random_sriov_vf_in_range(__pf_fd, 1, igt_sriov_get_total_vfs(__pf_fd), __vf_num)
> +
> +/* for_random_sriov_num_vfs - Alias for for_random_sriov_vf */
>   #define for_random_sriov_num_vfs for_random_sriov_vf
>   
>   /**

You've added your signed-off twice.
Apart from that all looks good:
Reviewed-by: Lukasz Laguna <lukasz.laguna@intel.com>


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

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

* Re: [PATCH i-g-t 5/5] tests/xe_sriov_auto_provisioning: Add tests for SR-IOV auto-provisioning
  2024-12-18 12:00 ` [PATCH i-g-t 5/5] tests/xe_sriov_auto_provisioning: Add tests for SR-IOV auto-provisioning Marcin Bernatowicz
@ 2024-12-19 14:48   ` Laguna, Lukasz
  2024-12-19 15:54     ` Bernatowicz, Marcin
  0 siblings, 1 reply; 17+ messages in thread
From: Laguna, Lukasz @ 2024-12-19 14:48 UTC (permalink / raw)
  To: Marcin Bernatowicz, igt-dev
  Cc: Adam Miszczak, Jakub Kolakowski, Michał Wajdeczko,
	Michał Winiarski, Narasimha C V, Piotr Piórkowski,
	Satyanarayana K V P, Tomasz Lis

On 12/18/2024 13:00, Marcin Bernatowicz wrote:
> Added subtests validating below scenarios:
> - auto-provisioned resources are allocated by PF driver in fairly manner,
> - auto-provisioned resources are released once VFs are disabled,
> - verify that ranges of auto-provisioned resources are exclusive.
>
> The tests rely on ggtt_provisioned, lmem_provisioned,
> contexts_provisioned and doorbells_provisioned debugfs attributes.
>
> Signed-off-by: Marcin Bernatowicz <marcin.bernatowicz@linux.intel.com>
> Cc: Adam Miszczak <adam.miszczak@linux.intel.com>
> Cc: Jakub Kolakowski <jakub1.kolakowski@intel.com>
> Cc: Lukasz Laguna <lukasz.laguna@intel.com>
> Cc: Michał Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Michał Winiarski <michal.winiarski@intel.com>
> Cc: Narasimha C V <narasimha.c.v@intel.com>
> Cc: Piotr Piórkowski <piotr.piorkowski@intel.com>
> Cc: Satyanarayana K V P <satyanarayana.k.v.p@intel.com>
> Cc: Tomasz Lis <tomasz.lis@intel.com>
> ---
>   tests/intel/xe_sriov_auto_provisioning.c | 399 +++++++++++++++++++++++
>   tests/meson.build                        |   1 +
>   2 files changed, 400 insertions(+)
>   create mode 100644 tests/intel/xe_sriov_auto_provisioning.c
>
> diff --git a/tests/intel/xe_sriov_auto_provisioning.c b/tests/intel/xe_sriov_auto_provisioning.c
> new file mode 100644
> index 000000000..a5ae60525
> --- /dev/null
> +++ b/tests/intel/xe_sriov_auto_provisioning.c
> @@ -0,0 +1,399 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright(c) 2023 Intel Corporation. All rights reserved.
> + */
> +
> +#include <stdbool.h>
> +
> +#include "drmtest.h"
> +#include "igt_core.h"
> +#include "igt_sriov_device.h"
> +#include "igt_sysfs.h"
> +#include "xe/xe_sriov_debugfs.h"
> +#include "xe/xe_sriov_provisioning.h"
> +#include "xe/xe_query.h"
> +
> +/**
> + * TEST: xe_sriov_auto_provisioning
> + * Category: Core
> + * Mega feature: SR-IOV
> + * Sub-category: provisioning
> + * Functionality: auto-provisioning
> + * Run type: FULL
> + * Description: Examine behavior of SR-IOV auto-provisioning
> + *
> + * SUBTEST: auto-provisioning-fair

As we have auto_provisioning in the test name then maybe subtest named 
"fair" would be sufficient?

> + * Description:
> + *   Verify that auto-provisioned resources are allocated by PF driver in fairly manner
> + *
> + * SUBTEST: auto-provisioned-resources-released-on-vfs-disabling

Similar to the above, maybe "resources-releasing-on-vfs-disabling"?

> + * Description:
> + *   Verify that auto-provisioned resources are released once VFs are disabled
> + *
> + * SUBTEST: exclusive-ranges
> + * Description:
> + *   Verify that ranges of auto-provisioned resources are exclusive
> + */
> +
> +IGT_TEST_DESCRIPTION("Xe tests for SR-IOV auto-provisioning");
> +
> +static int compare_ranges_by_vf_id(const void *a, const void *b)
> +{
> +	const struct xe_sriov_provisioned_range *range_a = a;
> +	const struct xe_sriov_provisioned_range *range_b = b;
> +
> +	return (range_a->vf_id - range_b->vf_id);
> +}
> +
> +static int validate_vf_ids(enum xe_sriov_shared_res res,
> +			   struct xe_sriov_provisioned_range *ranges,
> +			   unsigned int nr_ranges, unsigned int num_vfs)
> +{
> +	unsigned int current_vf_id = 0;
> +
> +	igt_assert(num_vfs);
> +
> +	if (igt_debug_on_f(nr_ranges == 0,
> +			   "%s: No VF ranges\n",
> +			   xe_sriov_debugfs_provisioned_attr_name(res)))
> +		return -ENOENT;
> +
> +	igt_assert(ranges);
> +	qsort(ranges, nr_ranges, sizeof(ranges[0]), compare_ranges_by_vf_id);
> +
> +	for (unsigned int i = 0; i < nr_ranges; i++) {
> +		unsigned int vf_id = ranges[i].vf_id;
> +
> +		/* Skip duplicates */
> +		if (vf_id == current_vf_id)
> +			continue;
> +
> +		if (igt_debug_on_f(vf_id < 1 || vf_id > num_vfs,
> +				   "%s: Out of range VF%u\n",
> +				   xe_sriov_debugfs_provisioned_attr_name(res), vf_id))
> +			return -ERANGE;
> +
> +		if (igt_debug_on_f(vf_id > current_vf_id + 1,
> +				   "%s: Missing VF%u\n",
> +				   xe_sriov_debugfs_provisioned_attr_name(res),
> +				   current_vf_id + 1))
> +			return -ESRCH;
> +
> +		current_vf_id = vf_id;
> +	}
> +
> +	if (igt_debug_on_f(current_vf_id != num_vfs,
> +			   "%s: Missing VF%u\n",
> +			   xe_sriov_debugfs_provisioned_attr_name(res), num_vfs))
> +		return -ESRCH;
> +
> +	return 0;
> +}
> +
> +/* Expects ranges sorted by VF IDs */
> +static int validate_fair_allocation(enum xe_sriov_shared_res res,
> +				    struct xe_sriov_provisioned_range *ranges,
> +				    unsigned int nr_ranges)
> +{
> +	uint64_t expected_allocation = 0;
> +	uint64_t current_allocation = 0;
> +	unsigned int current_vf_id;
> +
> +	igt_assert(nr_ranges);
> +	current_vf_id = ranges[0].vf_id;
> +
> +	for (unsigned int i = 0; i <= nr_ranges; i++) {
> +		if (i == nr_ranges || ranges[i].vf_id != current_vf_id) {
> +			/* Check allocation consistency for the previous VF ID */
> +			if (expected_allocation == 0)
> +				expected_allocation = current_allocation;
> +			else if (igt_debug_on_f(current_allocation != expected_allocation,
> +						"%s: Allocation mismatch, expected=%lu VF%u=%lu\n",
> +						xe_sriov_debugfs_provisioned_attr_name(res),
> +						expected_allocation, current_vf_id,
> +						current_allocation))
> +				return -1;
> +
> +			/* Reset for the new VF ID (if not at the end) */
> +			if (i < nr_ranges) {
> +				current_vf_id = ranges[i].vf_id;
> +				current_allocation = 0;
> +			}
> +		}
> +
> +		/* Accumulate allocation for the current VF ID */
> +		if (i < nr_ranges)
> +			current_allocation += ranges[i].end - ranges[i].start + 1;
> +	}
> +
> +	return 0;
> +}
> +

Handling cases where one VF can have more than one range of resource 
adds extra complexity to the test logic. I started wondering if we 
should consider such case as valid. Maybe we should assert earlier instead?

> +static int check_fair_allocation(int pf_fd, unsigned int num_vfs, unsigned int gt_id,
> +				 enum xe_sriov_shared_res res)
> +{
> +	struct xe_sriov_provisioned_range *ranges;
> +	unsigned int nr_ranges;
> +	int ret;
> +
> +	ret = xe_sriov_pf_debugfs_read_provisioned_ranges(pf_fd, res, gt_id, &ranges, &nr_ranges);
> +	if (igt_debug_on_f(ret, "Failed read %s on GT%u (%d)\n",
> +			   xe_sriov_debugfs_provisioned_attr_name(res), gt_id, ret))
> +		return ret;
> +
> +	ret = validate_vf_ids(res, ranges, nr_ranges, num_vfs);
> +	if (ret) {
> +		free(ranges);
> +		return ret;
> +	}
> +
> +	ret = validate_fair_allocation(res, ranges, nr_ranges);
> +	if (ret) {
> +		free(ranges);
> +		return ret;
> +	}
> +
> +	free(ranges);
> +
> +	return 0;
> +}
> +
> +static void auto_provisioning_fair(int pf_fd, unsigned int num_vfs)
> +{
> +	enum xe_sriov_shared_res res;
> +	unsigned int gt;
> +	int fails = 0;
> +
> +	igt_sriov_disable_driver_autoprobe(pf_fd);
> +	igt_sriov_enable_vfs(pf_fd, num_vfs);
> +
> +	xe_for_each_gt(pf_fd, gt) {
> +		xe_sriov_for_each_provisionable_shared_res(res, pf_fd, gt) {

I was OK with not defining dynamic subtest per GT to reduce the test 
execution time, but I had mixed feelings about not having separate 
subtests per resource.
But the more I think about it, the more I'm convinced to your approach. 
For manual reproduction with specific resource we can define some test 
option taking the resource we want to validate (no need to implement it 
now, we can add it when needed).

> +			if (igt_debug_on_f(check_fair_allocation(pf_fd, num_vfs, gt, res),
> +					   "%s fair allocation failed on gt%u\n",
> +					   xe_sriov_shared_res_to_string(res), gt))
> +				fails++;
> +		}
> +	}
> +
> +	igt_sriov_disable_vfs(pf_fd);
> +
> +	igt_fail_on_f(fails, "fair allocation failed\n");
> +}
> +
> +static void auto_provisioning_release(int pf_fd, unsigned int num_vfs)
> +{
> +	struct xe_sriov_provisioned_range *ranges;
> +	unsigned int nr_ranges;
> +	enum xe_sriov_shared_res res;
> +	unsigned int gt;
> +	int fails = 0;
> +
> +	igt_sriov_disable_driver_autoprobe(pf_fd);
> +	igt_sriov_enable_vfs(pf_fd, num_vfs);
> +
> +	xe_for_each_gt(pf_fd, gt) {
> +		xe_sriov_for_each_provisionable_shared_res(res, pf_fd, gt) {
> +			if (igt_warn_on_f(xe_sriov_pf_debugfs_read_provisioned_ranges(pf_fd, res,
> +										      gt,
> +										      &ranges,
> +										      &nr_ranges),
> +					  "Failed read %s on gt%u\n",
> +					  xe_sriov_debugfs_provisioned_attr_name(res), gt)) {
> +				continue;
> +			}
> +
> +			igt_warn_on_f(validate_vf_ids(res, ranges, nr_ranges, num_vfs),
> +				      "%s: VF IDs validation failed on gt%u\n",
> +				      xe_sriov_debugfs_provisioned_attr_name(res), gt);
> +			free(ranges);
> +		}
> +	}
> +
> +	igt_sriov_disable_vfs(pf_fd);
> +
> +	xe_for_each_gt(pf_fd, gt) {
> +		xe_sriov_for_each_provisionable_shared_res(res, pf_fd, gt) {
> +			if (igt_debug_on_f(xe_sriov_pf_debugfs_read_provisioned_ranges(pf_fd, res,
> +										       gt,
> +										       &ranges,
> +										       &nr_ranges),
> +					   "Failed read %s on gt%u\n",
> +					   xe_sriov_debugfs_provisioned_attr_name(res), gt)) {
> +				fails++;
> +				continue;
> +			}
> +
> +			if (igt_debug_on_f(nr_ranges,
> +					   "%s contains unexpected ranges on gt%u\n",
> +					   xe_sriov_debugfs_provisioned_attr_name(res), gt)) {
> +				fails++;
> +				for (unsigned int i = 0; i < nr_ranges; i++) {
> +					igt_debug((res == XE_SRIOV_SHARED_RES_GGTT) ?
> +							"%s:VF%u: %lx-%lx\n" :
> +							"%s:VF%u %lu-%lu\n",
> +						  xe_sriov_shared_res_to_string(res),
> +						  ranges[i].vf_id, ranges[i].start, ranges[i].end);
> +				}
> +			}
> +			free(ranges);
> +		}
> +	}
> +
> +	igt_fail_on_f(fails, "shared resource release check failed\n");
> +}
> +
> +static int compare_ranges_by_start(const void *a, const void *b)
> +{
> +	const struct xe_sriov_provisioned_range *range_a = a;
> +	const struct xe_sriov_provisioned_range *range_b = b;
> +
> +	if (range_a->start < range_b->start)
> +		return -1;
> +	if (range_a->start > range_b->start)
> +		return 1;
> +	return 0;
> +}
> +
> +static int check_no_overlap(int pf_fd, unsigned int num_vfs, unsigned int gt_id,
> +			    enum xe_sriov_shared_res res)
> +{
> +	struct xe_sriov_provisioned_range *ranges;
> +	unsigned int nr_ranges;
> +	int ret;
> +
> +	ret = xe_sriov_pf_debugfs_read_provisioned_ranges(pf_fd, res, gt_id, &ranges, &nr_ranges);
> +	if (ret)
> +		return ret;
> +
> +	ret = validate_vf_ids(res, ranges, nr_ranges, num_vfs);
> +	if (ret) {
> +		free(ranges);
> +		return ret;
> +	}
> +
> +	igt_assert(ranges);
> +	qsort(ranges, nr_ranges, sizeof(ranges[0]), compare_ranges_by_start);
> +
> +	for (unsigned int i = 0; i < nr_ranges - 1; i++)
> +		if (ranges[i].end >= ranges[i + 1].start) {
> +			igt_debug((res == XE_SRIOV_SHARED_RES_GGTT) ?
> +				  "Overlapping ranges: VF%u [%lx-%lx] and VF%u [%lx-%lx]\n" :
> +				  "Overlapping ranges: VF%u [%lu-%lu] and VF%u [%lu-%lu]\n",
> +				  ranges[i].vf_id, ranges[i].start, ranges[i].end,
> +				  ranges[i + 1].vf_id, ranges[i + 1].start, ranges[i + 1].end);
> +			free(ranges);
> +			return -1;
> +		}
> +
> +	free(ranges);
> +
> +	return 0;
> +}
> +
> +static void auto_provisioning_exclusive_ranges(int pf_fd, unsigned int num_vfs)
> +{
> +	enum xe_sriov_shared_res res;
> +	unsigned int gt;
> +	int fails = 0;
> +
> +	igt_sriov_disable_driver_autoprobe(pf_fd);
> +	igt_sriov_enable_vfs(pf_fd, num_vfs);
> +
> +	xe_for_each_gt(pf_fd, gt) {
> +		xe_sriov_for_each_provisionable_shared_res(res, pf_fd, gt) {
> +			if (res == XE_SRIOV_SHARED_RES_LMEM)
> +				/*
> +				 * lmem_provisioned is not applicable for this test,
> +				 * as it does not expose ranges
> +				 */
> +				continue;
> +
> +			if (igt_debug_on_f(check_no_overlap(pf_fd, num_vfs, gt, res),
> +					   "%s overlap check failed on gt%u\n",
> +					   xe_sriov_shared_res_to_string(res), gt))
> +				fails++;
> +		}
> +	}
> +
> +	igt_sriov_disable_vfs(pf_fd);
> +
> +	igt_fail_on_f(fails, "exclusive ranges check failed\n");
> +}
> +
> +igt_main
> +{
> +	enum xe_sriov_shared_res res;
> +	unsigned int gt;
> +	bool autoprobe;
> +	int pf_fd;
> +
> +	igt_fixture {
> +		struct xe_sriov_provisioned_range *ranges;
> +		unsigned int nr_ranges;
> +		int ret;
> +
> +		pf_fd = drm_open_driver(DRIVER_XE);
> +		igt_require(igt_sriov_is_pf(pf_fd));
> +		igt_require(igt_sriov_get_enabled_vfs(pf_fd) == 0);
> +
> +		xe_for_each_gt(pf_fd, gt) {
> +			xe_sriov_for_each_provisionable_shared_res(res, pf_fd, gt) {
> +				ret = xe_sriov_pf_debugfs_read_provisioned_ranges(pf_fd, res, gt,
> +										  &ranges,
> +										  &nr_ranges);
> +				igt_skip_on_f(ret, "Failed read %s on gt%u (%d)\n",
> +					      xe_sriov_debugfs_provisioned_attr_name(res),
> +					      gt, ret);
> +				igt_skip_on_f(nr_ranges != 0, "Unexpected %s content on gt%u\n",
> +					      xe_sriov_debugfs_provisioned_attr_name(res), gt);
> +			}
> +		}
> +		autoprobe = igt_sriov_is_driver_autoprobe_enabled(pf_fd);
> +	}
> +
> +	igt_describe("Verify that auto-provisioned resources are allocated by PF driver in fairly manner");
> +	igt_subtest_with_dynamic("auto-provisioning-fair") {
> +		for_random_sriov_num_vfs(pf_fd, num_vfs) {
> +			igt_dynamic_f("numvfs-random") {
> +				igt_debug("numvfs=%u\n", num_vfs);
> +				auto_provisioning_fair(pf_fd, num_vfs);
> +			}
> +		}
> +	}
> +
> +	igt_describe("Verify that auto-provisioned resources are released once VFs are disabled");
> +	igt_subtest_with_dynamic("auto-provisioned-resources-released-on-vfs-disabling") {
> +		for_random_sriov_num_vfs(pf_fd, num_vfs) {
> +			igt_dynamic_f("numvfs-random") {
> +				igt_debug("numvfs=%u\n", num_vfs);
> +				auto_provisioning_release(pf_fd, num_vfs);
> +			}
> +		}
> +	}
> +
> +	igt_describe("Verify that ranges of auto-provisioned resources are exclusive");
> +	igt_subtest_with_dynamic_f("exclusive-ranges") {
> +		unsigned int total_vfs = igt_sriov_get_total_vfs(pf_fd);
> +
> +		igt_skip_on(total_vfs < 2);
> +
> +		for_random_sriov_vf_in_range(pf_fd, 2, total_vfs, num_vfs) {
> +			igt_dynamic_f("numvfs-random") {
> +				igt_debug("numvfs=%u\n", num_vfs);
> +				auto_provisioning_exclusive_ranges(pf_fd, num_vfs);
> +			}
> +		}
> +	}
> +
> +	igt_fixture {
> +		igt_sriov_disable_vfs(pf_fd);
> +		/* abort to avoid execution of next tests with enabled VFs */
> +		igt_abort_on_f(igt_sriov_get_enabled_vfs(pf_fd) > 0, "Failed to disable VF(s)");
> +		autoprobe ? igt_sriov_enable_driver_autoprobe(pf_fd) :
> +			    igt_sriov_disable_driver_autoprobe(pf_fd);
> +		igt_abort_on_f(autoprobe != igt_sriov_is_driver_autoprobe_enabled(pf_fd),
> +			       "Failed to restore sriov_drivers_autoprobe value\n");
> +		drm_close_driver(pf_fd);
> +	}
> +}
> diff --git a/tests/meson.build b/tests/meson.build
> index 2724c7a9a..01076f401 100644
> --- a/tests/meson.build
> +++ b/tests/meson.build
> @@ -315,6 +315,7 @@ intel_xe_progs = [
>   	'xe_vm',
>   	'xe_waitfence',
>   	'xe_spin_batch',
> +	'xe_sriov_auto_provisioning',
>   	'xe_sriov_flr',
>   	'xe_sysfs_defaults',
>   	'xe_sysfs_preempt_timeout',

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

* Re: [PATCH i-g-t 5/5] tests/xe_sriov_auto_provisioning: Add tests for SR-IOV auto-provisioning
  2024-12-19 14:48   ` Laguna, Lukasz
@ 2024-12-19 15:54     ` Bernatowicz, Marcin
  2025-01-07 11:52       ` Laguna, Lukasz
  0 siblings, 1 reply; 17+ messages in thread
From: Bernatowicz, Marcin @ 2024-12-19 15:54 UTC (permalink / raw)
  To: Laguna, Lukasz, igt-dev
  Cc: Adam Miszczak, Jakub Kolakowski, Michał Wajdeczko,
	Michał Winiarski, Narasimha C V, Piotr Piórkowski,
	Satyanarayana K V P, Tomasz Lis



On 12/19/2024 3:48 PM, Laguna, Lukasz wrote:
> On 12/18/2024 13:00, Marcin Bernatowicz wrote:
>> Added subtests validating below scenarios:
>> - auto-provisioned resources are allocated by PF driver in fairly manner,
>> - auto-provisioned resources are released once VFs are disabled,
>> - verify that ranges of auto-provisioned resources are exclusive.
>>
>> The tests rely on ggtt_provisioned, lmem_provisioned,
>> contexts_provisioned and doorbells_provisioned debugfs attributes.
>>
>> Signed-off-by: Marcin Bernatowicz <marcin.bernatowicz@linux.intel.com>
>> Cc: Adam Miszczak <adam.miszczak@linux.intel.com>
>> Cc: Jakub Kolakowski <jakub1.kolakowski@intel.com>
>> Cc: Lukasz Laguna <lukasz.laguna@intel.com>
>> Cc: Michał Wajdeczko <michal.wajdeczko@intel.com>
>> Cc: Michał Winiarski <michal.winiarski@intel.com>
>> Cc: Narasimha C V <narasimha.c.v@intel.com>
>> Cc: Piotr Piórkowski <piotr.piorkowski@intel.com>
>> Cc: Satyanarayana K V P <satyanarayana.k.v.p@intel.com>
>> Cc: Tomasz Lis <tomasz.lis@intel.com>
>> ---
>>   tests/intel/xe_sriov_auto_provisioning.c | 399 +++++++++++++++++++++++
>>   tests/meson.build                        |   1 +
>>   2 files changed, 400 insertions(+)
>>   create mode 100644 tests/intel/xe_sriov_auto_provisioning.c
>>
>> diff --git a/tests/intel/xe_sriov_auto_provisioning.c b/tests/intel/ 
>> xe_sriov_auto_provisioning.c
>> new file mode 100644
>> index 000000000..a5ae60525
>> --- /dev/null
>> +++ b/tests/intel/xe_sriov_auto_provisioning.c
>> @@ -0,0 +1,399 @@
>> +// SPDX-License-Identifier: MIT
>> +/*
>> + * Copyright(c) 2023 Intel Corporation. All rights reserved.
>> + */
>> +
>> +#include <stdbool.h>
>> +
>> +#include "drmtest.h"
>> +#include "igt_core.h"
>> +#include "igt_sriov_device.h"
>> +#include "igt_sysfs.h"
>> +#include "xe/xe_sriov_debugfs.h"
>> +#include "xe/xe_sriov_provisioning.h"
>> +#include "xe/xe_query.h"
>> +
>> +/**
>> + * TEST: xe_sriov_auto_provisioning
>> + * Category: Core
>> + * Mega feature: SR-IOV
>> + * Sub-category: provisioning
>> + * Functionality: auto-provisioning
>> + * Run type: FULL
>> + * Description: Examine behavior of SR-IOV auto-provisioning
>> + *
>> + * SUBTEST: auto-provisioning-fair
> 
> As we have auto_provisioning in the test name then maybe subtest named 
> "fair" would be sufficient?

maybe fair-allocation ?

> 
>> + * Description:
>> + *   Verify that auto-provisioned resources are allocated by PF 
>> driver in fairly manner
>> + *
>> + * SUBTEST: auto-provisioned-resources-released-on-vfs-disabling
> 
> Similar to the above, maybe "resources-releasing-on-vfs-disabling"?

ok

> 
>> + * Description:
>> + *   Verify that auto-provisioned resources are released once VFs are 
>> disabled
>> + *
>> + * SUBTEST: exclusive-ranges
>> + * Description:
>> + *   Verify that ranges of auto-provisioned resources are exclusive
>> + */
>> +
>> +IGT_TEST_DESCRIPTION("Xe tests for SR-IOV auto-provisioning");
>> +
>> +static int compare_ranges_by_vf_id(const void *a, const void *b)
>> +{
>> +    const struct xe_sriov_provisioned_range *range_a = a;
>> +    const struct xe_sriov_provisioned_range *range_b = b;
>> +
>> +    return (range_a->vf_id - range_b->vf_id);
>> +}
>> +
>> +static int validate_vf_ids(enum xe_sriov_shared_res res,
>> +               struct xe_sriov_provisioned_range *ranges,
>> +               unsigned int nr_ranges, unsigned int num_vfs)
>> +{
>> +    unsigned int current_vf_id = 0;
>> +
>> +    igt_assert(num_vfs);
>> +
>> +    if (igt_debug_on_f(nr_ranges == 0,
>> +               "%s: No VF ranges\n",
>> +               xe_sriov_debugfs_provisioned_attr_name(res)))
>> +        return -ENOENT;
>> +
>> +    igt_assert(ranges);
>> +    qsort(ranges, nr_ranges, sizeof(ranges[0]), 
>> compare_ranges_by_vf_id);
>> +
>> +    for (unsigned int i = 0; i < nr_ranges; i++) {
>> +        unsigned int vf_id = ranges[i].vf_id;
>> +
>> +        /* Skip duplicates */
>> +        if (vf_id == current_vf_id)
>> +            continue;
>> +
>> +        if (igt_debug_on_f(vf_id < 1 || vf_id > num_vfs,
>> +                   "%s: Out of range VF%u\n",
>> +                   xe_sriov_debugfs_provisioned_attr_name(res), vf_id))
>> +            return -ERANGE;
>> +
>> +        if (igt_debug_on_f(vf_id > current_vf_id + 1,
>> +                   "%s: Missing VF%u\n",
>> +                   xe_sriov_debugfs_provisioned_attr_name(res),
>> +                   current_vf_id + 1))
>> +            return -ESRCH;
>> +
>> +        current_vf_id = vf_id;
>> +    }
>> +
>> +    if (igt_debug_on_f(current_vf_id != num_vfs,
>> +               "%s: Missing VF%u\n",
>> +               xe_sriov_debugfs_provisioned_attr_name(res), num_vfs))
>> +        return -ESRCH;
>> +
>> +    return 0;
>> +}
>> +
>> +/* Expects ranges sorted by VF IDs */
>> +static int validate_fair_allocation(enum xe_sriov_shared_res res,
>> +                    struct xe_sriov_provisioned_range *ranges,
>> +                    unsigned int nr_ranges)
>> +{
>> +    uint64_t expected_allocation = 0;
>> +    uint64_t current_allocation = 0;
>> +    unsigned int current_vf_id;
>> +
>> +    igt_assert(nr_ranges);
>> +    current_vf_id = ranges[0].vf_id;
>> +
>> +    for (unsigned int i = 0; i <= nr_ranges; i++) {
>> +        if (i == nr_ranges || ranges[i].vf_id != current_vf_id) {
>> +            /* Check allocation consistency for the previous VF ID */
>> +            if (expected_allocation == 0)
>> +                expected_allocation = current_allocation;
>> +            else if (igt_debug_on_f(current_allocation != 
>> expected_allocation,
>> +                        "%s: Allocation mismatch, expected=%lu 
>> VF%u=%lu\n",
>> +                        xe_sriov_debugfs_provisioned_attr_name(res),
>> +                        expected_allocation, current_vf_id,
>> +                        current_allocation))
>> +                return -1;
>> +
>> +            /* Reset for the new VF ID (if not at the end) */
>> +            if (i < nr_ranges) {
>> +                current_vf_id = ranges[i].vf_id;
>> +                current_allocation = 0;
>> +            }
>> +        }
>> +
>> +        /* Accumulate allocation for the current VF ID */
>> +        if (i < nr_ranges)
>> +            current_allocation += ranges[i].end - ranges[i].start + 1;
>> +    }
>> +
>> +    return 0;
>> +}
>> +
> 
> Handling cases where one VF can have more than one range of resource 
> adds extra complexity to the test logic. I started wondering if we 
> should consider such case as valid. Maybe we should assert earlier instead?

You mean "+=" complexity ?

current_allocation += ranges[i].end - ranges[i].start + 1;

vs

current_allocation = ranges[i].end - ranges[i].start + 1;


and

/* Skip duplicates */
if (vf_id == current_vf_id)
	continue;

vs

if (vf_id == current_vf_id)
	return err;

in validate_vf_ids ?

Maybe we can move the validate_vf_ids to the lib
or after agree no duplicate ids/gaps allowed return sorted by VF id 
entries from read function ?

> 
>> +static int check_fair_allocation(int pf_fd, unsigned int num_vfs, 
>> unsigned int gt_id,
>> +                 enum xe_sriov_shared_res res)
>> +{
>> +    struct xe_sriov_provisioned_range *ranges;
>> +    unsigned int nr_ranges;
>> +    int ret;
>> +
>> +    ret = xe_sriov_pf_debugfs_read_provisioned_ranges(pf_fd, res, 
>> gt_id, &ranges, &nr_ranges);
>> +    if (igt_debug_on_f(ret, "Failed read %s on GT%u (%d)\n",
>> +               xe_sriov_debugfs_provisioned_attr_name(res), gt_id, ret))
>> +        return ret;
>> +
>> +    ret = validate_vf_ids(res, ranges, nr_ranges, num_vfs);
>> +    if (ret) {
>> +        free(ranges);
>> +        return ret;
>> +    }
>> +
>> +    ret = validate_fair_allocation(res, ranges, nr_ranges);
>> +    if (ret) {
>> +        free(ranges);
>> +        return ret;
>> +    }
>> +
>> +    free(ranges);
>> +
>> +    return 0;
>> +}
>> +
>> +static void auto_provisioning_fair(int pf_fd, unsigned int num_vfs)
>> +{
>> +    enum xe_sriov_shared_res res;
>> +    unsigned int gt;
>> +    int fails = 0;
>> +
>> +    igt_sriov_disable_driver_autoprobe(pf_fd);
>> +    igt_sriov_enable_vfs(pf_fd, num_vfs);
>> +
>> +    xe_for_each_gt(pf_fd, gt) {
>> +        xe_sriov_for_each_provisionable_shared_res(res, pf_fd, gt) {
> 
> I was OK with not defining dynamic subtest per GT to reduce the test 
> execution time, but I had mixed feelings about not having separate 
> subtests per resource.
> But the more I think about it, the more I'm convinced to your approach. 
> For manual reproduction with specific resource we can define some test 
> option taking the resource we want to validate (no need to implement it 
> now, we can add it when needed).

I don't have a strong opinion on this. The dynamic subtest logic remains 
unchanged from the original version, except for the last 
exclusive-ranges subtest, which was adjusted for consistency. We may 
have fewer subtests/statistics, but each subtest should correctly report 
if any resource "misbehaves".

Thanks for review,
marcin
> 
>> +            if (igt_debug_on_f(check_fair_allocation(pf_fd, num_vfs, 
>> gt, res),
>> +                       "%s fair allocation failed on gt%u\n",
>> +                       xe_sriov_shared_res_to_string(res), gt))
>> +                fails++;
>> +        }
>> +    }
>> +
>> +    igt_sriov_disable_vfs(pf_fd);
>> +
>> +    igt_fail_on_f(fails, "fair allocation failed\n");
>> +}
>> +
>> +static void auto_provisioning_release(int pf_fd, unsigned int num_vfs)
>> +{
>> +    struct xe_sriov_provisioned_range *ranges;
>> +    unsigned int nr_ranges;
>> +    enum xe_sriov_shared_res res;
>> +    unsigned int gt;
>> +    int fails = 0;
>> +
>> +    igt_sriov_disable_driver_autoprobe(pf_fd);
>> +    igt_sriov_enable_vfs(pf_fd, num_vfs);
>> +
>> +    xe_for_each_gt(pf_fd, gt) {
>> +        xe_sriov_for_each_provisionable_shared_res(res, pf_fd, gt) {
>> +            if 
>> (igt_warn_on_f(xe_sriov_pf_debugfs_read_provisioned_ranges(pf_fd, res,
>> +                                              gt,
>> +                                              &ranges,
>> +                                              &nr_ranges),
>> +                      "Failed read %s on gt%u\n",
>> +                      xe_sriov_debugfs_provisioned_attr_name(res), 
>> gt)) {
>> +                continue;
>> +            }
>> +
>> +            igt_warn_on_f(validate_vf_ids(res, ranges, nr_ranges, 
>> num_vfs),
>> +                      "%s: VF IDs validation failed on gt%u\n",
>> +                      xe_sriov_debugfs_provisioned_attr_name(res), gt);
>> +            free(ranges);
>> +        }
>> +    }
>> +
>> +    igt_sriov_disable_vfs(pf_fd);
>> +
>> +    xe_for_each_gt(pf_fd, gt) {
>> +        xe_sriov_for_each_provisionable_shared_res(res, pf_fd, gt) {
>> +            if 
>> (igt_debug_on_f(xe_sriov_pf_debugfs_read_provisioned_ranges(pf_fd, res,
>> +                                               gt,
>> +                                               &ranges,
>> +                                               &nr_ranges),
>> +                       "Failed read %s on gt%u\n",
>> +                       xe_sriov_debugfs_provisioned_attr_name(res), 
>> gt)) {
>> +                fails++;
>> +                continue;
>> +            }
>> +
>> +            if (igt_debug_on_f(nr_ranges,
>> +                       "%s contains unexpected ranges on gt%u\n",
>> +                       xe_sriov_debugfs_provisioned_attr_name(res), 
>> gt)) {
>> +                fails++;
>> +                for (unsigned int i = 0; i < nr_ranges; i++) {
>> +                    igt_debug((res == XE_SRIOV_SHARED_RES_GGTT) ?
>> +                            "%s:VF%u: %lx-%lx\n" :
>> +                            "%s:VF%u %lu-%lu\n",
>> +                          xe_sriov_shared_res_to_string(res),
>> +                          ranges[i].vf_id, ranges[i].start, 
>> ranges[i].end);
>> +                }
>> +            }
>> +            free(ranges);
>> +        }
>> +    }
>> +
>> +    igt_fail_on_f(fails, "shared resource release check failed\n");
>> +}
>> +
>> +static int compare_ranges_by_start(const void *a, const void *b)
>> +{
>> +    const struct xe_sriov_provisioned_range *range_a = a;
>> +    const struct xe_sriov_provisioned_range *range_b = b;
>> +
>> +    if (range_a->start < range_b->start)
>> +        return -1;
>> +    if (range_a->start > range_b->start)
>> +        return 1;
>> +    return 0;
>> +}
>> +
>> +static int check_no_overlap(int pf_fd, unsigned int num_vfs, unsigned 
>> int gt_id,
>> +                enum xe_sriov_shared_res res)
>> +{
>> +    struct xe_sriov_provisioned_range *ranges;
>> +    unsigned int nr_ranges;
>> +    int ret;
>> +
>> +    ret = xe_sriov_pf_debugfs_read_provisioned_ranges(pf_fd, res, 
>> gt_id, &ranges, &nr_ranges);
>> +    if (ret)
>> +        return ret;
>> +
>> +    ret = validate_vf_ids(res, ranges, nr_ranges, num_vfs);
>> +    if (ret) {
>> +        free(ranges);
>> +        return ret;
>> +    }
>> +
>> +    igt_assert(ranges);
>> +    qsort(ranges, nr_ranges, sizeof(ranges[0]), 
>> compare_ranges_by_start);
>> +
>> +    for (unsigned int i = 0; i < nr_ranges - 1; i++)
>> +        if (ranges[i].end >= ranges[i + 1].start) {
>> +            igt_debug((res == XE_SRIOV_SHARED_RES_GGTT) ?
>> +                  "Overlapping ranges: VF%u [%lx-%lx] and VF%u [%lx- 
>> %lx]\n" :
>> +                  "Overlapping ranges: VF%u [%lu-%lu] and VF%u [%lu- 
>> %lu]\n",
>> +                  ranges[i].vf_id, ranges[i].start, ranges[i].end,
>> +                  ranges[i + 1].vf_id, ranges[i + 1].start, ranges[i 
>> + 1].end);
>> +            free(ranges);
>> +            return -1;
>> +        }
>> +
>> +    free(ranges);
>> +
>> +    return 0;
>> +}
>> +
>> +static void auto_provisioning_exclusive_ranges(int pf_fd, unsigned 
>> int num_vfs)
>> +{
>> +    enum xe_sriov_shared_res res;
>> +    unsigned int gt;
>> +    int fails = 0;
>> +
>> +    igt_sriov_disable_driver_autoprobe(pf_fd);
>> +    igt_sriov_enable_vfs(pf_fd, num_vfs);
>> +
>> +    xe_for_each_gt(pf_fd, gt) {
>> +        xe_sriov_for_each_provisionable_shared_res(res, pf_fd, gt) {
>> +            if (res == XE_SRIOV_SHARED_RES_LMEM)
>> +                /*
>> +                 * lmem_provisioned is not applicable for this test,
>> +                 * as it does not expose ranges
>> +                 */
>> +                continue;
>> +
>> +            if (igt_debug_on_f(check_no_overlap(pf_fd, num_vfs, gt, 
>> res),
>> +                       "%s overlap check failed on gt%u\n",
>> +                       xe_sriov_shared_res_to_string(res), gt))
>> +                fails++;
>> +        }
>> +    }
>> +
>> +    igt_sriov_disable_vfs(pf_fd);
>> +
>> +    igt_fail_on_f(fails, "exclusive ranges check failed\n");
>> +}
>> +
>> +igt_main
>> +{
>> +    enum xe_sriov_shared_res res;
>> +    unsigned int gt;
>> +    bool autoprobe;
>> +    int pf_fd;
>> +
>> +    igt_fixture {
>> +        struct xe_sriov_provisioned_range *ranges;
>> +        unsigned int nr_ranges;
>> +        int ret;
>> +
>> +        pf_fd = drm_open_driver(DRIVER_XE);
>> +        igt_require(igt_sriov_is_pf(pf_fd));
>> +        igt_require(igt_sriov_get_enabled_vfs(pf_fd) == 0);
>> +
>> +        xe_for_each_gt(pf_fd, gt) {
>> +            xe_sriov_for_each_provisionable_shared_res(res, pf_fd, gt) {
>> +                ret = 
>> xe_sriov_pf_debugfs_read_provisioned_ranges(pf_fd, res, gt,
>> +                                          &ranges,
>> +                                          &nr_ranges);
>> +                igt_skip_on_f(ret, "Failed read %s on gt%u (%d)\n",
>> +                          xe_sriov_debugfs_provisioned_attr_name(res),
>> +                          gt, ret);
>> +                igt_skip_on_f(nr_ranges != 0, "Unexpected %s content 
>> on gt%u\n",
>> +                          
>> xe_sriov_debugfs_provisioned_attr_name(res), gt);
>> +            }
>> +        }
>> +        autoprobe = igt_sriov_is_driver_autoprobe_enabled(pf_fd);
>> +    }
>> +
>> +    igt_describe("Verify that auto-provisioned resources are 
>> allocated by PF driver in fairly manner");
>> +    igt_subtest_with_dynamic("auto-provisioning-fair") {
>> +        for_random_sriov_num_vfs(pf_fd, num_vfs) {
>> +            igt_dynamic_f("numvfs-random") {
>> +                igt_debug("numvfs=%u\n", num_vfs);
>> +                auto_provisioning_fair(pf_fd, num_vfs);
>> +            }
>> +        }
>> +    }
>> +
>> +    igt_describe("Verify that auto-provisioned resources are released 
>> once VFs are disabled");
>> +    igt_subtest_with_dynamic("auto-provisioned-resources-released-on- 
>> vfs-disabling") {
>> +        for_random_sriov_num_vfs(pf_fd, num_vfs) {
>> +            igt_dynamic_f("numvfs-random") {
>> +                igt_debug("numvfs=%u\n", num_vfs);
>> +                auto_provisioning_release(pf_fd, num_vfs);
>> +            }
>> +        }
>> +    }
>> +
>> +    igt_describe("Verify that ranges of auto-provisioned resources 
>> are exclusive");
>> +    igt_subtest_with_dynamic_f("exclusive-ranges") {
>> +        unsigned int total_vfs = igt_sriov_get_total_vfs(pf_fd);
>> +
>> +        igt_skip_on(total_vfs < 2);
>> +
>> +        for_random_sriov_vf_in_range(pf_fd, 2, total_vfs, num_vfs) {
>> +            igt_dynamic_f("numvfs-random") {
>> +                igt_debug("numvfs=%u\n", num_vfs);
>> +                auto_provisioning_exclusive_ranges(pf_fd, num_vfs);
>> +            }
>> +        }
>> +    }
>> +
>> +    igt_fixture {
>> +        igt_sriov_disable_vfs(pf_fd);
>> +        /* abort to avoid execution of next tests with enabled VFs */
>> +        igt_abort_on_f(igt_sriov_get_enabled_vfs(pf_fd) > 0, "Failed 
>> to disable VF(s)");
>> +        autoprobe ? igt_sriov_enable_driver_autoprobe(pf_fd) :
>> +                igt_sriov_disable_driver_autoprobe(pf_fd);
>> +        igt_abort_on_f(autoprobe != 
>> igt_sriov_is_driver_autoprobe_enabled(pf_fd),
>> +                   "Failed to restore sriov_drivers_autoprobe value\n");
>> +        drm_close_driver(pf_fd);
>> +    }
>> +}
>> diff --git a/tests/meson.build b/tests/meson.build
>> index 2724c7a9a..01076f401 100644
>> --- a/tests/meson.build
>> +++ b/tests/meson.build
>> @@ -315,6 +315,7 @@ intel_xe_progs = [
>>       'xe_vm',
>>       'xe_waitfence',
>>       'xe_spin_batch',
>> +    'xe_sriov_auto_provisioning',
>>       'xe_sriov_flr',
>>       'xe_sysfs_defaults',
>>       'xe_sysfs_preempt_timeout',


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

* ✗ Xe.CI.Full: failure for Add xe_sriov_auto_provisioning tests
  2024-12-18 12:00 [PATCH i-g-t 0/5] Add xe_sriov_auto_provisioning tests Marcin Bernatowicz
                   ` (7 preceding siblings ...)
  2024-12-19 12:22 ` ✗ i915.CI.Full: failure " Patchwork
@ 2024-12-19 17:51 ` Patchwork
  8 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2024-12-19 17:51 UTC (permalink / raw)
  To: Bernatowicz, Marcin; +Cc: igt-dev

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

== Series Details ==

Series: Add xe_sriov_auto_provisioning tests
URL   : https://patchwork.freedesktop.org/series/142781/
State : failure

== Summary ==

CI Bug Log - changes from XEIGT_8164_full -> XEIGTPW_12344_full
====================================================

Summary
-------

  **FAILURE**

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

  

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

  No changes in participating hosts

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

  Here are the unknown changes that may have been introduced in XEIGTPW_12344_full:

### IGT changes ###

#### Possible regressions ####

  * igt@kms_flip@2x-flip-vs-suspend-interruptible@ac-dp2-hdmi-a3:
    - shard-bmg:          [PASS][1] -> [INCOMPLETE][2] +4 other tests incomplete
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-7/igt@kms_flip@2x-flip-vs-suspend-interruptible@ac-dp2-hdmi-a3.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-2/igt@kms_flip@2x-flip-vs-suspend-interruptible@ac-dp2-hdmi-a3.html

  * igt@kms_flip@2x-wf_vblank-ts-check@bc-hdmi-a6-dp4:
    - shard-dg2-set2:     [PASS][3] -> [INCOMPLETE][4] +2 other tests incomplete
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-dg2-463/igt@kms_flip@2x-wf_vblank-ts-check@bc-hdmi-a6-dp4.html
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-433/igt@kms_flip@2x-wf_vblank-ts-check@bc-hdmi-a6-dp4.html

  * igt@kms_flip@plain-flip-fb-recreate-interruptible@c-dp2:
    - shard-bmg:          NOTRUN -> [INCOMPLETE][5] +1 other test incomplete
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-8/igt@kms_flip@plain-flip-fb-recreate-interruptible@c-dp2.html

  * {igt@xe_sriov_auto_provisioning@exclusive-ranges} (NEW):
    - shard-bmg:          NOTRUN -> [SKIP][6] +1 other test skip
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-3/igt@xe_sriov_auto_provisioning@exclusive-ranges.html
    - shard-dg2-set2:     NOTRUN -> [SKIP][7] +1 other test skip
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-435/igt@xe_sriov_auto_provisioning@exclusive-ranges.html
    - shard-lnl:          NOTRUN -> [SKIP][8] +2 other tests skip
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-lnl-7/igt@xe_sriov_auto_provisioning@exclusive-ranges.html

  
#### Warnings ####

  * igt@xe_live_ktest@xe_bo:
    - shard-dg2-set2:     [TIMEOUT][9] ([Intel XE#2961] / [Intel XE#2998]) -> [INCOMPLETE][10] +1 other test incomplete
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-dg2-435/igt@xe_live_ktest@xe_bo.html
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-433/igt@xe_live_ktest@xe_bo.html

  
New tests
---------

  New tests have been introduced between XEIGT_8164_full and XEIGTPW_12344_full:

### New IGT tests (3) ###

  * igt@xe_sriov_auto_provisioning@auto-provisioned-resources-released-on-vfs-disabling:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@xe_sriov_auto_provisioning@auto-provisioning-fair:
    - Statuses : 1 skip(s)
    - Exec time: [0.0] s

  * igt@xe_sriov_auto_provisioning@exclusive-ranges:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  

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

  Here are the changes found in XEIGTPW_12344_full that come from known issues:

### IGT changes ###

#### Issues hit ####

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

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

  * igt@kms_async_flips@crc-atomic@pipe-a-dp-2:
    - shard-bmg:          NOTRUN -> [INCOMPLETE][13] ([Intel XE#3781]) +1 other test incomplete
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-2/igt@kms_async_flips@crc-atomic@pipe-a-dp-2.html

  * igt@kms_async_flips@crc-atomic@pipe-a-hdmi-a-6:
    - shard-dg2-set2:     NOTRUN -> [INCOMPLETE][14] ([Intel XE#3781]) +1 other test incomplete
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-433/igt@kms_async_flips@crc-atomic@pipe-a-hdmi-a-6.html

  * igt@kms_async_flips@invalid-async-flip-atomic:
    - shard-bmg:          NOTRUN -> [SKIP][15] ([Intel XE#3768])
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-1/igt@kms_async_flips@invalid-async-flip-atomic.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels:
    - shard-bmg:          NOTRUN -> [SKIP][16] ([Intel XE#2370])
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-8/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html

  * igt@kms_big_fb@4-tiled-32bpp-rotate-90:
    - shard-bmg:          NOTRUN -> [SKIP][17] ([Intel XE#2327]) +3 other tests skip
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-2/igt@kms_big_fb@4-tiled-32bpp-rotate-90.html

  * igt@kms_big_fb@x-tiled-16bpp-rotate-90:
    - shard-dg2-set2:     NOTRUN -> [SKIP][18] ([Intel XE#316])
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-435/igt@kms_big_fb@x-tiled-16bpp-rotate-90.html

  * igt@kms_big_fb@y-tiled-64bpp-rotate-90:
    - shard-bmg:          NOTRUN -> [SKIP][19] ([Intel XE#1124]) +5 other tests skip
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-7/igt@kms_big_fb@y-tiled-64bpp-rotate-90.html

  * igt@kms_big_fb@y-tiled-addfb:
    - shard-bmg:          NOTRUN -> [SKIP][20] ([Intel XE#2328])
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-8/igt@kms_big_fb@y-tiled-addfb.html

  * igt@kms_big_fb@yf-tiled-16bpp-rotate-0:
    - shard-dg2-set2:     NOTRUN -> [SKIP][21] ([Intel XE#1124]) +4 other tests skip
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-463/igt@kms_big_fb@yf-tiled-16bpp-rotate-0.html

  * igt@kms_big_fb@yf-tiled-addfb-size-overflow:
    - shard-bmg:          NOTRUN -> [SKIP][22] ([Intel XE#610])
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-3/igt@kms_big_fb@yf-tiled-addfb-size-overflow.html
    - shard-dg2-set2:     NOTRUN -> [SKIP][23] ([Intel XE#610])
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-435/igt@kms_big_fb@yf-tiled-addfb-size-overflow.html

  * igt@kms_bw@connected-linear-tiling-4-displays-1920x1080p:
    - shard-dg2-set2:     NOTRUN -> [SKIP][24] ([Intel XE#2191])
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-435/igt@kms_bw@connected-linear-tiling-4-displays-1920x1080p.html
    - shard-bmg:          NOTRUN -> [SKIP][25] ([Intel XE#2314] / [Intel XE#2894])
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-8/igt@kms_bw@connected-linear-tiling-4-displays-1920x1080p.html

  * igt@kms_bw@linear-tiling-1-displays-2560x1440p:
    - shard-dg2-set2:     NOTRUN -> [SKIP][26] ([Intel XE#367]) +2 other tests skip
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-463/igt@kms_bw@linear-tiling-1-displays-2560x1440p.html

  * igt@kms_bw@linear-tiling-2-displays-2160x1440p:
    - shard-bmg:          NOTRUN -> [SKIP][27] ([Intel XE#367])
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-7/igt@kms_bw@linear-tiling-2-displays-2160x1440p.html

  * igt@kms_ccs@bad-pixel-format-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-6:
    - shard-dg2-set2:     NOTRUN -> [SKIP][28] ([Intel XE#787]) +27 other tests skip
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-434/igt@kms_ccs@bad-pixel-format-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-6.html

  * igt@kms_ccs@bad-rotation-90-y-tiled-gen12-rc-ccs-cc:
    - shard-bmg:          NOTRUN -> [SKIP][29] ([Intel XE#2887]) +12 other tests skip
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-3/igt@kms_ccs@bad-rotation-90-y-tiled-gen12-rc-ccs-cc.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs:
    - shard-dg2-set2:     NOTRUN -> [SKIP][30] ([Intel XE#455] / [Intel XE#787]) +7 other tests skip
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-436/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs.html

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

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs:
    - shard-dg2-set2:     [PASS][32] -> [INCOMPLETE][33] ([Intel XE#1727])
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-dg2-434/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs.html
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-436/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs.html

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-c-dp-4:
    - shard-dg2-set2:     [PASS][34] -> [INCOMPLETE][35] ([Intel XE#1727] / [Intel XE#3113])
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-dg2-434/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-c-dp-4.html
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-436/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-c-dp-4.html

  * igt@kms_cdclk@mode-transition:
    - shard-bmg:          NOTRUN -> [SKIP][36] ([Intel XE#2724])
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-7/igt@kms_cdclk@mode-transition.html

  * igt@kms_chamelium_color@ctm-0-50:
    - shard-bmg:          NOTRUN -> [SKIP][37] ([Intel XE#2325]) +2 other tests skip
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-2/igt@kms_chamelium_color@ctm-0-50.html

  * igt@kms_chamelium_color@ctm-red-to-blue:
    - shard-dg2-set2:     NOTRUN -> [SKIP][38] ([Intel XE#306])
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-436/igt@kms_chamelium_color@ctm-red-to-blue.html

  * igt@kms_chamelium_edid@dp-edid-change-during-hibernate:
    - shard-bmg:          NOTRUN -> [SKIP][39] ([Intel XE#2252]) +6 other tests skip
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-3/igt@kms_chamelium_edid@dp-edid-change-during-hibernate.html
    - shard-dg2-set2:     NOTRUN -> [SKIP][40] ([Intel XE#373]) +6 other tests skip
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-435/igt@kms_chamelium_edid@dp-edid-change-during-hibernate.html

  * igt@kms_content_protection@content-type-change:
    - shard-bmg:          NOTRUN -> [SKIP][41] ([Intel XE#2341])
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-5/igt@kms_content_protection@content-type-change.html

  * igt@kms_content_protection@dp-mst-lic-type-1:
    - shard-bmg:          NOTRUN -> [SKIP][42] ([Intel XE#2390])
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-8/igt@kms_content_protection@dp-mst-lic-type-1.html

  * igt@kms_content_protection@legacy:
    - shard-dg2-set2:     NOTRUN -> [FAIL][43] ([Intel XE#1178]) +1 other test fail
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-434/igt@kms_content_protection@legacy.html

  * igt@kms_content_protection@lic-type-0@pipe-a-dp-2:
    - shard-bmg:          NOTRUN -> [FAIL][44] ([Intel XE#1178]) +2 other tests fail
   [44]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-7/igt@kms_content_protection@lic-type-0@pipe-a-dp-2.html

  * igt@kms_cursor_crc@cursor-random-512x512:
    - shard-bmg:          NOTRUN -> [SKIP][45] ([Intel XE#2321]) +1 other test skip
   [45]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-8/igt@kms_cursor_crc@cursor-random-512x512.html

  * igt@kms_cursor_crc@cursor-sliding-256x85:
    - shard-bmg:          NOTRUN -> [SKIP][46] ([Intel XE#2320]) +2 other tests skip
   [46]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-7/igt@kms_cursor_crc@cursor-sliding-256x85.html

  * igt@kms_cursor_legacy@2x-flip-vs-cursor-atomic:
    - shard-bmg:          NOTRUN -> [SKIP][47] ([Intel XE#2291])
   [47]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-6/igt@kms_cursor_legacy@2x-flip-vs-cursor-atomic.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size:
    - shard-bmg:          NOTRUN -> [SKIP][48] ([Intel XE#2286]) +1 other test skip
   [48]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-2/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html

  * igt@kms_feature_discovery@display-4x:
    - shard-bmg:          NOTRUN -> [SKIP][49] ([Intel XE#1138])
   [49]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-8/igt@kms_feature_discovery@display-4x.html

  * igt@kms_feature_discovery@psr1:
    - shard-dg2-set2:     NOTRUN -> [SKIP][50] ([Intel XE#1135])
   [50]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-463/igt@kms_feature_discovery@psr1.html

  * igt@kms_flip@2x-blocking-wf_vblank:
    - shard-bmg:          NOTRUN -> [SKIP][51] ([Intel XE#2316])
   [51]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-6/igt@kms_flip@2x-blocking-wf_vblank.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible:
    - shard-bmg:          NOTRUN -> [FAIL][52] ([Intel XE#2882])
   [52]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-2/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bd-dp2-hdmi-a3:
    - shard-bmg:          NOTRUN -> [FAIL][53] ([Intel XE#3321]) +1 other test fail
   [53]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-2/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bd-dp2-hdmi-a3.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bd-hdmi-a6-dp4:
    - shard-dg2-set2:     [PASS][54] -> [FAIL][55] ([Intel XE#3321])
   [54]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-dg2-436/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bd-hdmi-a6-dp4.html
   [55]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-433/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bd-hdmi-a6-dp4.html

  * igt@kms_flip@2x-flip-vs-expired-vblank@ac-dp2-hdmi-a3:
    - shard-bmg:          [PASS][56] -> [FAIL][57] ([Intel XE#3321]) +1 other test fail
   [56]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-5/igt@kms_flip@2x-flip-vs-expired-vblank@ac-dp2-hdmi-a3.html
   [57]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-1/igt@kms_flip@2x-flip-vs-expired-vblank@ac-dp2-hdmi-a3.html

  * igt@kms_flip@2x-flip-vs-expired-vblank@ac-hdmi-a6-dp4:
    - shard-dg2-set2:     [PASS][58] -> [FAIL][59] ([Intel XE#301])
   [58]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-dg2-436/igt@kms_flip@2x-flip-vs-expired-vblank@ac-hdmi-a6-dp4.html
   [59]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-463/igt@kms_flip@2x-flip-vs-expired-vblank@ac-hdmi-a6-dp4.html

  * igt@kms_flip@2x-flip-vs-expired-vblank@bc-dp2-hdmi-a3:
    - shard-bmg:          [PASS][60] -> [FAIL][61] ([Intel XE#2882])
   [60]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-5/igt@kms_flip@2x-flip-vs-expired-vblank@bc-dp2-hdmi-a3.html
   [61]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-1/igt@kms_flip@2x-flip-vs-expired-vblank@bc-dp2-hdmi-a3.html

  * igt@kms_flip@2x-flip-vs-suspend-interruptible:
    - shard-bmg:          [PASS][62] -> [INCOMPLETE][63] ([Intel XE#2597])
   [62]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-7/igt@kms_flip@2x-flip-vs-suspend-interruptible.html
   [63]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-2/igt@kms_flip@2x-flip-vs-suspend-interruptible.html

  * igt@kms_flip@flip-vs-suspend:
    - shard-dg2-set2:     [PASS][64] -> [INCOMPLETE][65] ([Intel XE#2049] / [Intel XE#2597])
   [64]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-dg2-436/igt@kms_flip@flip-vs-suspend.html
   [65]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-434/igt@kms_flip@flip-vs-suspend.html

  * igt@kms_flip@flip-vs-suspend-interruptible:
    - shard-bmg:          NOTRUN -> [INCOMPLETE][66] ([Intel XE#2597]) +1 other test incomplete
   [66]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-3/igt@kms_flip@flip-vs-suspend-interruptible.html
    - shard-dg2-set2:     NOTRUN -> [INCOMPLETE][67] ([Intel XE#2049] / [Intel XE#2597])
   [67]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-434/igt@kms_flip@flip-vs-suspend-interruptible.html

  * igt@kms_flip@flip-vs-suspend-interruptible@d-dp4:
    - shard-dg2-set2:     NOTRUN -> [INCOMPLETE][68] ([Intel XE#2049])
   [68]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-434/igt@kms_flip@flip-vs-suspend-interruptible@d-dp4.html

  * igt@kms_flip@plain-flip-fb-recreate-interruptible:
    - shard-dg2-set2:     [PASS][69] -> [INCOMPLETE][70] ([Intel XE#2049]) +1 other test incomplete
   [69]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-dg2-434/igt@kms_flip@plain-flip-fb-recreate-interruptible.html
   [70]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-434/igt@kms_flip@plain-flip-fb-recreate-interruptible.html
    - shard-bmg:          NOTRUN -> [INCOMPLETE][71] ([Intel XE#2635])
   [71]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-8/igt@kms_flip@plain-flip-fb-recreate-interruptible.html

  * igt@kms_flip@wf_vblank-ts-check:
    - shard-lnl:          [PASS][72] -> [FAIL][73] ([Intel XE#3149] / [Intel XE#886])
   [72]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-lnl-5/igt@kms_flip@wf_vblank-ts-check.html
   [73]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-lnl-8/igt@kms_flip@wf_vblank-ts-check.html

  * igt@kms_flip@wf_vblank-ts-check@a-edp1:
    - shard-lnl:          [PASS][74] -> [FAIL][75] ([Intel XE#886]) +2 other tests fail
   [74]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-lnl-5/igt@kms_flip@wf_vblank-ts-check@a-edp1.html
   [75]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-lnl-8/igt@kms_flip@wf_vblank-ts-check@a-edp1.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-downscaling:
    - shard-dg2-set2:     NOTRUN -> [SKIP][76] ([Intel XE#455]) +1 other test skip
   [76]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-435/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-downscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-64bpp-ytile-upscaling:
    - shard-bmg:          NOTRUN -> [SKIP][77] ([Intel XE#2293] / [Intel XE#2380]) +1 other test skip
   [77]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-8/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-64bpp-ytile-upscaling.html

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

  * igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-blt:
    - shard-bmg:          NOTRUN -> [FAIL][79] ([Intel XE#2333]) +14 other tests fail
   [79]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-7/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-mmap-wc:
    - shard-dg2-set2:     NOTRUN -> [SKIP][80] ([Intel XE#651]) +13 other tests skip
   [80]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-433/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc:
    - shard-bmg:          NOTRUN -> [SKIP][81] ([Intel XE#2311]) +25 other tests skip
   [81]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-5/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-blt:
    - shard-bmg:          NOTRUN -> [SKIP][82] ([Intel XE#2312]) +2 other tests skip
   [82]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-cur-indfb-draw-blt:
    - shard-bmg:          NOTRUN -> [SKIP][83] ([Intel XE#2313]) +22 other tests skip
   [83]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-1/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-cur-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-mmap-wc:
    - shard-dg2-set2:     NOTRUN -> [SKIP][84] ([Intel XE#653]) +10 other tests skip
   [84]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-434/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-mmap-wc.html

  * igt@kms_joiner@basic-ultra-joiner:
    - shard-bmg:          NOTRUN -> [SKIP][85] ([Intel XE#2927])
   [85]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-1/igt@kms_joiner@basic-ultra-joiner.html

  * igt@kms_plane_scaling@intel-max-src-size@pipe-a-dp-4:
    - shard-dg2-set2:     [PASS][86] -> [FAIL][87] ([Intel XE#361])
   [86]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-dg2-436/igt@kms_plane_scaling@intel-max-src-size@pipe-a-dp-4.html
   [87]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-435/igt@kms_plane_scaling@intel-max-src-size@pipe-a-dp-4.html

  * igt@kms_pm_backlight@bad-brightness:
    - shard-bmg:          NOTRUN -> [SKIP][88] ([Intel XE#870]) +1 other test skip
   [88]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-1/igt@kms_pm_backlight@bad-brightness.html

  * igt@kms_pm_backlight@fade-with-suspend:
    - shard-dg2-set2:     NOTRUN -> [SKIP][89] ([Intel XE#870])
   [89]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-434/igt@kms_pm_backlight@fade-with-suspend.html

  * igt@kms_pm_dc@dc3co-vpb-simulation:
    - shard-bmg:          NOTRUN -> [SKIP][90] ([Intel XE#2391])
   [90]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-8/igt@kms_pm_dc@dc3co-vpb-simulation.html

  * igt@kms_pm_dc@dc5-dpms:
    - shard-lnl:          [PASS][91] -> [FAIL][92] ([Intel XE#718])
   [91]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-lnl-6/igt@kms_pm_dc@dc5-dpms.html
   [92]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-lnl-8/igt@kms_pm_dc@dc5-dpms.html

  * igt@kms_pm_rpm@modeset-lpsp-stress:
    - shard-bmg:          NOTRUN -> [SKIP][93] ([Intel XE#1439] / [Intel XE#3141] / [Intel XE#836])
   [93]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-5/igt@kms_pm_rpm@modeset-lpsp-stress.html

  * igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area:
    - shard-dg2-set2:     NOTRUN -> [SKIP][94] ([Intel XE#1489]) +3 other tests skip
   [94]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-433/igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area.html

  * igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area:
    - shard-bmg:          NOTRUN -> [SKIP][95] ([Intel XE#1489]) +7 other tests skip
   [95]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-3/igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area.html

  * igt@kms_psr@fbc-psr2-basic:
    - shard-bmg:          NOTRUN -> [SKIP][96] ([Intel XE#2234] / [Intel XE#2850]) +10 other tests skip
   [96]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-3/igt@kms_psr@fbc-psr2-basic.html

  * igt@kms_psr@fbc-psr2-cursor-plane-onoff:
    - shard-dg2-set2:     NOTRUN -> [SKIP][97] ([Intel XE#2850] / [Intel XE#929]) +3 other tests skip
   [97]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-463/igt@kms_psr@fbc-psr2-cursor-plane-onoff.html

  * igt@kms_rotation_crc@primary-rotation-90:
    - shard-bmg:          NOTRUN -> [SKIP][98] ([Intel XE#3414]) +1 other test skip
   [98]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-8/igt@kms_rotation_crc@primary-rotation-90.html

  * igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-hdmi-a-3:
    - shard-bmg:          [PASS][99] -> [INCOMPLETE][100] ([Intel XE#3864])
   [99]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-3/igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-hdmi-a-3.html
   [100]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-2/igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-hdmi-a-3.html

  * igt@kms_vrr@cmrr@pipe-a-edp-1:
    - shard-lnl:          [PASS][101] -> [FAIL][102] ([Intel XE#2159]) +1 other test fail
   [101]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-lnl-8/igt@kms_vrr@cmrr@pipe-a-edp-1.html
   [102]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-lnl-1/igt@kms_vrr@cmrr@pipe-a-edp-1.html

  * igt@kms_vrr@flip-basic-fastset:
    - shard-bmg:          NOTRUN -> [SKIP][103] ([Intel XE#1499])
   [103]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-8/igt@kms_vrr@flip-basic-fastset.html

  * igt@kms_writeback@writeback-check-output-xrgb2101010:
    - shard-bmg:          NOTRUN -> [SKIP][104] ([Intel XE#756])
   [104]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-8/igt@kms_writeback@writeback-check-output-xrgb2101010.html
    - shard-dg2-set2:     NOTRUN -> [SKIP][105] ([Intel XE#756])
   [105]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-434/igt@kms_writeback@writeback-check-output-xrgb2101010.html

  * igt@xe_compute_preempt@compute-threadgroup-preempt@engine-drm_xe_engine_class_compute:
    - shard-dg2-set2:     NOTRUN -> [SKIP][106] ([Intel XE#1280] / [Intel XE#455]) +1 other test skip
   [106]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-434/igt@xe_compute_preempt@compute-threadgroup-preempt@engine-drm_xe_engine_class_compute.html

  * igt@xe_copy_basic@mem-set-linear-0x3fff:
    - shard-dg2-set2:     NOTRUN -> [SKIP][107] ([Intel XE#1126])
   [107]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-463/igt@xe_copy_basic@mem-set-linear-0x3fff.html

  * igt@xe_drm_fdinfo@virtual-utilization-single-idle:
    - shard-bmg:          NOTRUN -> [FAIL][108] ([Intel XE#3869])
   [108]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-7/igt@xe_drm_fdinfo@virtual-utilization-single-idle.html

  * igt@xe_eudebug@discovery-empty:
    - shard-bmg:          NOTRUN -> [SKIP][109] ([Intel XE#2905]) +7 other tests skip
   [109]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-7/igt@xe_eudebug@discovery-empty.html

  * igt@xe_eudebug_online@resume-dss:
    - shard-dg2-set2:     NOTRUN -> [SKIP][110] ([Intel XE#2905]) +4 other tests skip
   [110]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-436/igt@xe_eudebug_online@resume-dss.html

  * igt@xe_evict@evict-beng-large-multi-vm-cm:
    - shard-dg2-set2:     [PASS][111] -> [FAIL][112] ([Intel XE#1600])
   [111]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-dg2-436/igt@xe_evict@evict-beng-large-multi-vm-cm.html
   [112]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-463/igt@xe_evict@evict-beng-large-multi-vm-cm.html

  * igt@xe_evict@evict-beng-threads-large:
    - shard-bmg:          NOTRUN -> [TIMEOUT][113] ([Intel XE#1473])
   [113]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-1/igt@xe_evict@evict-beng-threads-large.html

  * igt@xe_evict@evict-mixed-many-threads-small:
    - shard-bmg:          NOTRUN -> [TIMEOUT][114] ([Intel XE#1473] / [Intel XE#2472])
   [114]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-7/igt@xe_evict@evict-mixed-many-threads-small.html

  * igt@xe_exec_basic@multigpu-once-bindexecqueue-userptr-rebind:
    - shard-bmg:          NOTRUN -> [SKIP][115] ([Intel XE#2322]) +6 other tests skip
   [115]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-5/igt@xe_exec_basic@multigpu-once-bindexecqueue-userptr-rebind.html

  * igt@xe_exec_fault_mode@twice-bindexecqueue-userptr-invalidate-race-imm:
    - shard-dg2-set2:     NOTRUN -> [SKIP][116] ([Intel XE#288]) +6 other tests skip
   [116]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-435/igt@xe_exec_fault_mode@twice-bindexecqueue-userptr-invalidate-race-imm.html

  * igt@xe_oa@invalid-oa-metric-set-id:
    - shard-dg2-set2:     NOTRUN -> [SKIP][117] ([Intel XE#2541] / [Intel XE#3573]) +1 other test skip
   [117]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-433/igt@xe_oa@invalid-oa-metric-set-id.html

  * igt@xe_pat@pat-index-xehpc:
    - shard-dg2-set2:     NOTRUN -> [SKIP][118] ([Intel XE#2838] / [Intel XE#979])
   [118]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-463/igt@xe_pat@pat-index-xehpc.html

  * igt@xe_peer2peer@write:
    - shard-bmg:          NOTRUN -> [SKIP][119] ([Intel XE#2427])
   [119]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-5/igt@xe_peer2peer@write.html

  * igt@xe_pm@s3-d3cold-basic-exec:
    - shard-bmg:          NOTRUN -> [SKIP][120] ([Intel XE#2284])
   [120]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-1/igt@xe_pm@s3-d3cold-basic-exec.html

  * igt@xe_query@multigpu-query-uc-fw-version-huc:
    - shard-bmg:          NOTRUN -> [SKIP][121] ([Intel XE#944]) +1 other test skip
   [121]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-8/igt@xe_query@multigpu-query-uc-fw-version-huc.html

  
#### Possible fixes ####

  * igt@kms_async_flips@alternate-sync-async-flip-atomic:
    - shard-bmg:          [FAIL][122] ([Intel XE#3701] / [Intel XE#3718]) -> [PASS][123]
   [122]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-7/igt@kms_async_flips@alternate-sync-async-flip-atomic.html
   [123]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-1/igt@kms_async_flips@alternate-sync-async-flip-atomic.html

  * igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-dp-2:
    - shard-bmg:          [FAIL][124] ([Intel XE#3802]) -> [PASS][125]
   [124]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-7/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-dp-2.html
   [125]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-1/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-dp-2.html

  * igt@kms_async_flips@async-flip-with-page-flip-events:
    - shard-dg2-set2:     [INCOMPLETE][126] -> [PASS][127] +2 other tests pass
   [126]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-dg2-436/igt@kms_async_flips@async-flip-with-page-flip-events.html
   [127]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-435/igt@kms_async_flips@async-flip-with-page-flip-events.html

  * igt@kms_cursor_legacy@cursorb-vs-flipb-toggle:
    - shard-bmg:          [SKIP][128] ([Intel XE#2291]) -> [PASS][129] +5 other tests pass
   [128]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-6/igt@kms_cursor_legacy@cursorb-vs-flipb-toggle.html
   [129]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-1/igt@kms_cursor_legacy@cursorb-vs-flipb-toggle.html

  * igt@kms_display_modes@extended-mode-basic:
    - shard-bmg:          [SKIP][130] ([Intel XE#2425]) -> [PASS][131]
   [130]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-6/igt@kms_display_modes@extended-mode-basic.html
   [131]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-1/igt@kms_display_modes@extended-mode-basic.html

  * igt@kms_dp_linktrain_fallback@dp-fallback:
    - shard-bmg:          [SKIP][132] ([Intel XE#3070]) -> [PASS][133]
   [132]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-6/igt@kms_dp_linktrain_fallback@dp-fallback.html
   [133]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-5/igt@kms_dp_linktrain_fallback@dp-fallback.html

  * igt@kms_feature_discovery@display-2x:
    - shard-bmg:          [SKIP][134] ([Intel XE#2373]) -> [PASS][135]
   [134]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-6/igt@kms_feature_discovery@display-2x.html
   [135]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-1/igt@kms_feature_discovery@display-2x.html

  * igt@kms_flip@2x-flip-vs-expired-vblank@ab-dp2-hdmi-a3:
    - shard-bmg:          [FAIL][136] ([Intel XE#2882]) -> [PASS][137] +1 other test pass
   [136]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-5/igt@kms_flip@2x-flip-vs-expired-vblank@ab-dp2-hdmi-a3.html
   [137]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-1/igt@kms_flip@2x-flip-vs-expired-vblank@ab-dp2-hdmi-a3.html

  * igt@kms_flip@2x-flip-vs-expired-vblank@ab-hdmi-a6-dp4:
    - shard-dg2-set2:     [FAIL][138] ([Intel XE#301]) -> [PASS][139] +5 other tests pass
   [138]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-dg2-436/igt@kms_flip@2x-flip-vs-expired-vblank@ab-hdmi-a6-dp4.html
   [139]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-463/igt@kms_flip@2x-flip-vs-expired-vblank@ab-hdmi-a6-dp4.html

  * igt@kms_flip@2x-plain-flip-fb-recreate:
    - shard-bmg:          [SKIP][140] ([Intel XE#2316]) -> [PASS][141] +1 other test pass
   [140]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-6/igt@kms_flip@2x-plain-flip-fb-recreate.html
   [141]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-3/igt@kms_flip@2x-plain-flip-fb-recreate.html

  * igt@kms_flip@blocking-wf_vblank:
    - shard-lnl:          [FAIL][142] ([Intel XE#886]) -> [PASS][143] +2 other tests pass
   [142]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-lnl-2/igt@kms_flip@blocking-wf_vblank.html
   [143]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-lnl-5/igt@kms_flip@blocking-wf_vblank.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@a-hdmi-a3:
    - shard-bmg:          [FAIL][144] ([Intel XE#3321]) -> [PASS][145]
   [144]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-6/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-hdmi-a3.html
   [145]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-8/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-hdmi-a3.html

  * igt@kms_plane@plane-panning-bottom-right-suspend:
    - shard-bmg:          [INCOMPLETE][146] ([Intel XE#1035]) -> [PASS][147] +2 other tests pass
   [146]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-2/igt@kms_plane@plane-panning-bottom-right-suspend.html
   [147]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-8/igt@kms_plane@plane-panning-bottom-right-suspend.html

  * igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-6:
    - shard-dg2-set2:     [FAIL][148] ([Intel XE#361]) -> [PASS][149]
   [148]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-dg2-436/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-6.html
   [149]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-435/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-6.html

  * igt@kms_pm_dc@dc5-psr:
    - shard-lnl:          [FAIL][150] ([Intel XE#718]) -> [PASS][151]
   [150]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-lnl-2/igt@kms_pm_dc@dc5-psr.html
   [151]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-lnl-7/igt@kms_pm_dc@dc5-psr.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-a-edp-1:
    - shard-lnl:          [FAIL][152] ([Intel XE#899]) -> [PASS][153]
   [152]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-lnl-5/igt@kms_universal_plane@cursor-fb-leak@pipe-a-edp-1.html
   [153]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-lnl-5/igt@kms_universal_plane@cursor-fb-leak@pipe-a-edp-1.html

  * igt@xe_ccs@suspend-resume:
    - shard-dg2-set2:     [INCOMPLETE][154] ([Intel XE#1616]) -> [PASS][155]
   [154]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-dg2-436/igt@xe_ccs@suspend-resume.html
   [155]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-434/igt@xe_ccs@suspend-resume.html

  * igt@xe_exec_threads@threads-hang-fd-userptr-invalidate:
    - shard-dg2-set2:     [DMESG-WARN][156] -> [PASS][157]
   [156]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-dg2-434/igt@xe_exec_threads@threads-hang-fd-userptr-invalidate.html
   [157]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-434/igt@xe_exec_threads@threads-hang-fd-userptr-invalidate.html

  * igt@xe_live_ktest@xe_mocs:
    - shard-lnl:          [SKIP][158] ([Intel XE#1192]) -> [PASS][159]
   [158]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-lnl-2/igt@xe_live_ktest@xe_mocs.html
   [159]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-lnl-2/igt@xe_live_ktest@xe_mocs.html

  
#### Warnings ####

  * igt@kms_content_protection@legacy:
    - shard-bmg:          [SKIP][160] ([Intel XE#2341]) -> [FAIL][161] ([Intel XE#1178])
   [160]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-6/igt@kms_content_protection@legacy.html
   [161]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-1/igt@kms_content_protection@legacy.html

  * igt@kms_flip@2x-flip-vs-suspend:
    - shard-bmg:          [INCOMPLETE][162] ([Intel XE#2597]) -> [SKIP][163] ([Intel XE#2316])
   [162]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-5/igt@kms_flip@2x-flip-vs-suspend.html
   [163]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-6/igt@kms_flip@2x-flip-vs-suspend.html

  * igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-render:
    - shard-bmg:          [SKIP][164] ([Intel XE#2311]) -> [SKIP][165] ([Intel XE#2312]) +1 other test skip
   [164]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-1/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-render.html
   [165]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-wc:
    - shard-bmg:          [SKIP][166] ([Intel XE#2312]) -> [FAIL][167] ([Intel XE#2333]) +4 other tests fail
   [166]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-wc.html
   [167]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-7/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-move:
    - shard-bmg:          [SKIP][168] ([Intel XE#2312]) -> [SKIP][169] ([Intel XE#2311]) +7 other tests skip
   [168]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-move.html
   [169]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-3/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-move.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-blt:
    - shard-bmg:          [SKIP][170] ([Intel XE#2313]) -> [SKIP][171] ([Intel XE#2312]) +3 other tests skip
   [170]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-1/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-blt.html
   [171]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt:
    - shard-bmg:          [SKIP][172] ([Intel XE#2312]) -> [SKIP][173] ([Intel XE#2313]) +10 other tests skip
   [172]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt.html
   [173]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-1/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt.html

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-bmg:          [SKIP][174] ([Intel XE#2426]) -> [FAIL][175] ([Intel XE#1729])
   [174]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-2/igt@kms_tiled_display@basic-test-pattern.html
   [175]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-1/igt@kms_tiled_display@basic-test-pattern.html

  * igt@xe_evict@evict-beng-mixed-threads-large:
    - shard-bmg:          [INCOMPLETE][176] ([Intel XE#1473]) -> [FAIL][177] ([Intel XE#1000])
   [176]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-7/igt@xe_evict@evict-beng-mixed-threads-large.html
   [177]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-8/igt@xe_evict@evict-beng-mixed-threads-large.html

  * igt@xe_evict@evict-mixed-many-threads-large:
    - shard-dg2-set2:     [TIMEOUT][178] ([Intel XE#1473]) -> [FAIL][179] ([Intel XE#1000])
   [178]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-dg2-463/igt@xe_evict@evict-mixed-many-threads-large.html
   [179]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-dg2-436/igt@xe_evict@evict-mixed-many-threads-large.html

  * igt@xe_evict@evict-mixed-threads-large:
    - shard-bmg:          [DMESG-FAIL][180] -> [TIMEOUT][181] ([Intel XE#1473] / [Intel XE#2472])
   [180]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-7/igt@xe_evict@evict-mixed-threads-large.html
   [181]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-5/igt@xe_evict@evict-mixed-threads-large.html

  * igt@xe_evict@evict-threads-large:
    - shard-bmg:          [TIMEOUT][182] ([Intel XE#1473]) -> [FAIL][183] ([Intel XE#1000])
   [182]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8164/shard-bmg-2/igt@xe_evict@evict-threads-large.html
   [183]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12344/shard-bmg-8/igt@xe_evict@evict-threads-large.html

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

  [Intel XE#1000]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1000
  [Intel XE#1035]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1035
  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [Intel XE#1126]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1126
  [Intel XE#1135]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1135
  [Intel XE#1138]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1138
  [Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
  [Intel XE#1192]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1192
  [Intel XE#1280]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1280
  [Intel XE#1439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1439
  [Intel XE#1473]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1473
  [Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
  [Intel XE#1499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1499
  [Intel XE#1600]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1600
  [Intel XE#1616]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1616
  [Intel XE#1727]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1727
  [Intel XE#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
  [Intel XE#2049]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2049
  [Intel XE#2159]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2159
  [Intel XE#2191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2191
  [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#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
  [Intel XE#2286]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2286
  [Intel XE#2291]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2291
  [Intel XE#2293]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2293
  [Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
  [Intel XE#2312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2312
  [Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
  [Intel XE#2314]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2314
  [Intel XE#2316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2316
  [Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
  [Intel XE#2321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2321
  [Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
  [Intel XE#2325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2325
  [Intel XE#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
  [Intel XE#2328]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2328
  [Intel XE#2333]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2333
  [Intel XE#2341]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2341
  [Intel XE#2370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2370
  [Intel XE#2373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2373
  [Intel XE#2380]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2380
  [Intel XE#2390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2390
  [Intel XE#2391]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2391
  [Intel XE#2425]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2425
  [Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
  [Intel XE#2427]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2427
  [Intel XE#2472]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2472
  [Intel XE#2541]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2541
  [Intel XE#2550]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2550
  [Intel XE#2597]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2597
  [Intel XE#2635]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2635
  [Intel XE#2724]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2724
  [Intel XE#2838]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2838
  [Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
  [Intel XE#288]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/288
  [Intel XE#2882]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2882
  [Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
  [Intel XE#2894]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2894
  [Intel XE#2905]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2905
  [Intel XE#2927]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2927
  [Intel XE#2961]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2961
  [Intel XE#2998]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2998
  [Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
  [Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306
  [Intel XE#3070]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3070
  [Intel XE#3113]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3113
  [Intel XE#3141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3141
  [Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
  [Intel XE#316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/316
  [Intel XE#3321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3321
  [Intel XE#3414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3414
  [Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
  [Intel XE#3573]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3573
  [Intel XE#361]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/361
  [Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
  [Intel XE#3701]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3701
  [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#3767]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3767
  [Intel XE#3768]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3768
  [Intel XE#3781]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3781
  [Intel XE#3802]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3802
  [Intel XE#3864]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3864
  [Intel XE#3869]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3869
  [Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
  [Intel XE#610]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/610
  [Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
  [Intel XE#653]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/653
  [Intel XE#718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/718
  [Intel XE#756]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/756
  [Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
  [Intel XE#836]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/836
  [Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
  [Intel XE#886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/886
  [Intel XE#899]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/899
  [Intel XE#929]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/929
  [Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
  [Intel XE#979]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/979


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

  * IGT: IGT_8164 -> IGTPW_12344
  * Linux: xe-2396-e9a5d74b7f60fe6f7d55ebe636ff871214b6caec -> xe-2397-d8f0c44e2ed948dcc45d04a0dfa83612995a702b

  IGTPW_12344: f2c153c4a567369dd10c22c3d8b8cb8ce10d3a85 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  IGT_8164: e9d9934c7c6dc6878792d82424fc928e7f6996cb @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-2396-e9a5d74b7f60fe6f7d55ebe636ff871214b6caec: e9a5d74b7f60fe6f7d55ebe636ff871214b6caec
  xe-2397-d8f0c44e2ed948dcc45d04a0dfa83612995a702b: d8f0c44e2ed948dcc45d04a0dfa83612995a702b

== Logs ==

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

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

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

* Re: [PATCH i-g-t 5/5] tests/xe_sriov_auto_provisioning: Add tests for SR-IOV auto-provisioning
  2024-12-19 15:54     ` Bernatowicz, Marcin
@ 2025-01-07 11:52       ` Laguna, Lukasz
  0 siblings, 0 replies; 17+ messages in thread
From: Laguna, Lukasz @ 2025-01-07 11:52 UTC (permalink / raw)
  To: Bernatowicz, Marcin, igt-dev
  Cc: Adam Miszczak, Jakub Kolakowski, Michał Wajdeczko,
	Michał Winiarski, Narasimha C V, Piotr Piórkowski,
	Satyanarayana K V P, Tomasz Lis

On 12/19/2024 16:54, Bernatowicz, Marcin wrote:
>
>
> On 12/19/2024 3:48 PM, Laguna, Lukasz wrote:
>> On 12/18/2024 13:00, Marcin Bernatowicz wrote:
>>> Added subtests validating below scenarios:
>>> - auto-provisioned resources are allocated by PF driver in fairly 
>>> manner,
>>> - auto-provisioned resources are released once VFs are disabled,
>>> - verify that ranges of auto-provisioned resources are exclusive.
>>>
>>> The tests rely on ggtt_provisioned, lmem_provisioned,
>>> contexts_provisioned and doorbells_provisioned debugfs attributes.
>>>
>>> Signed-off-by: Marcin Bernatowicz <marcin.bernatowicz@linux.intel.com>
>>> Cc: Adam Miszczak <adam.miszczak@linux.intel.com>
>>> Cc: Jakub Kolakowski <jakub1.kolakowski@intel.com>
>>> Cc: Lukasz Laguna <lukasz.laguna@intel.com>
>>> Cc: Michał Wajdeczko <michal.wajdeczko@intel.com>
>>> Cc: Michał Winiarski <michal.winiarski@intel.com>
>>> Cc: Narasimha C V <narasimha.c.v@intel.com>
>>> Cc: Piotr Piórkowski <piotr.piorkowski@intel.com>
>>> Cc: Satyanarayana K V P <satyanarayana.k.v.p@intel.com>
>>> Cc: Tomasz Lis <tomasz.lis@intel.com>
>>> ---
>>>   tests/intel/xe_sriov_auto_provisioning.c | 399 
>>> +++++++++++++++++++++++
>>>   tests/meson.build                        |   1 +
>>>   2 files changed, 400 insertions(+)
>>>   create mode 100644 tests/intel/xe_sriov_auto_provisioning.c
>>>
>>> diff --git a/tests/intel/xe_sriov_auto_provisioning.c b/tests/intel/ 
>>> xe_sriov_auto_provisioning.c
>>> new file mode 100644
>>> index 000000000..a5ae60525
>>> --- /dev/null
>>> +++ b/tests/intel/xe_sriov_auto_provisioning.c
>>> @@ -0,0 +1,399 @@
>>> +// SPDX-License-Identifier: MIT
>>> +/*
>>> + * Copyright(c) 2023 Intel Corporation. All rights reserved.
>>> + */
>>> +
>>> +#include <stdbool.h>
>>> +
>>> +#include "drmtest.h"
>>> +#include "igt_core.h"
>>> +#include "igt_sriov_device.h"
>>> +#include "igt_sysfs.h"
>>> +#include "xe/xe_sriov_debugfs.h"
>>> +#include "xe/xe_sriov_provisioning.h"
>>> +#include "xe/xe_query.h"
>>> +
>>> +/**
>>> + * TEST: xe_sriov_auto_provisioning
>>> + * Category: Core
>>> + * Mega feature: SR-IOV
>>> + * Sub-category: provisioning
>>> + * Functionality: auto-provisioning
>>> + * Run type: FULL
>>> + * Description: Examine behavior of SR-IOV auto-provisioning
>>> + *
>>> + * SUBTEST: auto-provisioning-fair
>>
>> As we have auto_provisioning in the test name then maybe subtest 
>> named "fair" would be sufficient?
>
> maybe fair-allocation ?

Yeah, sounds better.

>
>>
>>> + * Description:
>>> + *   Verify that auto-provisioned resources are allocated by PF 
>>> driver in fairly manner
>>> + *
>>> + * SUBTEST: auto-provisioned-resources-released-on-vfs-disabling
>>
>> Similar to the above, maybe "resources-releasing-on-vfs-disabling"?
>
> ok
>
>>
>>> + * Description:
>>> + *   Verify that auto-provisioned resources are released once VFs 
>>> are disabled
>>> + *
>>> + * SUBTEST: exclusive-ranges
>>> + * Description:
>>> + *   Verify that ranges of auto-provisioned resources are exclusive
>>> + */
>>> +
>>> +IGT_TEST_DESCRIPTION("Xe tests for SR-IOV auto-provisioning");
>>> +
>>> +static int compare_ranges_by_vf_id(const void *a, const void *b)
>>> +{
>>> +    const struct xe_sriov_provisioned_range *range_a = a;
>>> +    const struct xe_sriov_provisioned_range *range_b = b;
>>> +
>>> +    return (range_a->vf_id - range_b->vf_id);
>>> +}
>>> +
>>> +static int validate_vf_ids(enum xe_sriov_shared_res res,
>>> +               struct xe_sriov_provisioned_range *ranges,
>>> +               unsigned int nr_ranges, unsigned int num_vfs)
>>> +{
>>> +    unsigned int current_vf_id = 0;
>>> +
>>> +    igt_assert(num_vfs);
>>> +
>>> +    if (igt_debug_on_f(nr_ranges == 0,
>>> +               "%s: No VF ranges\n",
>>> +               xe_sriov_debugfs_provisioned_attr_name(res)))
>>> +        return -ENOENT;
>>> +
>>> +    igt_assert(ranges);
>>> +    qsort(ranges, nr_ranges, sizeof(ranges[0]), 
>>> compare_ranges_by_vf_id);
>>> +
>>> +    for (unsigned int i = 0; i < nr_ranges; i++) {
>>> +        unsigned int vf_id = ranges[i].vf_id;
>>> +
>>> +        /* Skip duplicates */
>>> +        if (vf_id == current_vf_id)
>>> +            continue;
>>> +
>>> +        if (igt_debug_on_f(vf_id < 1 || vf_id > num_vfs,
>>> +                   "%s: Out of range VF%u\n",
>>> + xe_sriov_debugfs_provisioned_attr_name(res), vf_id))
>>> +            return -ERANGE;
>>> +
>>> +        if (igt_debug_on_f(vf_id > current_vf_id + 1,
>>> +                   "%s: Missing VF%u\n",
>>> + xe_sriov_debugfs_provisioned_attr_name(res),
>>> +                   current_vf_id + 1))
>>> +            return -ESRCH;
>>> +
>>> +        current_vf_id = vf_id;
>>> +    }
>>> +
>>> +    if (igt_debug_on_f(current_vf_id != num_vfs,
>>> +               "%s: Missing VF%u\n",
>>> +               xe_sriov_debugfs_provisioned_attr_name(res), num_vfs))
>>> +        return -ESRCH;
>>> +
>>> +    return 0;
>>> +}
>>> +
>>> +/* Expects ranges sorted by VF IDs */
>>> +static int validate_fair_allocation(enum xe_sriov_shared_res res,
>>> +                    struct xe_sriov_provisioned_range *ranges,
>>> +                    unsigned int nr_ranges)
>>> +{
>>> +    uint64_t expected_allocation = 0;
>>> +    uint64_t current_allocation = 0;
>>> +    unsigned int current_vf_id;
>>> +
>>> +    igt_assert(nr_ranges);
>>> +    current_vf_id = ranges[0].vf_id;
>>> +
>>> +    for (unsigned int i = 0; i <= nr_ranges; i++) {
>>> +        if (i == nr_ranges || ranges[i].vf_id != current_vf_id) {
>>> +            /* Check allocation consistency for the previous VF ID */
>>> +            if (expected_allocation == 0)
>>> +                expected_allocation = current_allocation;
>>> +            else if (igt_debug_on_f(current_allocation != 
>>> expected_allocation,
>>> +                        "%s: Allocation mismatch, expected=%lu 
>>> VF%u=%lu\n",
>>> + xe_sriov_debugfs_provisioned_attr_name(res),
>>> +                        expected_allocation, current_vf_id,
>>> +                        current_allocation))
>>> +                return -1;
>>> +
>>> +            /* Reset for the new VF ID (if not at the end) */
>>> +            if (i < nr_ranges) {
>>> +                current_vf_id = ranges[i].vf_id;
>>> +                current_allocation = 0;
>>> +            }
>>> +        }
>>> +
>>> +        /* Accumulate allocation for the current VF ID */
>>> +        if (i < nr_ranges)
>>> +            current_allocation += ranges[i].end - ranges[i].start + 1;
>>> +    }
>>> +
>>> +    return 0;
>>> +}
>>> +
>>
>> Handling cases where one VF can have more than one range of resource 
>> adds extra complexity to the test logic. I started wondering if we 
>> should consider such case as valid. Maybe we should assert earlier 
>> instead?
>
> You mean "+=" complexity ?
>
> current_allocation += ranges[i].end - ranges[i].start + 1;
>
> vs
>
> current_allocation = ranges[i].end - ranges[i].start + 1;
>
>
> and
>
> /* Skip duplicates */
> if (vf_id == current_vf_id)
>     continue;
>
> vs
>
> if (vf_id == current_vf_id)
>     return err;
>
> in validate_vf_ids ?
>

I though that some conditions and operations are introduced because of 
the support of multiple ranges, but that was my misunderstanding. When I 
looked on this again, it's fine.


> Maybe we can move the validate_vf_ids to the lib
> or after agree no duplicate ids/gaps allowed return sorted by VF id 
> entries from read function ?
>
>>
>>> +static int check_fair_allocation(int pf_fd, unsigned int num_vfs, 
>>> unsigned int gt_id,
>>> +                 enum xe_sriov_shared_res res)
>>> +{
>>> +    struct xe_sriov_provisioned_range *ranges;
>>> +    unsigned int nr_ranges;
>>> +    int ret;
>>> +
>>> +    ret = xe_sriov_pf_debugfs_read_provisioned_ranges(pf_fd, res, 
>>> gt_id, &ranges, &nr_ranges);
>>> +    if (igt_debug_on_f(ret, "Failed read %s on GT%u (%d)\n",
>>> +               xe_sriov_debugfs_provisioned_attr_name(res), gt_id, 
>>> ret))
>>> +        return ret;
>>> +
>>> +    ret = validate_vf_ids(res, ranges, nr_ranges, num_vfs);
>>> +    if (ret) {
>>> +        free(ranges);
>>> +        return ret;
>>> +    }
>>> +
>>> +    ret = validate_fair_allocation(res, ranges, nr_ranges);
>>> +    if (ret) {
>>> +        free(ranges);
>>> +        return ret;
>>> +    }
>>> +
>>> +    free(ranges);
>>> +
>>> +    return 0;
>>> +}
>>> +
>>> +static void auto_provisioning_fair(int pf_fd, unsigned int num_vfs)
>>> +{
>>> +    enum xe_sriov_shared_res res;
>>> +    unsigned int gt;
>>> +    int fails = 0;
>>> +
>>> +    igt_sriov_disable_driver_autoprobe(pf_fd);
>>> +    igt_sriov_enable_vfs(pf_fd, num_vfs);
>>> +
>>> +    xe_for_each_gt(pf_fd, gt) {
>>> +        xe_sriov_for_each_provisionable_shared_res(res, pf_fd, gt) {
>>
>> I was OK with not defining dynamic subtest per GT to reduce the test 
>> execution time, but I had mixed feelings about not having separate 
>> subtests per resource.
>> But the more I think about it, the more I'm convinced to your 
>> approach. For manual reproduction with specific resource we can 
>> define some test option taking the resource we want to validate (no 
>> need to implement it now, we can add it when needed).
>
> I don't have a strong opinion on this. The dynamic subtest logic 
> remains unchanged from the original version, except for the last 
> exclusive-ranges subtest, which was adjusted for consistency. We may 
> have fewer subtests/statistics, but each subtest should correctly 
> report if any resource "misbehaves".
>
> Thanks for review,
> marcin
>>
>>> +            if (igt_debug_on_f(check_fair_allocation(pf_fd, 
>>> num_vfs, gt, res),
>>> +                       "%s fair allocation failed on gt%u\n",
>>> +                       xe_sriov_shared_res_to_string(res), gt))
>>> +                fails++;
>>> +        }
>>> +    }
>>> +
>>> +    igt_sriov_disable_vfs(pf_fd);
>>> +
>>> +    igt_fail_on_f(fails, "fair allocation failed\n");
>>> +}
>>> +
>>> +static void auto_provisioning_release(int pf_fd, unsigned int num_vfs)
>>> +{
>>> +    struct xe_sriov_provisioned_range *ranges;
>>> +    unsigned int nr_ranges;
>>> +    enum xe_sriov_shared_res res;
>>> +    unsigned int gt;
>>> +    int fails = 0;
>>> +
>>> +    igt_sriov_disable_driver_autoprobe(pf_fd);
>>> +    igt_sriov_enable_vfs(pf_fd, num_vfs);
>>> +
>>> +    xe_for_each_gt(pf_fd, gt) {
>>> +        xe_sriov_for_each_provisionable_shared_res(res, pf_fd, gt) {
>>> +            if 
>>> (igt_warn_on_f(xe_sriov_pf_debugfs_read_provisioned_ranges(pf_fd, res,
>>> +                                              gt,
>>> +                                              &ranges,
>>> + &nr_ranges),
>>> +                      "Failed read %s on gt%u\n",
>>> + xe_sriov_debugfs_provisioned_attr_name(res), gt)) {
>>> +                continue;
>>> +            }
>>> +
>>> +            igt_warn_on_f(validate_vf_ids(res, ranges, nr_ranges, 
>>> num_vfs),
>>> +                      "%s: VF IDs validation failed on gt%u\n",
>>> + xe_sriov_debugfs_provisioned_attr_name(res), gt);
>>> +            free(ranges);
>>> +        }
>>> +    }
>>> +
>>> +    igt_sriov_disable_vfs(pf_fd);
>>> +
>>> +    xe_for_each_gt(pf_fd, gt) {
>>> +        xe_sriov_for_each_provisionable_shared_res(res, pf_fd, gt) {
>>> +            if 
>>> (igt_debug_on_f(xe_sriov_pf_debugfs_read_provisioned_ranges(pf_fd, res,
>>> +                                               gt,
>>> +                                               &ranges,
>>> + &nr_ranges),
>>> +                       "Failed read %s on gt%u\n",
>>> + xe_sriov_debugfs_provisioned_attr_name(res), gt)) {
>>> +                fails++;
>>> +                continue;
>>> +            }
>>> +
>>> +            if (igt_debug_on_f(nr_ranges,
>>> +                       "%s contains unexpected ranges on gt%u\n",
>>> + xe_sriov_debugfs_provisioned_attr_name(res), gt)) {
>>> +                fails++;
>>> +                for (unsigned int i = 0; i < nr_ranges; i++) {
>>> +                    igt_debug((res == XE_SRIOV_SHARED_RES_GGTT) ?
>>> +                            "%s:VF%u: %lx-%lx\n" :
>>> +                            "%s:VF%u %lu-%lu\n",
>>> +                          xe_sriov_shared_res_to_string(res),
>>> +                          ranges[i].vf_id, ranges[i].start, 
>>> ranges[i].end);
>>> +                }
>>> +            }
>>> +            free(ranges);
>>> +        }
>>> +    }
>>> +
>>> +    igt_fail_on_f(fails, "shared resource release check failed\n");
>>> +}
>>> +
>>> +static int compare_ranges_by_start(const void *a, const void *b)
>>> +{
>>> +    const struct xe_sriov_provisioned_range *range_a = a;
>>> +    const struct xe_sriov_provisioned_range *range_b = b;
>>> +
>>> +    if (range_a->start < range_b->start)
>>> +        return -1;
>>> +    if (range_a->start > range_b->start)
>>> +        return 1;
>>> +    return 0;
>>> +}
>>> +
>>> +static int check_no_overlap(int pf_fd, unsigned int num_vfs, 
>>> unsigned int gt_id,
>>> +                enum xe_sriov_shared_res res)
>>> +{
>>> +    struct xe_sriov_provisioned_range *ranges;
>>> +    unsigned int nr_ranges;
>>> +    int ret;
>>> +
>>> +    ret = xe_sriov_pf_debugfs_read_provisioned_ranges(pf_fd, res, 
>>> gt_id, &ranges, &nr_ranges);
>>> +    if (ret)
>>> +        return ret;
>>> +
>>> +    ret = validate_vf_ids(res, ranges, nr_ranges, num_vfs);
>>> +    if (ret) {
>>> +        free(ranges);
>>> +        return ret;
>>> +    }
>>> +
>>> +    igt_assert(ranges);
>>> +    qsort(ranges, nr_ranges, sizeof(ranges[0]), 
>>> compare_ranges_by_start);
>>> +
>>> +    for (unsigned int i = 0; i < nr_ranges - 1; i++)
>>> +        if (ranges[i].end >= ranges[i + 1].start) {
>>> +            igt_debug((res == XE_SRIOV_SHARED_RES_GGTT) ?
>>> +                  "Overlapping ranges: VF%u [%lx-%lx] and VF%u 
>>> [%lx- %lx]\n" :
>>> +                  "Overlapping ranges: VF%u [%lu-%lu] and VF%u 
>>> [%lu- %lu]\n",
>>> +                  ranges[i].vf_id, ranges[i].start, ranges[i].end,
>>> +                  ranges[i + 1].vf_id, ranges[i + 1].start, 
>>> ranges[i + 1].end);
>>> +            free(ranges);
>>> +            return -1;
>>> +        }
>>> +
>>> +    free(ranges);
>>> +
>>> +    return 0;
>>> +}
>>> +
>>> +static void auto_provisioning_exclusive_ranges(int pf_fd, unsigned 
>>> int num_vfs)
>>> +{
>>> +    enum xe_sriov_shared_res res;
>>> +    unsigned int gt;
>>> +    int fails = 0;
>>> +
>>> +    igt_sriov_disable_driver_autoprobe(pf_fd);
>>> +    igt_sriov_enable_vfs(pf_fd, num_vfs);
>>> +
>>> +    xe_for_each_gt(pf_fd, gt) {
>>> +        xe_sriov_for_each_provisionable_shared_res(res, pf_fd, gt) {
>>> +            if (res == XE_SRIOV_SHARED_RES_LMEM)
>>> +                /*
>>> +                 * lmem_provisioned is not applicable for this test,
>>> +                 * as it does not expose ranges
>>> +                 */
>>> +                continue;
>>> +
>>> +            if (igt_debug_on_f(check_no_overlap(pf_fd, num_vfs, gt, 
>>> res),
>>> +                       "%s overlap check failed on gt%u\n",
>>> +                       xe_sriov_shared_res_to_string(res), gt))
>>> +                fails++;
>>> +        }
>>> +    }
>>> +
>>> +    igt_sriov_disable_vfs(pf_fd);
>>> +
>>> +    igt_fail_on_f(fails, "exclusive ranges check failed\n");
>>> +}
>>> +
>>> +igt_main
>>> +{
>>> +    enum xe_sriov_shared_res res;
>>> +    unsigned int gt;
>>> +    bool autoprobe;
>>> +    int pf_fd;
>>> +
>>> +    igt_fixture {
>>> +        struct xe_sriov_provisioned_range *ranges;
>>> +        unsigned int nr_ranges;
>>> +        int ret;
>>> +
>>> +        pf_fd = drm_open_driver(DRIVER_XE);
>>> +        igt_require(igt_sriov_is_pf(pf_fd));
>>> +        igt_require(igt_sriov_get_enabled_vfs(pf_fd) == 0);
>>> +
>>> +        xe_for_each_gt(pf_fd, gt) {
>>> +            xe_sriov_for_each_provisionable_shared_res(res, pf_fd, 
>>> gt) {
>>> +                ret = 
>>> xe_sriov_pf_debugfs_read_provisioned_ranges(pf_fd, res, gt,
>>> +                                          &ranges,
>>> +                                          &nr_ranges);
>>> +                igt_skip_on_f(ret, "Failed read %s on gt%u (%d)\n",
>>> + xe_sriov_debugfs_provisioned_attr_name(res),
>>> +                          gt, ret);
>>> +                igt_skip_on_f(nr_ranges != 0, "Unexpected %s 
>>> content on gt%u\n",
>>> + xe_sriov_debugfs_provisioned_attr_name(res), gt);
>>> +            }
>>> +        }
>>> +        autoprobe = igt_sriov_is_driver_autoprobe_enabled(pf_fd);
>>> +    }
>>> +
>>> +    igt_describe("Verify that auto-provisioned resources are 
>>> allocated by PF driver in fairly manner");
>>> +    igt_subtest_with_dynamic("auto-provisioning-fair") {
>>> +        for_random_sriov_num_vfs(pf_fd, num_vfs) {
>>> +            igt_dynamic_f("numvfs-random") {
>>> +                igt_debug("numvfs=%u\n", num_vfs);
>>> +                auto_provisioning_fair(pf_fd, num_vfs);
>>> +            }
>>> +        }
>>> +    }
>>> +
>>> +    igt_describe("Verify that auto-provisioned resources are 
>>> released once VFs are disabled");
>>> + igt_subtest_with_dynamic("auto-provisioned-resources-released-on- 
>>> vfs-disabling") {
>>> +        for_random_sriov_num_vfs(pf_fd, num_vfs) {
>>> +            igt_dynamic_f("numvfs-random") {
>>> +                igt_debug("numvfs=%u\n", num_vfs);
>>> +                auto_provisioning_release(pf_fd, num_vfs);
>>> +            }
>>> +        }
>>> +    }
>>> +
>>> +    igt_describe("Verify that ranges of auto-provisioned resources 
>>> are exclusive");
>>> +    igt_subtest_with_dynamic_f("exclusive-ranges") {
>>> +        unsigned int total_vfs = igt_sriov_get_total_vfs(pf_fd);
>>> +
>>> +        igt_skip_on(total_vfs < 2);
>>> +
>>> +        for_random_sriov_vf_in_range(pf_fd, 2, total_vfs, num_vfs) {
>>> +            igt_dynamic_f("numvfs-random") {
>>> +                igt_debug("numvfs=%u\n", num_vfs);
>>> +                auto_provisioning_exclusive_ranges(pf_fd, num_vfs);
>>> +            }
>>> +        }
>>> +    }
>>> +
>>> +    igt_fixture {
>>> +        igt_sriov_disable_vfs(pf_fd);
>>> +        /* abort to avoid execution of next tests with enabled VFs */
>>> +        igt_abort_on_f(igt_sriov_get_enabled_vfs(pf_fd) > 0, 
>>> "Failed to disable VF(s)");
>>> +        autoprobe ? igt_sriov_enable_driver_autoprobe(pf_fd) :
>>> +                igt_sriov_disable_driver_autoprobe(pf_fd);
>>> +        igt_abort_on_f(autoprobe != 
>>> igt_sriov_is_driver_autoprobe_enabled(pf_fd),
>>> +                   "Failed to restore sriov_drivers_autoprobe 
>>> value\n");
>>> +        drm_close_driver(pf_fd);
>>> +    }
>>> +}
>>> diff --git a/tests/meson.build b/tests/meson.build
>>> index 2724c7a9a..01076f401 100644
>>> --- a/tests/meson.build
>>> +++ b/tests/meson.build
>>> @@ -315,6 +315,7 @@ intel_xe_progs = [
>>>       'xe_vm',
>>>       'xe_waitfence',
>>>       'xe_spin_batch',
>>> +    'xe_sriov_auto_provisioning',
>>>       'xe_sriov_flr',
>>>       'xe_sysfs_defaults',
>>>       'xe_sysfs_preempt_timeout',
>

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

end of thread, other threads:[~2025-01-07 11:52 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-18 12:00 [PATCH i-g-t 0/5] Add xe_sriov_auto_provisioning tests Marcin Bernatowicz
2024-12-18 12:00 ` [PATCH i-g-t 1/5] lib/xe/xe_sriov_debugfs: Add debugfs get/set functions for u32, u64, bool Marcin Bernatowicz
2024-12-18 14:18   ` Laguna, Lukasz
2024-12-18 12:00 ` [PATCH i-g-t 2/5] lib/xe/xe_sriov_provisioning: Add accessors for quota/spare attributes Marcin Bernatowicz
2024-12-18 14:28   ` Laguna, Lukasz
2024-12-18 12:00 ` [PATCH i-g-t 3/5] lib/xe/xe_sriov_provisioning: Add shared resource provisionability check Marcin Bernatowicz
2024-12-18 14:47   ` Laguna, Lukasz
2024-12-18 12:00 ` [PATCH i-g-t 4/5] lib/igt_sriov_device: Add helper functions for VF range validation Marcin Bernatowicz
2024-12-19 14:39   ` Laguna, Lukasz
2024-12-18 12:00 ` [PATCH i-g-t 5/5] tests/xe_sriov_auto_provisioning: Add tests for SR-IOV auto-provisioning Marcin Bernatowicz
2024-12-19 14:48   ` Laguna, Lukasz
2024-12-19 15:54     ` Bernatowicz, Marcin
2025-01-07 11:52       ` Laguna, Lukasz
2024-12-18 22:25 ` ✓ i915.CI.BAT: success for Add xe_sriov_auto_provisioning tests Patchwork
2024-12-19  1:00 ` ✓ Xe.CI.BAT: " Patchwork
2024-12-19 12:22 ` ✗ i915.CI.Full: failure " Patchwork
2024-12-19 17:51 ` ✗ 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