igt-dev.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH i-g-t v4 00/41] VKMS configfs tests
@ 2025-08-07  7:45 José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 01/41] lib/drmtest: Add VKMS as a known driver type José Expósito
                   ` (44 more replies)
  0 siblings, 45 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Hi everyone,

This series add tests for the VKMS + configfs work Louis Chauvet and I are doing
in the kernel.

This new functionality allows to configure one or more VKMS instances without
having to reload the driver using configfs.

For more details, have a look to the kernel patchset and the documentation in
"vkms.rst" (not merged yet). [1]

There was a previous attempt to implement this tests [2] and I kept copyright
were required.

Massive thank you to Louis Chauvet who is doing a fenomenal work reviewing this
(very long) series of patches.

Best wishes,
José Expósito

[1] https://lore.kernel.org/dri-devel/20250507135431.53907-1-jose.exposito89@gmail.com/
[2] https://lists.freedesktop.org/archives/igt-dev/2023-September/060717.html

Changes in v4:

  - Rebased on the latest master branch
  - Added reviewed-by tags (Louis)
  - Added missing "static" to some consts (Kamil)
  - Updated copyright year (Kamil)
  - Using #include <limits.h> instead of <linux/limits.h> (Kamil)
  - Sorted alphabetically includes (Kamil)
  - Dropped VKMS tests from the testplan (Kamil and Karthik)
  - Link to v3: https://lore.kernel.org/igt-dev/20250715102513.5636-1-jose.exposito89@gmail.com/

Changes in v3:

  - Rebased on the latest master branch
  - Link to v2: https://lore.kernel.org/igt-dev/20250313173318.5818-1-jose.exposito89@gmail.com/

Changes in v2:
  - Applied review comments by Louis Chauvet:
    - Added missing references to DRIVER_VKMS in drmtest.c
    - Loading vkms with drm_load_module(DRIVER_VKMS) in igt_fixture 
    - Documented igt_is_mountpoint()
    - Checked the return value of snprintf() and fprintf()
    - Removed unnecessary empty items ({ {} }) in items in igt_vkms_config_t
    - Added new tests testing the valid values for planes, CRTCs and connectors
    - Remove code duplication generating configfs paths by adding helpers
  - Using udev instead of drmGetDevices() to find VKMS devices in a new patch
    "lib/igt_device_scan: Allow to find device by name". This change is required
    to support the faux bus. See:
    https://lists.freedesktop.org/archives/igt-dev/2025-February/086510.html
  - Rebased on the latest "master"
  - Link to v1: https://lists.freedesktop.org/archives/igt-dev/2025-February/086071.html

José Expósito (41):
  lib/drmtest: Add VKMS as a known driver type
  lib/vkms: Add minimal VKMS library and test device default files
  lib/vkms: Allow to enable/disable VKMS devices
  tests/vkms_configfs: Test device invalid values
  lib/vkms: Test plane default files
  lib/vkms: Test plane default values
  lib/vkms: Test plane invalid values
  tests/vkms_configfs: Test plane valid values
  lib/vkms: Test CRTC default files
  lib/vkms: Test CRTC default values
  lib/vkms: Test CRTC invalid values
  tests/vkms_configfs: Test CRTC valid values
  lib/vkms: Test encoder default files
  lib/vkms: Test connector default files
  lib/vkms: Test connector default values
  lib/vkms: Test connector invalid values
  tests/vkms_configfs: Test connector valid values
  lib/vkms: Test attaching planes to CRTCs
  lib/vkms: Test attaching encoders to CRTCs
  lib/vkms: Test attaching connectors to encoders
  lib/igt_device_scan: Allow to find device by sysname
  tests/vkms_configfs: Test enablement without pipeline items
  lib/vkms: Create VKMS device from static config
  tests/vkms_configfs: Test adding too many planes
  tests/vkms_configfs: Test not adding a primary plane
  tests/vkms_configfs: Test adding multiple primary planes
  tests/vkms_configfs: Test adding multiple cursor planes
  tests/vkms_configfs: Test adding a plane without possible CRTCs
  tests/vkms_configfs: Test enabling a device without CRTCs
  tests/vkms_configfs: Test enabling a device with too many CRTCs
  tests/vkms_configfs: Test enabling a device without encoders
  tests/vkms_configfs: Test enabling a device with too many encoders
  tests/vkms_configfs: Test adding an encoder without possible CRTCs
  tests/vkms_configfs: Test adding a CRTC without encoders
  tests/vkms_configfs: Test enabling a device without connectors
  tests/vkms_configfs: Test enabling a device with too many connectors
  lib/vkms: Test changing enabled device planes
  lib/vkms: Test changing enabled device CRTCs
  lib/vkms: Test changing enabled device encoders
  lib/vkms: Test changing enabled device connectors
  tests/vkms_configfs: Test connector hot-plug

 lib/drmtest.c              |   21 +
 lib/drmtest.h              |    6 +-
 lib/igt_device_scan.c      |   22 +
 lib/igt_device_scan.h      |    2 +
 lib/igt_vkms.c             | 1003 ++++++++++++++++++
 lib/igt_vkms.h             |  132 +++
 lib/meson.build            |    1 +
 meson.build                |    8 +
 tests/meson.build          |    2 +
 tests/vkms/meson.build     |   13 +
 tests/vkms/vkms_configfs.c | 1962 ++++++++++++++++++++++++++++++++++++
 11 files changed, 3171 insertions(+), 1 deletion(-)
 create mode 100644 lib/igt_vkms.c
 create mode 100644 lib/igt_vkms.h
 create mode 100644 tests/vkms/meson.build
 create mode 100644 tests/vkms/vkms_configfs.c


base-commit: dfce662f38d1e272363d37a9cfbcbfee379fa851
-- 
2.50.1


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

* [PATCH i-g-t v4 01/41] lib/drmtest: Add VKMS as a known driver type
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-12 15:33   ` Kamil Konieczny
  2025-08-07  7:45 ` [PATCH i-g-t v4 02/41] lib/vkms: Add minimal VKMS library and test device default files José Expósito
                   ` (43 subsequent siblings)
  44 siblings, 1 reply; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito, Jim Shargo, Marius Vlad

As we are going to add VKMS specific tests, allow to check if it is
available.

Co-developed-by: Jim Shargo <jshargo@chromium.org>
Signed-off-by: Jim Shargo <jshargo@chromium.org>
Co-developed-by: Marius Vlad <marius.vlad@collabora.com>
Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/drmtest.c | 21 +++++++++++++++++++++
 lib/drmtest.h |  6 +++++-
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/lib/drmtest.c b/lib/drmtest.c
index 436b6de78..943ea8dbe 100644
--- a/lib/drmtest.c
+++ b/lib/drmtest.c
@@ -223,6 +223,7 @@ static const struct module {
 	{ DRIVER_V3D, "v3d" },
 	{ DRIVER_VC4, "vc4" },
 	{ DRIVER_VGEM, "vgem" },
+	{ DRIVER_VKMS, "vkms" },
 	{ DRIVER_VMWGFX, "vmwgfx" },
 	{ DRIVER_XE, "xe" },
 	{}
@@ -295,6 +296,8 @@ static const char *chipset_to_str(int chipset)
 		return "xe";
 	case DRIVER_VMWGFX:
 		return "vmwgfx";
+	case DRIVER_VKMS:
+		return "vkms";
 	case DRIVER_ANY:
 		return "any";
 	default:
@@ -971,3 +974,21 @@ void igt_require_xe(int fd)
 {
 	igt_require(is_xe_device(fd));
 }
+
+void igt_require_vkms(void)
+{
+	/*
+	 * Since VKMS can create and destroy virtual drivers at will, instead
+	 * look to make sure the driver is installed.
+	 */
+	struct stat s = {};
+	int ret;
+	const char *vkms_module_dir = "/sys/module/vkms";
+
+	ret = stat(vkms_module_dir, &s);
+
+	igt_require_f(ret == 0, "VKMS stat of %s returned %d (%s)\n",
+		      vkms_module_dir, ret, strerror(ret));
+	igt_require_f(S_ISDIR(s.st_mode),
+		      "VKMS stat of %s was not a directory\n", vkms_module_dir);
+}
diff --git a/lib/drmtest.h b/lib/drmtest.h
index 27e5a18e2..a9542dde2 100644
--- a/lib/drmtest.h
+++ b/lib/drmtest.h
@@ -55,14 +55,17 @@ int __get_drm_device_name(int fd, char *name, int name_size);
 #define DRIVER_MSM	(1 << 6)
 #define DRIVER_XE	(1 << 7)
 #define DRIVER_VMWGFX   (1 << 8)
+#define DRIVER_VKMS	(1 << 9)
 
 /*
  * Exclude DRVER_VGEM from DRIVER_ANY since if you run on a system
  * with vgem as well as a supported driver, you can end up with a
  * near-100% skip rate if you don't explicitly specify the device,
  * depending on device-load ordering.
+ *
+ * Exclude VKMS to prefer hardware drivers.
  */
-#define DRIVER_ANY 	~(DRIVER_VGEM)
+#define DRIVER_ANY	~(DRIVER_VGEM | DRIVER_VKMS)
 
 /*
  * Compile friendly enum for i915/xe.
@@ -135,6 +138,7 @@ void igt_require_i915(int fd);
 void igt_require_nouveau(int fd);
 void igt_require_vc4(int fd);
 void igt_require_xe(int fd);
+void igt_require_vkms(void);
 
 bool is_amdgpu_device(int fd);
 bool is_i915_device(int fd);
-- 
2.50.1


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

* [PATCH i-g-t v4 02/41] lib/vkms: Add minimal VKMS library and test device default files
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 01/41] lib/drmtest: Add VKMS as a known driver type José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-13 13:28   ` Kamil Konieczny
  2025-08-07  7:45 ` [PATCH i-g-t v4 03/41] lib/vkms: Allow to enable/disable VKMS devices José Expósito
                   ` (42 subsequent siblings)
  44 siblings, 1 reply; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito, Jim Shargo, Marius Vlad

Create a library containing helpers for creating VKMS devices and
configuring them dynamically using configfs.
For the moment, add the minimal number of helpers to be able to start
testing VKMS's configfs support: Create device, destroy device and
destroy all devices.

Also, include the simplest possible test using those helpers (checking
the device's default files) and the scaffolding required to generate
the documentation.

Co-developed-by: Jim Shargo <jshargo@chromium.org>
Signed-off-by: Jim Shargo <jshargo@chromium.org>
Co-developed-by: Marius Vlad <marius.vlad@collabora.com>
Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/igt_vkms.c             | 206 +++++++++++++++++++++++++++++++++++++
 lib/igt_vkms.h             |  27 +++++
 lib/meson.build            |   1 +
 meson.build                |   8 ++
 tests/meson.build          |   2 +
 tests/vkms/meson.build     |  13 +++
 tests/vkms/vkms_configfs.c | 131 +++++++++++++++++++++++
 7 files changed, 388 insertions(+)
 create mode 100644 lib/igt_vkms.c
 create mode 100644 lib/igt_vkms.h
 create mode 100644 tests/vkms/meson.build
 create mode 100644 tests/vkms/vkms_configfs.c

diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
new file mode 100644
index 000000000..03931d2e4
--- /dev/null
+++ b/lib/igt_vkms.c
@@ -0,0 +1,206 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2023 Google LLC.
+ * Copyright © 2023 Collabora, Ltd.
+ * Copyright © 2024-2025 Red Hat, Inc.
+ */
+
+#include <dirent.h>
+#include <errno.h>
+#include <ftw.h>
+#include <limits.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#include "igt.h"
+#include "igt_vkms.h"
+
+#define VKMS_ROOT_DIR_NAME		"vkms"
+
+/**
+ * SECTION:igt_vkms
+ * @short_description: Helpers to create and configure VKMS devices
+ * @title: VKMS
+ * @include: igt_vkms.h
+ *
+ * Helpers for creating VKMS devices and configuring them dynamically.
+ *
+ * First, create a VKMS device, next, add pipeline items (planes, CRTCs,
+ * encoders, CRTCs and connectors) compose the pipeline by attaching each item
+ * using the _attach_ functions and finally, enable the VKMS device.
+ */
+
+static const char *mount_vkms_configfs(void)
+{
+	static char vkms_root_path[PATH_MAX];
+	const char *configfs_path;
+	int ret;
+
+	configfs_path = igt_configfs_mount();
+	igt_assert_f(configfs_path, "Error mounting configfs");
+
+	ret = snprintf(vkms_root_path, sizeof(vkms_root_path), "%s/%s",
+		       configfs_path, VKMS_ROOT_DIR_NAME);
+	igt_assert(ret >= 0 && ret < sizeof(vkms_root_path));
+
+	return vkms_root_path;
+}
+
+/**
+ * igt_require_vkms_configfs:
+ *
+ * Require that VKMS supports configfs configuration.
+ */
+void igt_require_vkms_configfs(void)
+{
+	const char *vkms_root_path;
+	DIR *dir;
+
+	vkms_root_path = mount_vkms_configfs();
+
+	dir = opendir(vkms_root_path);
+	igt_require(dir);
+	if (dir)
+		closedir(dir);
+}
+
+/**
+ * igt_vkms_device_create:
+ * @name: VKMS device name
+ *
+ * Create a directory in the ConfigFS VKMS root directory, where the entire
+ * pipeline will be configured.
+ */
+igt_vkms_t *igt_vkms_device_create(const char *name)
+{
+	igt_vkms_t *dev;
+	const char *vkms_root_path;
+	size_t path_len;
+	DIR *dir;
+	int ret;
+
+	dev = calloc(1, sizeof(*dev));
+
+	vkms_root_path = mount_vkms_configfs();
+
+	path_len = strlen(vkms_root_path) + strlen(name) + 2;
+	dev->path = malloc(path_len);
+	ret = snprintf(dev->path, path_len, "%s/%s", vkms_root_path, name);
+	igt_assert(ret >= 0 && ret < path_len);
+
+	dir = opendir(dev->path);
+	if (dir) {
+		igt_debug("Device at path %s already exists\n", dev->path);
+		closedir(dir);
+	} else {
+		ret = mkdir(dev->path, 0777);
+		if (ret != 0) {
+			free(dev->path);
+			free(dev);
+			dev = NULL;
+		}
+	}
+
+	return dev;
+}
+
+static int detach_pipeline_items(const char *path, const struct stat *info,
+				 const int typeflag, struct FTW *pathinfo)
+{
+	/*
+	 * Level 4 are the links in the possible_* directories:
+	 * vkms/<dev>/<pipeline items>/<pipeline item>/<possible_*>/<links>
+	 */
+	if (pathinfo->level == 4 && typeflag == FTW_SL) {
+		igt_debug("Detaching pipeline item %s\n", path);
+		return unlink(path);
+	}
+
+	/* Ignore the other files, they are removed by remove_pipeline_items */
+	return 0;
+}
+
+static int remove_pipeline_items(const char *path, const struct stat *info,
+				 const int typeflag, struct FTW *pathinfo)
+{
+	/* Level 0 is the device root directory: vkms/<dev> */
+	if (pathinfo->level == 0) {
+		igt_debug("Removing pipeline item %s\n", path);
+		return rmdir(path);
+	}
+
+	/*
+	 * Level 2 directories are the pipeline items:
+	 * vkms/<dev>/<pipeline items>/<pipeline item>
+	 */
+	if (pathinfo->level == 2 && typeflag == FTW_DP) {
+		igt_debug("Removing pipeline item %s\n", path);
+		return rmdir(path);
+	}
+
+	/* Ignore the other files, they are removed by VKMS */
+	return 0;
+}
+
+static int remove_device_dir(igt_vkms_t *dev)
+{
+	int ret;
+
+	ret = nftw(dev->path, detach_pipeline_items, 64, FTW_DEPTH | FTW_PHYS);
+	if (ret)
+		return ret;
+
+	ret = nftw(dev->path, remove_pipeline_items, 64, FTW_DEPTH | FTW_PHYS);
+	return ret;
+}
+
+/**
+ * igt_vkms_device_destroy:
+ * @dev: Device to destroy
+ *
+ * Remove and free the VKMS device.
+ */
+void igt_vkms_device_destroy(igt_vkms_t *dev)
+{
+	int ret;
+
+	igt_assert(dev);
+
+	ret = remove_device_dir(dev);
+	igt_assert_f(ret == 0,
+		     "Unable to rmdir device directory '%s'. Got errno=%d (%s)\n",
+		     dev->path, errno, strerror(errno));
+
+	free(dev->path);
+	free(dev);
+}
+
+/**
+ * igt_vkms_destroy_all_devices:
+ *
+ * Remove all VKMS devices created via configfs.
+ */
+void igt_vkms_destroy_all_devices(void)
+{
+	igt_vkms_t *dev;
+	const char *vkms_root_path;
+	DIR *dir;
+	struct dirent *ent;
+
+	vkms_root_path = mount_vkms_configfs();
+	dir = opendir(vkms_root_path);
+	igt_assert_f(dir, "VKMS configfs directory not available at '%s'. "
+		     "Got errno=%d (%s)\n", vkms_root_path, errno,
+		     strerror(errno));
+
+	while ((ent = readdir(dir)) != NULL) {
+		if (strcmp(ent->d_name, ".") == 0 ||
+		    strcmp(ent->d_name, "..") == 0)
+			continue;
+
+		dev = igt_vkms_device_create(ent->d_name);
+		igt_vkms_device_destroy(dev);
+	}
+
+	closedir(dir);
+}
diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
new file mode 100644
index 000000000..95d7a53cd
--- /dev/null
+++ b/lib/igt_vkms.h
@@ -0,0 +1,27 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2023 Google LLC.
+ * Copyright © 2023 Collabora, Ltd.
+ * Copyright © 2024-2025 Red Hat, Inc.
+ */
+
+#ifndef __IGT_VKMS_H__
+#define __IGT_VKMS_H__
+
+/**
+ * igt_vkms_t:
+ * @path: VKMS root directory inside configfs mounted directory
+ *
+ * A struct representing a VKMS device.
+ */
+typedef struct igt_vkms {
+	char *path;
+} igt_vkms_t;
+
+void igt_require_vkms_configfs(void);
+
+igt_vkms_t *igt_vkms_device_create(const char *name);
+void igt_vkms_device_destroy(igt_vkms_t *dev);
+void igt_vkms_destroy_all_devices(void);
+
+#endif /* __IGT_VKMS_H__ */
diff --git a/lib/meson.build b/lib/meson.build
index 2eaca42a4..62ba7f262 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -50,6 +50,7 @@ lib_sources = [
 	'igt_types.c',
 	'igt_vec.c',
 	'igt_vgem.c',
+	'igt_vkms.c',
 	'igt_x86.c',
 	'instdone.c',
 	'intel_allocator.c',
diff --git a/meson.build b/meson.build
index aeed3b1d2..f7ae427b3 100644
--- a/meson.build
+++ b/meson.build
@@ -290,6 +290,7 @@ msmdir = join_paths(libexecdir, 'msm')
 panfrostdir = join_paths(libexecdir, 'panfrost')
 v3ddir = join_paths(libexecdir, 'v3d')
 vc4dir = join_paths(libexecdir, 'vc4')
+vkmsdir = join_paths(libexecdir, 'vkms')
 vmwgfxdir = join_paths(libexecdir, 'vmwgfx')
 mandir = get_option('mandir')
 pkgconfigdir = join_paths(libdir, 'pkgconfig')
@@ -352,6 +353,12 @@ if get_option('use_rpath')
 	endforeach
 	vc4_rpathdir = join_paths(vc4_rpathdir, libdir)
 
+	vkms_rpathdir = '$ORIGIN'
+	foreach p : vkmsdir.split('/')
+		vkms_rpathdir = join_paths(vkms_rpathdir, '..')
+	endforeach
+	vkms_rpathdir = join_paths(vkms_rpathdir, libdir)
+
 	vmwgfx_rpathdir = '$ORIGIN'
 	foreach p : vmwgfxdir.split('/')
 		vmwgfx_rpathdir = join_paths(vmwgfx_rpathdir, '..')
@@ -365,6 +372,7 @@ else
 	panfrost_rpathdir = ''
 	v3d_rpathdir = ''
 	vc4_rpathdir = ''
+	vkms_rpathdir = ''
 	vmwgfx_rpathdir = ''
 endif
 
diff --git a/tests/meson.build b/tests/meson.build
index 5c01c64e9..a7b9375ed 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -490,6 +490,8 @@ subdir('v3d')
 
 subdir('vc4')
 
+subdir('vkms')
+
 subdir('vmwgfx')
 
 gen_testlist = find_program('generate_testlist.sh')
diff --git a/tests/vkms/meson.build b/tests/vkms/meson.build
new file mode 100644
index 000000000..e55ba32ba
--- /dev/null
+++ b/tests/vkms/meson.build
@@ -0,0 +1,13 @@
+vkms_progs = [
+	'vkms_configfs',
+]
+vkms_deps = test_deps
+
+foreach prog : vkms_progs
+	test_executables += executable(prog, prog + '.c',
+				       dependencies : vkms_deps,
+				       install_dir : vkmsdir,
+				       install_rpath : vkms_rpathdir,
+				       install : true)
+	test_list += join_paths('vkms', prog)
+endforeach
diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
new file mode 100644
index 000000000..f659a7a22
--- /dev/null
+++ b/tests/vkms/vkms_configfs.c
@@ -0,0 +1,131 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2023 Google LLC.
+ * Copyright © 2023 Collabora, Ltd.
+ * Copyright © 2024-2025 Red Hat, Inc.
+ */
+
+/**
+ * TEST: Tests for VKMS configfs support.
+ * Category: Display
+ * Mega feature: General Display Features
+ * Sub-category: uapi
+ * Functionality: vkms,configfs
+ * Test category: functionality test
+ */
+
+#include <dirent.h>
+#include <limits.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#include "drmtest.h"
+#include "igt.h"
+#include "igt_vkms.h"
+
+static void assert_default_files(const char *path,
+				 const char **files, size_t n_files,
+				 const char **dirs, size_t n_dirs)
+{
+	DIR *dir;
+	struct dirent *ent;
+	int total = 0;
+	int ret;
+
+	/* Check that the number of files/directories matches the expected */
+	dir = opendir(path);
+	igt_assert(dir);
+	while ((ent = readdir(dir)) != NULL) {
+		if (strcmp(ent->d_name, ".") == 0 ||
+		    strcmp(ent->d_name, "..") == 0)
+			continue;
+
+		total++;
+	}
+	igt_assert_eq(total, n_dirs + n_files);
+	closedir(dir);
+
+	/* Check that the files/directories are present */
+	for (int i = 0; i < n_files; i++) {
+		char file_path[PATH_MAX];
+		struct stat buf;
+
+		ret = snprintf(file_path, sizeof(file_path), "%s/%s", path,
+			       files[i]);
+		igt_assert(ret >= 0 && ret < sizeof(file_path));
+
+		igt_assert_f(stat(file_path, &buf) == 0,
+			     "File %s does not exists\n", file_path);
+	}
+
+	for (int i = 0; i < n_dirs; i++) {
+		char dir_path[PATH_MAX];
+
+		ret = snprintf(dir_path, sizeof(dir_path), "%s/%s", path,
+			       dirs[i]);
+		igt_assert(ret >= 0 && ret < sizeof(dir_path));
+
+		dir = opendir(dir_path);
+		igt_assert_f(dir, "Directory %s does not exists\n", dir_path);
+		closedir(dir);
+	}
+}
+
+/**
+ * SUBTEST: device-default-files
+ * Description: Test that creating a VKMS device creates the default files and
+ *              directories.
+ */
+
+static void test_device_default_files(void)
+{
+	igt_vkms_t *dev;
+
+	static const char *files[] = {
+		"enabled",
+	};
+
+	static const char *dirs[] = {
+		"planes",
+		"crtcs",
+		"encoders",
+		"connectors",
+	};
+
+	dev = igt_vkms_device_create(__func__);
+	igt_assert(dev);
+
+	assert_default_files(dev->path,
+			     files, ARRAY_SIZE(files),
+			     dirs, ARRAY_SIZE(dirs));
+
+	igt_vkms_device_destroy(dev);
+}
+
+igt_main
+{
+	struct {
+		const char *name;
+		void (*fn)(void);
+	} tests[] = {
+		{ "device-default-files", test_device_default_files },
+	};
+
+	igt_fixture {
+		drm_load_module(DRIVER_VKMS);
+		igt_require_vkms();
+		igt_require_vkms_configfs();
+		igt_vkms_destroy_all_devices();
+	}
+
+	for (int i = 0; i < ARRAY_SIZE(tests); i++) {
+		igt_subtest(tests[i].name)
+			tests[i].fn();
+	}
+
+	igt_fixture {
+		igt_require_vkms();
+		igt_require_vkms_configfs();
+		igt_vkms_destroy_all_devices();
+	}
+}
-- 
2.50.1


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

* [PATCH i-g-t v4 03/41] lib/vkms: Allow to enable/disable VKMS devices
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 01/41] lib/drmtest: Add VKMS as a known driver type José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 02/41] lib/vkms: Add minimal VKMS library and test device default files José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 04/41] tests/vkms_configfs: Test device invalid values José Expósito
                   ` (41 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Add helper to enable, disable and check the enabled status of a VKMS
device and add a test to ensure that the default value is correctly set.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/igt_vkms.c             | 98 ++++++++++++++++++++++++++++++++++++++
 lib/igt_vkms.h             |  7 +++
 tests/vkms/vkms_configfs.c | 18 +++++++
 3 files changed, 123 insertions(+)

diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
index 03931d2e4..7d3575ca0 100644
--- a/lib/igt_vkms.c
+++ b/lib/igt_vkms.c
@@ -7,15 +7,21 @@
 
 #include <dirent.h>
 #include <errno.h>
+#include <fcntl.h>
 #include <ftw.h>
 #include <limits.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 #include <sys/stat.h>
+#include <unistd.h>
 
 #include "igt.h"
 #include "igt_vkms.h"
 
 #define VKMS_ROOT_DIR_NAME		"vkms"
+#define VKMS_FILE_ENABLED		"enabled"
 
 /**
  * SECTION:igt_vkms
@@ -46,6 +52,50 @@ static const char *mount_vkms_configfs(void)
 	return vkms_root_path;
 }
 
+static int read_int(const char *path)
+{
+	FILE *file;
+	int value;
+	int ret;
+
+	file = fopen(path, "r");
+	igt_assert_f(file, "Error opening '%s'\n", path);
+
+	ret = fscanf(file, "%d", &value);
+	fclose(file);
+	igt_assert_f(ret == 1, "Error reading integer from '%s'\n", path);
+
+	return value;
+}
+
+static bool read_bool(const char *path)
+{
+	int ret;
+
+	ret = read_int(path);
+
+	return !!ret;
+}
+
+static void write_int(const char *path, int value)
+{
+	FILE *file;
+	int ret;
+
+	file = fopen(path, "w");
+	igt_assert_f(file, "Error opening '%s'\n", path);
+
+	ret = fprintf(file, "%d", value);
+	igt_assert_f(ret >= 0, "Error writing to '%s'\n", path);
+
+	fclose(file);
+}
+
+static void write_bool(const char *path, bool value)
+{
+	write_int(path, value ? 1 : 0);
+}
+
 /**
  * igt_require_vkms_configfs:
  *
@@ -64,6 +114,22 @@ void igt_require_vkms_configfs(void)
 		closedir(dir);
 }
 
+/**
+ * igt_vkms_get_device_enabled_path:
+ * @dev: Device to get the enabled path from
+ * @path: Output path
+ * @len: Maximum @path length
+ *
+ * Returns the device "enabled" file path.
+ */
+void igt_vkms_get_device_enabled_path(igt_vkms_t *dev, char *path, size_t len)
+{
+	int ret;
+
+	ret = snprintf(path, len, "%s/%s", dev->path, VKMS_FILE_ENABLED);
+	igt_assert(ret >= 0 && ret < len);
+}
+
 /**
  * igt_vkms_device_create:
  * @name: VKMS device name
@@ -166,6 +232,8 @@ void igt_vkms_device_destroy(igt_vkms_t *dev)
 
 	igt_assert(dev);
 
+	igt_vkms_device_set_enabled(dev, false);
+
 	ret = remove_device_dir(dev);
 	igt_assert_f(ret == 0,
 		     "Unable to rmdir device directory '%s'. Got errno=%d (%s)\n",
@@ -204,3 +272,33 @@ void igt_vkms_destroy_all_devices(void)
 
 	closedir(dir);
 }
+
+/**
+ * igt_vkms_device_is_enabled:
+ * @dev: The device to check
+ *
+ * Indicate whether a VKMS device is enabled or not.
+ */
+bool igt_vkms_device_is_enabled(igt_vkms_t *dev)
+{
+	char path[PATH_MAX];
+
+	igt_vkms_get_device_enabled_path(dev, path, sizeof(path));
+
+	return read_bool(path);
+}
+
+/**
+ * igt_vkms_device_set_enabled:
+ * @dev: Device to enable or disable
+ *
+ * Enable or disable a VKMS device.
+ */
+void igt_vkms_device_set_enabled(igt_vkms_t *dev, bool enabled)
+{
+	char path[PATH_MAX];
+
+	igt_vkms_get_device_enabled_path(dev, path, sizeof(path));
+
+	write_bool(path, enabled);
+}
diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
index 95d7a53cd..8b3595b00 100644
--- a/lib/igt_vkms.h
+++ b/lib/igt_vkms.h
@@ -8,6 +8,8 @@
 #ifndef __IGT_VKMS_H__
 #define __IGT_VKMS_H__
 
+#include <stdbool.h>
+
 /**
  * igt_vkms_t:
  * @path: VKMS root directory inside configfs mounted directory
@@ -20,8 +22,13 @@ typedef struct igt_vkms {
 
 void igt_require_vkms_configfs(void);
 
+void igt_vkms_get_device_enabled_path(igt_vkms_t *dev, char *path, size_t len);
+
 igt_vkms_t *igt_vkms_device_create(const char *name);
 void igt_vkms_device_destroy(igt_vkms_t *dev);
 void igt_vkms_destroy_all_devices(void);
 
+bool igt_vkms_device_is_enabled(igt_vkms_t *dev);
+void igt_vkms_device_set_enabled(igt_vkms_t *dev, bool enabled);
+
 #endif /* __IGT_VKMS_H__ */
diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index f659a7a22..0ed6a63a6 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -102,6 +102,23 @@ static void test_device_default_files(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: device-default-values
+ * Description: Check that the default values for the device are correct.
+ */
+
+static void test_device_default_values(void)
+{
+	igt_vkms_t *dev;
+
+	dev = igt_vkms_device_create(__func__);
+	igt_assert(dev);
+
+	igt_assert(!igt_vkms_device_is_enabled(dev));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -109,6 +126,7 @@ igt_main
 		void (*fn)(void);
 	} tests[] = {
 		{ "device-default-files", test_device_default_files },
+		{ "device-default-values", test_device_default_values },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 04/41] tests/vkms_configfs: Test device invalid values
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (2 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 03/41] lib/vkms: Allow to enable/disable VKMS devices José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 05/41] lib/vkms: Test plane default files José Expósito
                   ` (40 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

For a VKMS device, it is only possible to set invalid values in two
places:

- The device name: The "vkms" name is reserved for the default device
  created by the driver.
- The device enabled status: It should only accept boolean values.

Test that setting wrong values fails and that the device is not
accidentally enabled.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 tests/vkms/vkms_configfs.c | 60 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)

diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 0ed6a63a6..d38791ccf 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -23,6 +23,11 @@
 #include "igt.h"
 #include "igt_vkms.h"
 
+struct invalid_value {
+	const char *value;
+	int size;
+};
+
 static void assert_default_files(const char *path,
 				 const char **files, size_t n_files,
 				 const char **dirs, size_t n_dirs)
@@ -71,6 +76,32 @@ static void assert_default_files(const char *path,
 	}
 }
 
+static void assert_wrong_bool_values(const char *path)
+{
+	struct invalid_value invalid_bool_values[] = {
+		{ "", 0 },
+		{ "\0", 1 },
+		{ "-1", 2 },
+		{ "2", 1 },
+		{ "o", 1 },
+		{ "invalid", 8 },
+	};
+	int fd;
+	int ret;
+
+	for (int i = 0; i < ARRAY_SIZE(invalid_bool_values); i++) {
+		struct invalid_value v = invalid_bool_values[i];
+
+		fd = open(path, O_WRONLY);
+		igt_assert_f(fd >= 0, "Error opening '%s'\n", path);
+
+		ret = write(fd, v.value, v.size);
+		igt_assert_f(ret <= 0, "Error writing '%s' to '%s'", v.value, path);
+
+		close(fd);
+	}
+}
+
 /**
  * SUBTEST: device-default-files
  * Description: Test that creating a VKMS device creates the default files and
@@ -119,6 +150,34 @@ static void test_device_default_values(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: device-wrong-values
+ * Description: Check that setting unexpected values doesn't work.
+ */
+
+static void test_device_wrong_values(void)
+{
+	igt_vkms_t *dev;
+	char path[PATH_MAX];
+
+	/* It is not possible to create devices named "vkms" to avoid clashes
+	 * with the default device created by VKMS
+	 */
+	dev = igt_vkms_device_create("vkms");
+	igt_assert(!dev);
+
+	/* Test invalid values for "enabled" */
+	dev = igt_vkms_device_create(__func__);
+	igt_assert(dev);
+
+	igt_vkms_get_device_enabled_path(dev, path, sizeof(path));
+
+	assert_wrong_bool_values(path);
+	igt_assert(!igt_vkms_device_is_enabled(dev));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -127,6 +186,7 @@ igt_main
 	} tests[] = {
 		{ "device-default-files", test_device_default_files },
 		{ "device-default-values", test_device_default_values },
+		{ "device-wrong-values", test_device_wrong_values },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 05/41] lib/vkms: Test plane default files
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (3 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 04/41] tests/vkms_configfs: Test device invalid values José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-13 13:38   ` Kamil Konieczny
  2025-08-07  7:45 ` [PATCH i-g-t v4 06/41] lib/vkms: Test plane default values José Expósito
                   ` (39 subsequent siblings)
  44 siblings, 1 reply; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Add a helper to create a plane and a test checking that the default
files and directories are created.

Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/igt_vkms.c             | 76 ++++++++++++++++++++++++++++++++++++++
 lib/igt_vkms.h             |  4 ++
 tests/vkms/vkms_configfs.c | 33 +++++++++++++++++
 3 files changed, 113 insertions(+)

diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
index 7d3575ca0..7c789ea0d 100644
--- a/lib/igt_vkms.c
+++ b/lib/igt_vkms.c
@@ -23,6 +23,13 @@
 #define VKMS_ROOT_DIR_NAME		"vkms"
 #define VKMS_FILE_ENABLED		"enabled"
 
+enum vkms_pipeline_item {
+	VKMS_PIPELINE_ITEM_PLANE,
+	VKMS_PIPELINE_ITEM_CRTC,
+	VKMS_PIPELINE_ITEM_ENCODER,
+	VKMS_PIPELINE_ITEM_CONNECTOR,
+};
+
 /**
  * SECTION:igt_vkms
  * @short_description: Helpers to create and configure VKMS devices
@@ -96,6 +103,48 @@ static void write_bool(const char *path, bool value)
 	write_int(path, value ? 1 : 0);
 }
 
+static const char *get_pipeline_item_dir_name(enum vkms_pipeline_item item)
+{
+	switch (item) {
+	case VKMS_PIPELINE_ITEM_PLANE:
+		return "planes";
+	case VKMS_PIPELINE_ITEM_CRTC:
+		return "crtcs";
+	case VKMS_PIPELINE_ITEM_ENCODER:
+		return "encoders";
+	case VKMS_PIPELINE_ITEM_CONNECTOR:
+		return "connectors";
+	}
+
+	igt_assert(!"Cannot be reached: Unknown VKMS pipeline item type");
+}
+
+static void get_pipeline_item_path(igt_vkms_t *dev,
+				   enum vkms_pipeline_item item,
+				   const char *name, char *path, size_t len)
+{
+	const char *item_dir_name;
+	int ret;
+
+	item_dir_name = get_pipeline_item_dir_name(item);
+	ret = snprintf(path, len, "%s/%s/%s", dev->path, item_dir_name, name);
+	igt_assert(ret >= 0 && ret < len);
+}
+
+static void add_pipeline_item(igt_vkms_t *dev, enum vkms_pipeline_item item,
+			      const char *name)
+{
+	char path[PATH_MAX];
+	int ret;
+
+	get_pipeline_item_path(dev, item, name, path, sizeof(path));
+
+	ret = mkdir(path, 0777);
+	igt_assert_f(ret == 0,
+		     "Unable to mkdir directory '%s'. Got errno=%d (%s)\n",
+		     path, errno, strerror(errno));
+}
+
 /**
  * igt_require_vkms_configfs:
  *
@@ -130,6 +179,21 @@ void igt_vkms_get_device_enabled_path(igt_vkms_t *dev, char *path, size_t len)
 	igt_assert(ret >= 0 && ret < len);
 }
 
+/**
+ * igt_vkms_get_plane_path:
+ * @dev: Device containing the plane
+ * @name: Plane name
+ * @path: Output path
+ * @len: Maximum @path length
+ *
+ * Returns the plane path.
+ */
+void igt_vkms_get_plane_path(igt_vkms_t *dev, const char *name, char *path,
+			     size_t len)
+{
+	get_pipeline_item_path(dev, VKMS_PIPELINE_ITEM_PLANE, name, path, len);
+}
+
 /**
  * igt_vkms_device_create:
  * @name: VKMS device name
@@ -302,3 +366,15 @@ void igt_vkms_device_set_enabled(igt_vkms_t *dev, bool enabled)
 
 	write_bool(path, enabled);
 }
+
+/**
+ * igt_vkms_device_add_plane:
+ * @dev: Device to add the plane to
+ * @name: Plane name
+ *
+ * Add a new plane to the VKMS device.
+ */
+void igt_vkms_device_add_plane(igt_vkms_t *dev, const char *name)
+{
+	add_pipeline_item(dev, VKMS_PIPELINE_ITEM_PLANE, name);
+}
diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
index 8b3595b00..3bda3196d 100644
--- a/lib/igt_vkms.h
+++ b/lib/igt_vkms.h
@@ -23,6 +23,8 @@ typedef struct igt_vkms {
 void igt_require_vkms_configfs(void);
 
 void igt_vkms_get_device_enabled_path(igt_vkms_t *dev, char *path, size_t len);
+void igt_vkms_get_plane_path(igt_vkms_t *dev, const char *name, char *path,
+			     size_t len);
 
 igt_vkms_t *igt_vkms_device_create(const char *name);
 void igt_vkms_device_destroy(igt_vkms_t *dev);
@@ -31,4 +33,6 @@ void igt_vkms_destroy_all_devices(void);
 bool igt_vkms_device_is_enabled(igt_vkms_t *dev);
 void igt_vkms_device_set_enabled(igt_vkms_t *dev, bool enabled);
 
+void igt_vkms_device_add_plane(igt_vkms_t *dev, const char *name);
+
 #endif /* __IGT_VKMS_H__ */
diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index d38791ccf..fa429d28f 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -178,6 +178,38 @@ static void test_device_wrong_values(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: plane-default-files
+ * Description: Test that creating a plane creates the default files and
+ *              directories.
+ */
+
+static void test_plane_default_files(void)
+{
+	igt_vkms_t *dev;
+	char path[PATH_MAX];
+
+	static const char *files[] = {
+		"type",
+	};
+
+	static const char *dirs[] = {
+		"possible_crtcs",
+	};
+
+	dev = igt_vkms_device_create(__func__);
+	igt_assert(dev);
+
+	igt_vkms_device_add_plane(dev, "plane0");
+	igt_vkms_get_plane_path(dev, "plane0", path, sizeof(path));
+
+	assert_default_files(path,
+			     files, ARRAY_SIZE(files),
+			     dirs, ARRAY_SIZE(dirs));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -187,6 +219,7 @@ igt_main
 		{ "device-default-files", test_device_default_files },
 		{ "device-default-values", test_device_default_values },
 		{ "device-wrong-values", test_device_wrong_values },
+		{ "plane-default-files", test_plane_default_files },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 06/41] lib/vkms: Test plane default values
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (4 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 05/41] lib/vkms: Test plane default files José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 07/41] lib/vkms: Test plane invalid values José Expósito
                   ` (38 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Add a helper to get the plane type and test that the default type is set
when a new plane is created.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/igt_vkms.c             | 47 ++++++++++++++++++++++++++++++++++++++
 lib/igt_vkms.h             |  3 +++
 tests/vkms/vkms_configfs.c | 21 +++++++++++++++++
 3 files changed, 71 insertions(+)

diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
index 7c789ea0d..9a9fbde3f 100644
--- a/lib/igt_vkms.c
+++ b/lib/igt_vkms.c
@@ -22,6 +22,7 @@
 
 #define VKMS_ROOT_DIR_NAME		"vkms"
 #define VKMS_FILE_ENABLED		"enabled"
+#define VKMS_FILE_PLANE_TYPE		"type"
 
 enum vkms_pipeline_item {
 	VKMS_PIPELINE_ITEM_PLANE,
@@ -131,6 +132,20 @@ static void get_pipeline_item_path(igt_vkms_t *dev,
 	igt_assert(ret >= 0 && ret < len);
 }
 
+static void get_pipeline_item_file_path(igt_vkms_t *dev,
+					enum vkms_pipeline_item item,
+					const char *name, const char *filename,
+					char *path, size_t len)
+{
+	char item_path[PATH_MAX];
+	int ret;
+
+	get_pipeline_item_path(dev, item, name, item_path, sizeof(item_path));
+
+	ret = snprintf(path, len, "%s/%s", item_path, filename);
+	igt_assert(ret >= 0 && ret < len);
+}
+
 static void add_pipeline_item(igt_vkms_t *dev, enum vkms_pipeline_item item,
 			      const char *name)
 {
@@ -194,6 +209,22 @@ void igt_vkms_get_plane_path(igt_vkms_t *dev, const char *name, char *path,
 	get_pipeline_item_path(dev, VKMS_PIPELINE_ITEM_PLANE, name, path, len);
 }
 
+/**
+ * igt_vkms_get_plane_type_path:
+ * @dev: Device containing the plane
+ * @name: Plane name
+ * @path: Output path
+ * @len: Maximum @path length
+ *
+ * Returns the plane "type" file path.
+ */
+void igt_vkms_get_plane_type_path(igt_vkms_t *dev, const char *name, char *path,
+				  size_t len)
+{
+	get_pipeline_item_file_path(dev, VKMS_PIPELINE_ITEM_PLANE, name,
+				    VKMS_FILE_PLANE_TYPE, path, len);
+}
+
 /**
  * igt_vkms_device_create:
  * @name: VKMS device name
@@ -378,3 +409,19 @@ void igt_vkms_device_add_plane(igt_vkms_t *dev, const char *name)
 {
 	add_pipeline_item(dev, VKMS_PIPELINE_ITEM_PLANE, name);
 }
+
+/**
+ * igt_vkms_plane_get_type:
+ * @dev: Device the plane belongs to
+ * @name: Plane name
+ *
+ * Return the plane type.
+ */
+int igt_vkms_plane_get_type(igt_vkms_t *dev, const char *name)
+{
+	char path[PATH_MAX];
+
+	igt_vkms_get_plane_type_path(dev, name, path, sizeof(path));
+
+	return read_int(path);
+}
diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
index 3bda3196d..0e5cf35ce 100644
--- a/lib/igt_vkms.h
+++ b/lib/igt_vkms.h
@@ -25,6 +25,8 @@ void igt_require_vkms_configfs(void);
 void igt_vkms_get_device_enabled_path(igt_vkms_t *dev, char *path, size_t len);
 void igt_vkms_get_plane_path(igt_vkms_t *dev, const char *name, char *path,
 			     size_t len);
+void igt_vkms_get_plane_type_path(igt_vkms_t *dev, const char *name, char *path,
+				  size_t len);
 
 igt_vkms_t *igt_vkms_device_create(const char *name);
 void igt_vkms_device_destroy(igt_vkms_t *dev);
@@ -34,5 +36,6 @@ bool igt_vkms_device_is_enabled(igt_vkms_t *dev);
 void igt_vkms_device_set_enabled(igt_vkms_t *dev, bool enabled);
 
 void igt_vkms_device_add_plane(igt_vkms_t *dev, const char *name);
+int igt_vkms_plane_get_type(igt_vkms_t *dev, const char *name);
 
 #endif /* __IGT_VKMS_H__ */
diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index fa429d28f..69fb7ca64 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -210,6 +210,26 @@ static void test_plane_default_files(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: plane-default-values
+ * Description: Check that the default values for the plane are correct.
+ */
+
+static void test_plane_default_values(void)
+{
+	igt_vkms_t *dev;
+
+	dev = igt_vkms_device_create(__func__);
+	igt_assert(dev);
+
+	igt_vkms_device_add_plane(dev, "plane0");
+
+	igt_assert_eq(igt_vkms_plane_get_type(dev, "plane0"),
+		      DRM_PLANE_TYPE_OVERLAY);
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -220,6 +240,7 @@ igt_main
 		{ "device-default-values", test_device_default_values },
 		{ "device-wrong-values", test_device_wrong_values },
 		{ "plane-default-files", test_plane_default_files },
+		{ "plane-default-values", test_plane_default_values },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 07/41] lib/vkms: Test plane invalid values
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (5 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 06/41] lib/vkms: Test plane default values José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 08/41] tests/vkms_configfs: Test plane valid values José Expósito
                   ` (37 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

For a VKMS plane, it is only possible to set invalid values in the plane
type.

Test that setting wrong values fails and that the plane is not
accidentally changed.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/igt_vkms.c             | 23 ++++++++++++++++++
 lib/igt_vkms.h             |  1 +
 tests/vkms/vkms_configfs.c | 50 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 74 insertions(+)

diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
index 9a9fbde3f..2c9ab607e 100644
--- a/lib/igt_vkms.c
+++ b/lib/igt_vkms.c
@@ -425,3 +425,26 @@ int igt_vkms_plane_get_type(igt_vkms_t *dev, const char *name)
 
 	return read_int(path);
 }
+
+/**
+ * igt_vkms_plane_set_type:
+ * @dev: Device the plane belongs to
+ * @name: Plane name
+ * @type: DRM_PLANE_TYPE_OVERLAY, DRM_PLANE_TYPE_PRIMARY or
+ * DRM_PLANE_TYPE_CURSOR
+ *
+ * Set a new type for the plane
+ */
+void igt_vkms_plane_set_type(igt_vkms_t *dev, const char *name, int type)
+{
+	char path[PATH_MAX];
+
+	if (type != DRM_PLANE_TYPE_OVERLAY &&
+	    type != DRM_PLANE_TYPE_PRIMARY &&
+	    type != DRM_PLANE_TYPE_CURSOR)
+		igt_assert(!"Cannot be reached: Unknown plane type");
+
+	igt_vkms_get_plane_type_path(dev, name, path, sizeof(path));
+
+	write_int(path, type);
+}
diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
index 0e5cf35ce..95828fb11 100644
--- a/lib/igt_vkms.h
+++ b/lib/igt_vkms.h
@@ -37,5 +37,6 @@ void igt_vkms_device_set_enabled(igt_vkms_t *dev, bool enabled);
 
 void igt_vkms_device_add_plane(igt_vkms_t *dev, const char *name);
 int igt_vkms_plane_get_type(igt_vkms_t *dev, const char *name);
+void igt_vkms_plane_set_type(igt_vkms_t *dev, const char *name, int type);
 
 #endif /* __IGT_VKMS_H__ */
diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 69fb7ca64..163b542d0 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -230,6 +230,55 @@ static void test_plane_default_values(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: plane-wrong-values
+ * Description: Check that setting unexpected values doesn't work.
+ */
+
+static void test_plane_wrong_values(void)
+{
+	struct invalid_value invalid_type_values[] = {
+		{ "", 0 },
+		{ "\0", 1 },
+		{ "-1", 2 },
+		{ "4", 1 },
+		{ "primary", 8 },
+		{ "overlay", 8 },
+	};
+	igt_vkms_t *dev;
+	char path[PATH_MAX];
+	int fd;
+	int ret;
+
+	/* Create a device with a primary plane */
+	dev = igt_vkms_device_create(__func__);
+	igt_assert(dev);
+
+	igt_vkms_device_add_plane(dev, "plane0");
+	igt_vkms_plane_set_type(dev, "plane0", DRM_PLANE_TYPE_PRIMARY);
+	igt_assert_eq(igt_vkms_plane_get_type(dev, "plane0"),
+		      DRM_PLANE_TYPE_PRIMARY);
+	igt_vkms_get_plane_type_path(dev, "plane0", path, sizeof(path));
+
+	/* Test invalid values for "type" */
+	for (int i = 0; i < ARRAY_SIZE(invalid_type_values); i++) {
+		struct invalid_value v = invalid_type_values[i];
+
+		fd = open(path, O_WRONLY);
+		igt_assert_f(fd >= 0, "Error opening '%s'\n", path);
+
+		ret = write(fd, v.value, v.size);
+		igt_assert_f(ret <= 0, "Error writing '%s' to '%s'", v.value, path);
+
+		close(fd);
+	}
+
+	igt_assert_eq(igt_vkms_plane_get_type(dev, "plane0"),
+		      DRM_PLANE_TYPE_PRIMARY);
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -241,6 +290,7 @@ igt_main
 		{ "device-wrong-values", test_device_wrong_values },
 		{ "plane-default-files", test_plane_default_files },
 		{ "plane-default-values", test_plane_default_values },
+		{ "plane-wrong-values", test_plane_wrong_values },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 08/41] tests/vkms_configfs: Test plane valid values
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (6 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 07/41] lib/vkms: Test plane invalid values José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 09/41] lib/vkms: Test CRTC default files José Expósito
                   ` (36 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Test that all valid values for the plane "type" work and that it
changes accordingly.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 tests/vkms/vkms_configfs.c | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 163b542d0..6adb74213 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -279,6 +279,36 @@ static void test_plane_wrong_values(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: plane-valid-values
+ * Description: Check that setting valid values works.
+ */
+
+static void test_plane_valid_values(void)
+{
+	igt_vkms_t *dev;
+
+	dev = igt_vkms_device_create(__func__);
+	igt_assert(dev);
+
+	igt_vkms_device_add_plane(dev, "plane0");
+
+	/* Test valid values for "type" */
+	igt_vkms_plane_set_type(dev, "plane0", DRM_PLANE_TYPE_OVERLAY);
+	igt_assert_eq(igt_vkms_plane_get_type(dev, "plane0"),
+		      DRM_PLANE_TYPE_OVERLAY);
+
+	igt_vkms_plane_set_type(dev, "plane0", DRM_PLANE_TYPE_PRIMARY);
+	igt_assert_eq(igt_vkms_plane_get_type(dev, "plane0"),
+		      DRM_PLANE_TYPE_PRIMARY);
+
+	igt_vkms_plane_set_type(dev, "plane0", DRM_PLANE_TYPE_CURSOR);
+	igt_assert_eq(igt_vkms_plane_get_type(dev, "plane0"),
+		      DRM_PLANE_TYPE_CURSOR);
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -291,6 +321,7 @@ igt_main
 		{ "plane-default-files", test_plane_default_files },
 		{ "plane-default-values", test_plane_default_values },
 		{ "plane-wrong-values", test_plane_wrong_values },
+		{ "plane-valid-values", test_plane_valid_values },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 09/41] lib/vkms: Test CRTC default files
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (7 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 08/41] tests/vkms_configfs: Test plane valid values José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 10/41] lib/vkms: Test CRTC default values José Expósito
                   ` (35 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Add a helper to create a CRTC and a test checking that the default
files and directories are created.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/igt_vkms.c             | 27 +++++++++++++++++++++++++++
 lib/igt_vkms.h             |  4 ++++
 tests/vkms/vkms_configfs.c | 29 +++++++++++++++++++++++++++++
 3 files changed, 60 insertions(+)

diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
index 2c9ab607e..0c193e33f 100644
--- a/lib/igt_vkms.c
+++ b/lib/igt_vkms.c
@@ -225,6 +225,21 @@ void igt_vkms_get_plane_type_path(igt_vkms_t *dev, const char *name, char *path,
 				    VKMS_FILE_PLANE_TYPE, path, len);
 }
 
+/**
+ * igt_vkms_get_crtc_path:
+ * @dev: Device containing the CRTC
+ * @name: CRTC name
+ * @path: Output path
+ * @len: Maximum @path length
+ *
+ * Returns the plane path.
+ */
+void igt_vkms_get_crtc_path(igt_vkms_t *dev, const char *name, char *path,
+			    size_t len)
+{
+	get_pipeline_item_path(dev, VKMS_PIPELINE_ITEM_CRTC, name, path, len);
+}
+
 /**
  * igt_vkms_device_create:
  * @name: VKMS device name
@@ -448,3 +463,15 @@ void igt_vkms_plane_set_type(igt_vkms_t *dev, const char *name, int type)
 
 	write_int(path, type);
 }
+
+/**
+ * igt_vkms_device_add_crtc:
+ * @dev: Device to add the CRTC to
+ * @name: CRTC name
+ *
+ * Add a new CRTC to the VKMS device.
+ */
+void igt_vkms_device_add_crtc(igt_vkms_t *dev, const char *name)
+{
+	add_pipeline_item(dev, VKMS_PIPELINE_ITEM_CRTC, name);
+}
diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
index 95828fb11..1062675f3 100644
--- a/lib/igt_vkms.h
+++ b/lib/igt_vkms.h
@@ -27,6 +27,8 @@ void igt_vkms_get_plane_path(igt_vkms_t *dev, const char *name, char *path,
 			     size_t len);
 void igt_vkms_get_plane_type_path(igt_vkms_t *dev, const char *name, char *path,
 				  size_t len);
+void igt_vkms_get_crtc_path(igt_vkms_t *dev, const char *name, char *path,
+			    size_t len);
 
 igt_vkms_t *igt_vkms_device_create(const char *name);
 void igt_vkms_device_destroy(igt_vkms_t *dev);
@@ -39,4 +41,6 @@ void igt_vkms_device_add_plane(igt_vkms_t *dev, const char *name);
 int igt_vkms_plane_get_type(igt_vkms_t *dev, const char *name);
 void igt_vkms_plane_set_type(igt_vkms_t *dev, const char *name, int type);
 
+void igt_vkms_device_add_crtc(igt_vkms_t *dev, const char *name);
+
 #endif /* __IGT_VKMS_H__ */
diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 6adb74213..6fd0350a4 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -309,6 +309,34 @@ static void test_plane_valid_values(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: crtc-default-files
+ * Description: Test that creating a CRTC creates the default files and
+ *              directories.
+ */
+
+static void test_crtc_default_files(void)
+{
+	igt_vkms_t *dev;
+	char path[PATH_MAX];
+
+	static const char *files[] = {
+		"writeback",
+	};
+
+	dev = igt_vkms_device_create(__func__);
+	igt_assert(dev);
+
+	igt_vkms_device_add_crtc(dev, "crtc0");
+	igt_vkms_get_crtc_path(dev, "crtc0", path, sizeof(path));
+
+	assert_default_files(path,
+			     files, ARRAY_SIZE(files),
+			     NULL, 0);
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -322,6 +350,7 @@ igt_main
 		{ "plane-default-values", test_plane_default_values },
 		{ "plane-wrong-values", test_plane_wrong_values },
 		{ "plane-valid-values", test_plane_valid_values },
+		{ "crtc-default-files", test_crtc_default_files },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 10/41] lib/vkms: Test CRTC default values
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (8 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 09/41] lib/vkms: Test CRTC default files José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 11/41] lib/vkms: Test CRTC invalid values José Expósito
                   ` (34 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Add a helper to get the CRTC writeback status and test that the default
value is set when a new CRTC is created.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/igt_vkms.c             | 33 +++++++++++++++++++++++++++++++++
 lib/igt_vkms.h             |  3 +++
 tests/vkms/vkms_configfs.c | 20 ++++++++++++++++++++
 3 files changed, 56 insertions(+)

diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
index 0c193e33f..51eb48c44 100644
--- a/lib/igt_vkms.c
+++ b/lib/igt_vkms.c
@@ -23,6 +23,7 @@
 #define VKMS_ROOT_DIR_NAME		"vkms"
 #define VKMS_FILE_ENABLED		"enabled"
 #define VKMS_FILE_PLANE_TYPE		"type"
+#define VKMS_FILE_CRTC_WRITEBACK	"writeback"
 
 enum vkms_pipeline_item {
 	VKMS_PIPELINE_ITEM_PLANE,
@@ -240,6 +241,22 @@ void igt_vkms_get_crtc_path(igt_vkms_t *dev, const char *name, char *path,
 	get_pipeline_item_path(dev, VKMS_PIPELINE_ITEM_CRTC, name, path, len);
 }
 
+/**
+ * igt_vkms_get_crtc_writeback_path:
+ * @dev: Device containing the CRTC
+ * @name: CRTC name
+ * @path: Output path
+ * @len: Maximum @path length
+ *
+ * Returns the CRTC "writeback" file path.
+ */
+void igt_vkms_get_crtc_writeback_path(igt_vkms_t *dev, const char *name,
+				      char *path, size_t len)
+{
+	get_pipeline_item_file_path(dev, VKMS_PIPELINE_ITEM_CRTC, name,
+				    VKMS_FILE_CRTC_WRITEBACK, path, len);
+}
+
 /**
  * igt_vkms_device_create:
  * @name: VKMS device name
@@ -475,3 +492,19 @@ void igt_vkms_device_add_crtc(igt_vkms_t *dev, const char *name)
 {
 	add_pipeline_item(dev, VKMS_PIPELINE_ITEM_CRTC, name);
 }
+
+/**
+ * igt_vkms_crtc_is_writeback_enabled:
+ * @dev: Device the CRTC belongs to
+ * @name: CRTC name
+ *
+ * Indicate whether a VKMS CRTC writeback connector is enabled or not.
+ */
+bool igt_vkms_crtc_is_writeback_enabled(igt_vkms_t *dev, const char *name)
+{
+	char path[PATH_MAX];
+
+	igt_vkms_get_crtc_writeback_path(dev, name, path, sizeof(path));
+
+	return read_bool(path);
+}
diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
index 1062675f3..5d3610057 100644
--- a/lib/igt_vkms.h
+++ b/lib/igt_vkms.h
@@ -29,6 +29,8 @@ void igt_vkms_get_plane_type_path(igt_vkms_t *dev, const char *name, char *path,
 				  size_t len);
 void igt_vkms_get_crtc_path(igt_vkms_t *dev, const char *name, char *path,
 			    size_t len);
+void igt_vkms_get_crtc_writeback_path(igt_vkms_t *dev, const char *name,
+				      char *path, size_t len);
 
 igt_vkms_t *igt_vkms_device_create(const char *name);
 void igt_vkms_device_destroy(igt_vkms_t *dev);
@@ -42,5 +44,6 @@ int igt_vkms_plane_get_type(igt_vkms_t *dev, const char *name);
 void igt_vkms_plane_set_type(igt_vkms_t *dev, const char *name, int type);
 
 void igt_vkms_device_add_crtc(igt_vkms_t *dev, const char *name);
+bool igt_vkms_crtc_is_writeback_enabled(igt_vkms_t *dev, const char *name);
 
 #endif /* __IGT_VKMS_H__ */
diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 6fd0350a4..ec5cc6ee7 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -337,6 +337,25 @@ static void test_crtc_default_files(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: crtc-default-values
+ * Description: Check that the default values for the CRTC are correct.
+ */
+
+static void test_crtc_default_values(void)
+{
+	igt_vkms_t *dev;
+
+	dev = igt_vkms_device_create(__func__);
+	igt_assert(dev);
+
+	igt_vkms_device_add_crtc(dev, "crtc0");
+
+	igt_assert(!igt_vkms_crtc_is_writeback_enabled(dev, "crtc0"));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -351,6 +370,7 @@ igt_main
 		{ "plane-wrong-values", test_plane_wrong_values },
 		{ "plane-valid-values", test_plane_valid_values },
 		{ "crtc-default-files", test_crtc_default_files },
+		{ "crtc-default-values", test_crtc_default_values },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 11/41] lib/vkms: Test CRTC invalid values
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (9 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 10/41] lib/vkms: Test CRTC default values José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 12/41] tests/vkms_configfs: Test CRTC valid values José Expósito
                   ` (33 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

For a VKMS CRTC, it is only possible to set invalid values in the
writeback connector status.

Test that setting wrong values fails and that the CRTC status is not
accidentally changed.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/igt_vkms.c             | 18 ++++++++++++++++++
 lib/igt_vkms.h             |  2 ++
 tests/vkms/vkms_configfs.c | 26 ++++++++++++++++++++++++++
 3 files changed, 46 insertions(+)

diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
index 51eb48c44..0b8fd6500 100644
--- a/lib/igt_vkms.c
+++ b/lib/igt_vkms.c
@@ -508,3 +508,21 @@ bool igt_vkms_crtc_is_writeback_enabled(igt_vkms_t *dev, const char *name)
 
 	return read_bool(path);
 }
+
+/**
+ * igt_vkms_crtc_set_writeback_enabled:
+ * @dev: Device the CRTC belongs to
+ * @name: CRTC name
+ * @writeback: Enable or disable the writeback connector
+ *
+ * Set the VKMS CRTC writeback connector is status.
+ */
+void igt_vkms_crtc_set_writeback_enabled(igt_vkms_t *dev, const char *name,
+					 bool writeback)
+{
+	char path[PATH_MAX];
+
+	igt_vkms_get_crtc_writeback_path(dev, name, path, sizeof(path));
+
+	write_bool(path, writeback);
+}
diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
index 5d3610057..651339221 100644
--- a/lib/igt_vkms.h
+++ b/lib/igt_vkms.h
@@ -45,5 +45,7 @@ void igt_vkms_plane_set_type(igt_vkms_t *dev, const char *name, int type);
 
 void igt_vkms_device_add_crtc(igt_vkms_t *dev, const char *name);
 bool igt_vkms_crtc_is_writeback_enabled(igt_vkms_t *dev, const char *name);
+void igt_vkms_crtc_set_writeback_enabled(igt_vkms_t *dev, const char *name,
+					 bool writeback);
 
 #endif /* __IGT_VKMS_H__ */
diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index ec5cc6ee7..0a62f3d02 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -356,6 +356,31 @@ static void test_crtc_default_values(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: crtc-wrong-values
+ * Description: Check that setting unexpected values doesn't work.
+ */
+
+static void test_crtc_wrong_values(void)
+{
+	igt_vkms_t *dev;
+	char path[PATH_MAX];
+
+	/* Test invalid values for "writeback" */
+	dev = igt_vkms_device_create(__func__);
+	igt_assert(dev);
+
+	igt_vkms_device_add_crtc(dev, "crtc0");
+	igt_vkms_crtc_set_writeback_enabled(dev, "crtc0", true);
+	igt_assert(igt_vkms_crtc_is_writeback_enabled(dev, "crtc0"));
+	igt_vkms_get_crtc_writeback_path(dev, "crtc0", path, sizeof(path));
+
+	assert_wrong_bool_values(path);
+	igt_assert(igt_vkms_crtc_is_writeback_enabled(dev, "crtc0"));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -371,6 +396,7 @@ igt_main
 		{ "plane-valid-values", test_plane_valid_values },
 		{ "crtc-default-files", test_crtc_default_files },
 		{ "crtc-default-values", test_crtc_default_values },
+		{ "crtc-wrong-values", test_crtc_wrong_values },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 12/41] tests/vkms_configfs: Test CRTC valid values
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (10 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 11/41] lib/vkms: Test CRTC invalid values José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 13/41] lib/vkms: Test encoder default files José Expósito
                   ` (32 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Test that all valid values for the CRTC "writeback" work and that it
changes accordingly.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 tests/vkms/vkms_configfs.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 0a62f3d02..1fec83602 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -381,6 +381,30 @@ static void test_crtc_wrong_values(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: crtc-valid-values
+ * Description: Check that setting valid values works.
+ */
+
+static void test_crtc_valid_values(void)
+{
+	igt_vkms_t *dev;
+
+	dev = igt_vkms_device_create(__func__);
+	igt_assert(dev);
+
+	igt_vkms_device_add_crtc(dev, "crtc0");
+
+	/* Test valid values for "writeback" */
+	igt_vkms_crtc_set_writeback_enabled(dev, "crtc0", true);
+	igt_assert(igt_vkms_crtc_is_writeback_enabled(dev, "crtc0"));
+
+	igt_vkms_crtc_set_writeback_enabled(dev, "crtc0", false);
+	igt_assert(!igt_vkms_crtc_is_writeback_enabled(dev, "crtc0"));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -397,6 +421,7 @@ igt_main
 		{ "crtc-default-files", test_crtc_default_files },
 		{ "crtc-default-values", test_crtc_default_values },
 		{ "crtc-wrong-values", test_crtc_wrong_values },
+		{ "crtc-valid-values", test_crtc_valid_values },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 13/41] lib/vkms: Test encoder default files
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (11 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 12/41] tests/vkms_configfs: Test CRTC valid values José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 14/41] lib/vkms: Test connector " José Expósito
                   ` (31 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Add a helper to create a encoder and a test checking that the default
files and directories are created.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/igt_vkms.c             | 27 +++++++++++++++++++++++++++
 lib/igt_vkms.h             |  4 ++++
 tests/vkms/vkms_configfs.c | 29 +++++++++++++++++++++++++++++
 3 files changed, 60 insertions(+)

diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
index 0b8fd6500..082bc6393 100644
--- a/lib/igt_vkms.c
+++ b/lib/igt_vkms.c
@@ -257,6 +257,21 @@ void igt_vkms_get_crtc_writeback_path(igt_vkms_t *dev, const char *name,
 				    VKMS_FILE_CRTC_WRITEBACK, path, len);
 }
 
+/**
+ * igt_vkms_get_encoder_path:
+ * @dev: Device containing the encoder
+ * @name: Encoder name
+ * @path: Output path
+ * @len: Maximum @path length
+ *
+ * Returns the encoder path.
+ */
+void igt_vkms_get_encoder_path(igt_vkms_t *dev, const char *name, char *path,
+			       size_t len)
+{
+	get_pipeline_item_path(dev, VKMS_PIPELINE_ITEM_ENCODER, name, path, len);
+}
+
 /**
  * igt_vkms_device_create:
  * @name: VKMS device name
@@ -526,3 +541,15 @@ void igt_vkms_crtc_set_writeback_enabled(igt_vkms_t *dev, const char *name,
 
 	write_bool(path, writeback);
 }
+
+/**
+ * igt_vkms_device_add_encoder:
+ * @dev: Device to add the encoder to
+ * @name: Encoder name
+ *
+ * Add a new encoder to the VKMS device.
+ */
+void igt_vkms_device_add_encoder(igt_vkms_t *dev, const char *name)
+{
+	add_pipeline_item(dev, VKMS_PIPELINE_ITEM_ENCODER, name);
+}
diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
index 651339221..4bb1421ec 100644
--- a/lib/igt_vkms.h
+++ b/lib/igt_vkms.h
@@ -31,6 +31,8 @@ void igt_vkms_get_crtc_path(igt_vkms_t *dev, const char *name, char *path,
 			    size_t len);
 void igt_vkms_get_crtc_writeback_path(igt_vkms_t *dev, const char *name,
 				      char *path, size_t len);
+void igt_vkms_get_encoder_path(igt_vkms_t *dev, const char *name, char *path,
+			       size_t len);
 
 igt_vkms_t *igt_vkms_device_create(const char *name);
 void igt_vkms_device_destroy(igt_vkms_t *dev);
@@ -48,4 +50,6 @@ bool igt_vkms_crtc_is_writeback_enabled(igt_vkms_t *dev, const char *name);
 void igt_vkms_crtc_set_writeback_enabled(igt_vkms_t *dev, const char *name,
 					 bool writeback);
 
+void igt_vkms_device_add_encoder(igt_vkms_t *dev, const char *name);
+
 #endif /* __IGT_VKMS_H__ */
diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 1fec83602..3a004a789 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -405,6 +405,34 @@ static void test_crtc_valid_values(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: encoder-default-files
+ * Description: Test that creating a encoder creates the default files and
+ *              directories.
+ */
+
+static void test_encoder_default_files(void)
+{
+	igt_vkms_t *dev;
+	char path[PATH_MAX];
+
+	static const char *dirs[] = {
+		"possible_crtcs",
+	};
+
+	dev = igt_vkms_device_create(__func__);
+	igt_assert(dev);
+
+	igt_vkms_device_add_encoder(dev, "encoder0");
+	igt_vkms_get_encoder_path(dev, "encoder0", path, sizeof(path));
+
+	assert_default_files(path,
+			     NULL, 0,
+			     dirs, ARRAY_SIZE(dirs));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -422,6 +450,7 @@ igt_main
 		{ "crtc-default-values", test_crtc_default_values },
 		{ "crtc-wrong-values", test_crtc_wrong_values },
 		{ "crtc-valid-values", test_crtc_valid_values },
+		{ "encoder-default-files", test_encoder_default_files },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 14/41] lib/vkms: Test connector default files
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (12 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 13/41] lib/vkms: Test encoder default files José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 15/41] lib/vkms: Test connector default values José Expósito
                   ` (30 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Add a helper to create a connector and a test checking that the default
files and directories are created.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/igt_vkms.c             | 27 +++++++++++++++++++++++++++
 lib/igt_vkms.h             |  4 ++++
 tests/vkms/vkms_configfs.c | 33 +++++++++++++++++++++++++++++++++
 3 files changed, 64 insertions(+)

diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
index 082bc6393..4ea369522 100644
--- a/lib/igt_vkms.c
+++ b/lib/igt_vkms.c
@@ -272,6 +272,21 @@ void igt_vkms_get_encoder_path(igt_vkms_t *dev, const char *name, char *path,
 	get_pipeline_item_path(dev, VKMS_PIPELINE_ITEM_ENCODER, name, path, len);
 }
 
+/**
+ * igt_vkms_get_connector_path:
+ * @dev: Device containing the connector
+ * @name: Connector name
+ * @path: Output path
+ * @len: Maximum @path length
+ *
+ * Returns the connector path.
+ */
+void igt_vkms_get_connector_path(igt_vkms_t *dev, const char *name, char *path,
+				 size_t len)
+{
+	get_pipeline_item_path(dev, VKMS_PIPELINE_ITEM_CONNECTOR, name, path, len);
+}
+
 /**
  * igt_vkms_device_create:
  * @name: VKMS device name
@@ -553,3 +568,15 @@ void igt_vkms_device_add_encoder(igt_vkms_t *dev, const char *name)
 {
 	add_pipeline_item(dev, VKMS_PIPELINE_ITEM_ENCODER, name);
 }
+
+/**
+ * igt_vkms_device_add_connector:
+ * @dev: Device to add the connector to
+ * @name: Connector name
+ *
+ * Add a new connector to the VKMS device.
+ */
+void igt_vkms_device_add_connector(igt_vkms_t *dev, const char *name)
+{
+	add_pipeline_item(dev, VKMS_PIPELINE_ITEM_CONNECTOR, name);
+}
diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
index 4bb1421ec..3694f4162 100644
--- a/lib/igt_vkms.h
+++ b/lib/igt_vkms.h
@@ -33,6 +33,8 @@ void igt_vkms_get_crtc_writeback_path(igt_vkms_t *dev, const char *name,
 				      char *path, size_t len);
 void igt_vkms_get_encoder_path(igt_vkms_t *dev, const char *name, char *path,
 			       size_t len);
+void igt_vkms_get_connector_path(igt_vkms_t *dev, const char *name, char *path,
+				 size_t len);
 
 igt_vkms_t *igt_vkms_device_create(const char *name);
 void igt_vkms_device_destroy(igt_vkms_t *dev);
@@ -52,4 +54,6 @@ void igt_vkms_crtc_set_writeback_enabled(igt_vkms_t *dev, const char *name,
 
 void igt_vkms_device_add_encoder(igt_vkms_t *dev, const char *name);
 
+void igt_vkms_device_add_connector(igt_vkms_t *dev, const char *name);
+
 #endif /* __IGT_VKMS_H__ */
diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 3a004a789..29739fe3a 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -433,6 +433,38 @@ static void test_encoder_default_files(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: connector-default-files
+ * Description: Test that creating a connector creates the default files and
+ *              directories.
+ */
+
+static void test_connector_default_files(void)
+{
+	igt_vkms_t *dev;
+	char path[PATH_MAX];
+
+	static const char *files[] = {
+		"status",
+	};
+
+	static const char *dirs[] = {
+		"possible_encoders",
+	};
+
+	dev = igt_vkms_device_create(__func__);
+	igt_assert(dev);
+
+	igt_vkms_device_add_connector(dev, "connector0");
+	igt_vkms_get_connector_path(dev, "connector0", path, sizeof(path));
+
+	assert_default_files(path,
+			     files, ARRAY_SIZE(files),
+			     dirs, ARRAY_SIZE(dirs));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -451,6 +483,7 @@ igt_main
 		{ "crtc-wrong-values", test_crtc_wrong_values },
 		{ "crtc-valid-values", test_crtc_valid_values },
 		{ "encoder-default-files", test_encoder_default_files },
+		{ "connector-default-files", test_connector_default_files },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 15/41] lib/vkms: Test connector default values
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (13 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 14/41] lib/vkms: Test connector " José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 16/41] lib/vkms: Test connector invalid values José Expósito
                   ` (29 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Add a helper to get the connector status and test that the default
value is set when a new connector is created.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/igt_vkms.c             | 33 +++++++++++++++++++++++++++++++++
 lib/igt_vkms.h             |  3 +++
 tests/vkms/vkms_configfs.c | 21 +++++++++++++++++++++
 3 files changed, 57 insertions(+)

diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
index 4ea369522..5d9e13ed7 100644
--- a/lib/igt_vkms.c
+++ b/lib/igt_vkms.c
@@ -24,6 +24,7 @@
 #define VKMS_FILE_ENABLED		"enabled"
 #define VKMS_FILE_PLANE_TYPE		"type"
 #define VKMS_FILE_CRTC_WRITEBACK	"writeback"
+#define VKMS_FILE_CONNECTOR_STATUS	"status"
 
 enum vkms_pipeline_item {
 	VKMS_PIPELINE_ITEM_PLANE,
@@ -287,6 +288,22 @@ void igt_vkms_get_connector_path(igt_vkms_t *dev, const char *name, char *path,
 	get_pipeline_item_path(dev, VKMS_PIPELINE_ITEM_CONNECTOR, name, path, len);
 }
 
+/**
+ * igt_vkms_get_connector_status_path:
+ * @dev: Device containing the connector
+ * @name: Connector name
+ * @path: Output path
+ * @len: Maximum @path length
+ *
+ * Returns the connector "status" file path.
+ */
+void igt_vkms_get_connector_status_path(igt_vkms_t *dev, const char *name,
+					char *path, size_t len)
+{
+	get_pipeline_item_file_path(dev, VKMS_PIPELINE_ITEM_CONNECTOR, name,
+				    VKMS_FILE_CONNECTOR_STATUS, path, len);
+}
+
 /**
  * igt_vkms_device_create:
  * @name: VKMS device name
@@ -580,3 +597,19 @@ void igt_vkms_device_add_connector(igt_vkms_t *dev, const char *name)
 {
 	add_pipeline_item(dev, VKMS_PIPELINE_ITEM_CONNECTOR, name);
 }
+
+/**
+ * igt_vkms_connector_get_status:
+ * @dev: Device the connector belongs to
+ * @name: Connector name
+ *
+ * Return the connector status.
+ */
+int igt_vkms_connector_get_status(igt_vkms_t *dev, const char *name)
+{
+	char path[PATH_MAX];
+
+	igt_vkms_get_connector_status_path(dev, name, path, sizeof(path));
+
+	return read_int(path);
+}
diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
index 3694f4162..13d7ed094 100644
--- a/lib/igt_vkms.h
+++ b/lib/igt_vkms.h
@@ -35,6 +35,8 @@ void igt_vkms_get_encoder_path(igt_vkms_t *dev, const char *name, char *path,
 			       size_t len);
 void igt_vkms_get_connector_path(igt_vkms_t *dev, const char *name, char *path,
 				 size_t len);
+void igt_vkms_get_connector_status_path(igt_vkms_t *dev, const char *name,
+					char *path, size_t len);
 
 igt_vkms_t *igt_vkms_device_create(const char *name);
 void igt_vkms_device_destroy(igt_vkms_t *dev);
@@ -55,5 +57,6 @@ void igt_vkms_crtc_set_writeback_enabled(igt_vkms_t *dev, const char *name,
 void igt_vkms_device_add_encoder(igt_vkms_t *dev, const char *name);
 
 void igt_vkms_device_add_connector(igt_vkms_t *dev, const char *name);
+int igt_vkms_connector_get_status(igt_vkms_t *dev, const char *name);
 
 #endif /* __IGT_VKMS_H__ */
diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 29739fe3a..b3fafc069 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -465,6 +465,26 @@ static void test_connector_default_files(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: connector-default-values
+ * Description: Check that the default values for the connector are correct.
+ */
+
+static void test_connector_default_values(void)
+{
+	igt_vkms_t *dev;
+
+	dev = igt_vkms_device_create(__func__);
+	igt_assert(dev);
+
+	igt_vkms_device_add_connector(dev, "connector0");
+
+	igt_assert_eq(igt_vkms_connector_get_status(dev, "connector0"),
+		      DRM_MODE_CONNECTED);
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -484,6 +504,7 @@ igt_main
 		{ "crtc-valid-values", test_crtc_valid_values },
 		{ "encoder-default-files", test_encoder_default_files },
 		{ "connector-default-files", test_connector_default_files },
+		{ "connector-default-values", test_connector_default_values },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 16/41] lib/vkms: Test connector invalid values
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (14 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 15/41] lib/vkms: Test connector default values José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-28 10:48   ` Kamil Konieczny
  2025-08-07  7:45 ` [PATCH i-g-t v4 17/41] tests/vkms_configfs: Test connector valid values José Expósito
                   ` (28 subsequent siblings)
  44 siblings, 1 reply; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

For a VKMS connector, it is only possible to set invalid values in the
connector status.

Test that setting wrong values fails and that the connector is not
accidentally changed.

Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/igt_vkms.c             | 24 ++++++++++++++++++
 lib/igt_vkms.h             |  2 ++
 tests/vkms/vkms_configfs.c | 50 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 76 insertions(+)

diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
index 5d9e13ed7..a86d5e05d 100644
--- a/lib/igt_vkms.c
+++ b/lib/igt_vkms.c
@@ -613,3 +613,27 @@ int igt_vkms_connector_get_status(igt_vkms_t *dev, const char *name)
 
 	return read_int(path);
 }
+
+/**
+ * igt_vkms_connector_set_status:
+ * @dev: Device the connector belongs to
+ * @name: Connector name
+ * @type: DRM_MODE_CONNECTED, DRM_MODE_DISCONNECTED or
+ * DRM_MODE_UNKNOWNCONNECTION
+ *
+ * Set a new status for the connector
+ */
+void igt_vkms_connector_set_status(igt_vkms_t *dev, const char *name,
+				   int status)
+{
+	char path[PATH_MAX];
+
+	if (status != DRM_MODE_CONNECTED &&
+	    status != DRM_MODE_DISCONNECTED &&
+	    status != DRM_MODE_UNKNOWNCONNECTION)
+		igt_assert(!"Cannot be reached: Unknown connector status");
+
+	igt_vkms_get_connector_status_path(dev, name, path, sizeof(path));
+
+	write_int(path, status);
+}
diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
index 13d7ed094..596990547 100644
--- a/lib/igt_vkms.h
+++ b/lib/igt_vkms.h
@@ -58,5 +58,7 @@ void igt_vkms_device_add_encoder(igt_vkms_t *dev, const char *name);
 
 void igt_vkms_device_add_connector(igt_vkms_t *dev, const char *name);
 int igt_vkms_connector_get_status(igt_vkms_t *dev, const char *name);
+void igt_vkms_connector_set_status(igt_vkms_t *dev, const char *name,
+				   int status);
 
 #endif /* __IGT_VKMS_H__ */
diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index b3fafc069..987491373 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -485,6 +485,55 @@ static void test_connector_default_values(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: connector-wrong-values
+ * Description: Check that setting unexpected values doesn't work.
+ */
+
+static void test_connector_wrong_values(void)
+{
+	struct invalid_value invalid_status_values[] = {
+		{ "", 0 },
+		{ "\0", 1 },
+		{ "-1", 2 },
+		{ "0", 1 },
+		{ "4", 1 },
+		{ "connected", 10 },
+	};
+	igt_vkms_t *dev;
+	char path[PATH_MAX];
+	int fd;
+	int ret;
+
+	/* Create a device with a disconnected connector */
+	dev = igt_vkms_device_create(__func__);
+	igt_assert(dev);
+
+	igt_vkms_device_add_connector(dev, "connector0");
+	igt_vkms_connector_set_status(dev, "connector0", DRM_MODE_DISCONNECTED);
+	igt_assert_eq(igt_vkms_connector_get_status(dev, "connector0"),
+		      DRM_MODE_DISCONNECTED);
+	igt_vkms_get_connector_status_path(dev, "connector0", path, sizeof(path));
+
+	/* Test invalid values for "status" */
+	for (int i = 0; i < ARRAY_SIZE(invalid_status_values); i++) {
+		struct invalid_value v = invalid_status_values[i];
+
+		fd = open(path, O_WRONLY);
+		igt_assert_f(fd >= 0, "Error opening '%s'\n", path);
+
+		ret = write(fd, v.value, v.size);
+		igt_assert(ret <= 0);
+
+		close(fd);
+	}
+
+	igt_assert_eq(igt_vkms_connector_get_status(dev, "connector0"),
+		      DRM_MODE_DISCONNECTED);
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -505,6 +554,7 @@ igt_main
 		{ "encoder-default-files", test_encoder_default_files },
 		{ "connector-default-files", test_connector_default_files },
 		{ "connector-default-values", test_connector_default_values },
+		{ "connector-wrong-values", test_connector_wrong_values },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 17/41] tests/vkms_configfs: Test connector valid values
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (15 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 16/41] lib/vkms: Test connector invalid values José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 18/41] lib/vkms: Test attaching planes to CRTCs José Expósito
                   ` (27 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Test that all valid values for the connector "status" work and that it
changes accordingly.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 tests/vkms/vkms_configfs.c | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 987491373..55b528a5c 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -534,6 +534,36 @@ static void test_connector_wrong_values(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: connector-valid-values
+ * Description: Check that setting valid values works.
+ */
+
+static void test_connector_valid_values(void)
+{
+	igt_vkms_t *dev;
+
+	dev = igt_vkms_device_create(__func__);
+	igt_assert(dev);
+
+	igt_vkms_device_add_connector(dev, "connector0");
+
+	/* Test valid values for "status" */
+	igt_vkms_connector_set_status(dev, "connector0", DRM_MODE_DISCONNECTED);
+	igt_assert_eq(igt_vkms_connector_get_status(dev, "connector0"),
+		      DRM_MODE_DISCONNECTED);
+
+	igt_vkms_connector_set_status(dev, "connector0", DRM_MODE_CONNECTED);
+	igt_assert_eq(igt_vkms_connector_get_status(dev, "connector0"),
+		      DRM_MODE_CONNECTED);
+
+	igt_vkms_connector_set_status(dev, "connector0", DRM_MODE_UNKNOWNCONNECTION);
+	igt_assert_eq(igt_vkms_connector_get_status(dev, "connector0"),
+		      DRM_MODE_UNKNOWNCONNECTION);
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -555,6 +585,7 @@ igt_main
 		{ "connector-default-files", test_connector_default_files },
 		{ "connector-default-values", test_connector_default_values },
 		{ "connector-wrong-values", test_connector_wrong_values },
+		{ "connector-valid-values", test_connector_valid_values },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 18/41] lib/vkms: Test attaching planes to CRTCs
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (16 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 17/41] tests/vkms_configfs: Test connector valid values José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 19/41] lib/vkms: Test attaching encoders " José Expósito
                   ` (26 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Add helpers to attach and detach planes and CRTCs and a test checking
the different valid and invalid cases.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/igt_vkms.c             | 120 +++++++++++++++++++++++++++++++++++++
 lib/igt_vkms.h             |   6 ++
 tests/vkms/vkms_configfs.c |  78 ++++++++++++++++++++++++
 3 files changed, 204 insertions(+)

diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
index a86d5e05d..66d4a397d 100644
--- a/lib/igt_vkms.c
+++ b/lib/igt_vkms.c
@@ -162,6 +162,81 @@ static void add_pipeline_item(igt_vkms_t *dev, enum vkms_pipeline_item item,
 		     path, errno, strerror(errno));
 }
 
+static const char *get_attach_dir_name(enum vkms_pipeline_item item)
+{
+	switch (item) {
+	case VKMS_PIPELINE_ITEM_PLANE:
+		return "possible_crtcs";
+	case VKMS_PIPELINE_ITEM_ENCODER:
+		return "possible_crtcs";
+	case VKMS_PIPELINE_ITEM_CONNECTOR:
+		return "possible_encoders";
+	default:
+		break;
+	}
+
+	igt_assert(!"Cannot be reached: Unknown VKMS attach directory name");
+}
+
+static void get_attach_dir_path(igt_vkms_t *dev, enum vkms_pipeline_item item,
+				const char *name, char *path, size_t len)
+{
+	const char *item_dir_name;
+	const char *attach_dir_name;
+	int ret;
+
+	item_dir_name = get_pipeline_item_dir_name(item);
+	attach_dir_name = get_attach_dir_name(item);
+
+	ret = snprintf(path, len, "%s/%s/%s/%s", dev->path, item_dir_name, name,
+		       attach_dir_name);
+	igt_assert(ret >= 0 && ret < len);
+}
+
+static bool attach_pipeline_item(igt_vkms_t *dev,
+				 enum vkms_pipeline_item src_item,
+				 const char *src_item_name,
+				 enum vkms_pipeline_item dst_item,
+				 const char *dst_item_name)
+{
+	char src_attach_path[PATH_MAX];
+	char src_path[PATH_MAX];
+	char dst_path[PATH_MAX];
+	int ret;
+
+	get_attach_dir_path(dev, src_item, src_item_name, src_attach_path,
+			    sizeof(src_attach_path));
+	ret = snprintf(src_path, sizeof(src_path), "%s/%s", src_attach_path,
+		       dst_item_name);
+	igt_assert(ret >= 0 && ret < sizeof(src_path));
+
+	get_pipeline_item_path(dev, dst_item, dst_item_name, dst_path,
+			       sizeof(dst_path));
+
+	ret = symlink(dst_path, src_path);
+	return ret == 0;
+}
+
+static bool detach_pipeline_item(igt_vkms_t *dev,
+				 enum vkms_pipeline_item src_item,
+				 const char *src_item_name,
+				 const char *dst_item_name)
+{
+	char attach_path[PATH_MAX];
+	char link_path[PATH_MAX];
+	int ret;
+
+	get_attach_dir_path(dev, src_item, src_item_name, attach_path,
+			    sizeof(attach_path));
+
+	ret = snprintf(link_path, sizeof(link_path), "%s/%s", attach_path,
+		       dst_item_name);
+	igt_assert(ret >= 0 && ret < sizeof(link_path));
+
+	ret = unlink(link_path);
+	return ret == 0;
+}
+
 /**
  * igt_require_vkms_configfs:
  *
@@ -227,6 +302,21 @@ void igt_vkms_get_plane_type_path(igt_vkms_t *dev, const char *name, char *path,
 				    VKMS_FILE_PLANE_TYPE, path, len);
 }
 
+/**
+ * igt_vkms_get_plane_possible_crtcs_path:
+ * @dev: Device containing the plane
+ * @name: Plane name
+ * @path: Output path
+ * @len: Maximum @path length
+ *
+ * Returns the plane "possible_crtcs" directory path.
+ */
+void igt_vkms_get_plane_possible_crtcs_path(igt_vkms_t *dev, const char *name,
+					    char *path, size_t len)
+{
+	get_attach_dir_path(dev, VKMS_PIPELINE_ITEM_PLANE, name, path, len);
+}
+
 /**
  * igt_vkms_get_crtc_path:
  * @dev: Device containing the CRTC
@@ -528,6 +618,36 @@ void igt_vkms_plane_set_type(igt_vkms_t *dev, const char *name, int type)
 	write_int(path, type);
 }
 
+/**
+ * igt_vkms_plane_attach_crtc:
+ * @dev: Target device
+ * @plane_name: Target plane name
+ * @crtc_name: Destination CRTC name
+ *
+ * Attach a plane to a CRTC. Return true on success and false on error.
+ */
+bool igt_vkms_plane_attach_crtc(igt_vkms_t *dev, const char *plane_name,
+				const char *crtc_name)
+{
+	return attach_pipeline_item(dev, VKMS_PIPELINE_ITEM_PLANE, plane_name,
+				    VKMS_PIPELINE_ITEM_CRTC, crtc_name);
+}
+
+/**
+ * igt_vkms_plane_detach_crtc:
+ * @dev: Target device
+ * @plane_name: Target plane name
+ * @crtc_name: Destination CRTC name
+ *
+ * Detach a plane from a CRTC. Return true on success and false on error.
+ */
+bool igt_vkms_plane_detach_crtc(igt_vkms_t *dev, const char *plane_name,
+				const char *crtc_name)
+{
+	return detach_pipeline_item(dev, VKMS_PIPELINE_ITEM_PLANE, plane_name,
+				    crtc_name);
+}
+
 /**
  * igt_vkms_device_add_crtc:
  * @dev: Device to add the CRTC to
diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
index 596990547..18f2a1068 100644
--- a/lib/igt_vkms.h
+++ b/lib/igt_vkms.h
@@ -27,6 +27,8 @@ void igt_vkms_get_plane_path(igt_vkms_t *dev, const char *name, char *path,
 			     size_t len);
 void igt_vkms_get_plane_type_path(igt_vkms_t *dev, const char *name, char *path,
 				  size_t len);
+void igt_vkms_get_plane_possible_crtcs_path(igt_vkms_t *dev, const char *name,
+					    char *path, size_t len);
 void igt_vkms_get_crtc_path(igt_vkms_t *dev, const char *name, char *path,
 			    size_t len);
 void igt_vkms_get_crtc_writeback_path(igt_vkms_t *dev, const char *name,
@@ -48,6 +50,10 @@ void igt_vkms_device_set_enabled(igt_vkms_t *dev, bool enabled);
 void igt_vkms_device_add_plane(igt_vkms_t *dev, const char *name);
 int igt_vkms_plane_get_type(igt_vkms_t *dev, const char *name);
 void igt_vkms_plane_set_type(igt_vkms_t *dev, const char *name, int type);
+bool igt_vkms_plane_attach_crtc(igt_vkms_t *dev, const char *plane_name,
+				const char *crtc_name);
+bool igt_vkms_plane_detach_crtc(igt_vkms_t *dev, const char *plane_name,
+				const char *crtc_name);
 
 void igt_vkms_device_add_crtc(igt_vkms_t *dev, const char *name);
 bool igt_vkms_crtc_is_writeback_enabled(igt_vkms_t *dev, const char *name);
diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 55b528a5c..737af8847 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -102,6 +102,20 @@ static void assert_wrong_bool_values(const char *path)
 	}
 }
 
+static bool attach(const char *src_path, const char *dst_path,
+		   const char *link_name)
+{
+	char link_path[PATH_MAX];
+	int ret;
+
+	ret = snprintf(link_path, sizeof(link_path), "%s/%s", src_path, link_name);
+	igt_assert(ret >= 0 && ret < sizeof(link_path));
+
+	ret = symlink(dst_path, link_path);
+
+	return ret == 0;
+}
+
 /**
  * SUBTEST: device-default-files
  * Description: Test that creating a VKMS device creates the default files and
@@ -564,6 +578,69 @@ static void test_connector_valid_values(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: attach-plane-to-crtc
+ * Description: Check that errors are handled while attaching planes to CRTCs.
+ */
+
+static void test_attach_plane_to_crtc(void)
+{
+	igt_vkms_t *dev1;
+	igt_vkms_t *dev2;
+	char plane1[PATH_MAX];
+	char crtc1[PATH_MAX];
+	char connector1[PATH_MAX];
+	char crtc2[PATH_MAX];
+	char dev2_enabled_path[PATH_MAX];
+	bool ok;
+
+	dev1 = igt_vkms_device_create("test_attach_plane_to_crtc_1");
+	igt_assert(dev1);
+
+	dev2 = igt_vkms_device_create("test_attach_plane_to_crtc_2");
+	igt_assert(dev2);
+
+	igt_vkms_device_add_plane(dev1, "plane1");
+	igt_vkms_device_add_crtc(dev1, "crtc1");
+	igt_vkms_device_add_connector(dev1, "connector1");
+	igt_vkms_device_add_crtc(dev2, "crtc2");
+
+	igt_vkms_get_plane_possible_crtcs_path(dev1, "plane1", plane1, sizeof(plane1));
+	igt_vkms_get_crtc_path(dev1, "crtc1", crtc1, sizeof(crtc1));
+	igt_vkms_get_connector_path(dev1, "connector1", connector1, sizeof(connector1));
+	igt_vkms_get_crtc_path(dev2, "crtc2", crtc2, sizeof(crtc2));
+	igt_vkms_get_device_enabled_path(dev2, dev2_enabled_path, sizeof(dev2_enabled_path));
+
+	/* Error: Attach a plane to a connector */
+	ok = attach(plane1, connector1, "connector");
+	igt_assert_f(!ok, "Attaching plane1 to connector1 should fail\n");
+
+	/* Error: Attach a plane to a random file */
+	ok = attach(plane1, dev2_enabled_path, "file");
+	igt_assert_f(!ok, "Attaching plane1 to a random file should fail\n");
+
+	/* Error: Attach a plane to a CRTC from other device */
+	ok = attach(plane1, crtc2, "crtc2");
+	igt_assert_f(!ok, "Attaching plane1 to crtc2 should fail\n");
+
+	/* OK: Attaching plane1 to crtc1 */
+	ok = igt_vkms_plane_attach_crtc(dev1, "plane1", "crtc1");
+	igt_assert_f(ok, "Error attaching plane1 to crtc1\n");
+
+	/* Error: Attaching plane1 to crtc1 twice */
+	ok = attach(plane1, crtc1, "crtc1_duplicated");
+	igt_assert_f(!ok, "Error attaching plane1 to crtc1 twice should fail");
+
+	/* OK: Detaching and attaching again */
+	ok = igt_vkms_plane_detach_crtc(dev1, "plane1", "crtc1");
+	igt_assert_f(ok, "Error detaching plane1 from crtc1\n");
+	ok = igt_vkms_plane_attach_crtc(dev1, "plane1", "crtc1");
+	igt_assert_f(ok, "Error attaching plane1 to crtc1\n");
+
+	igt_vkms_device_destroy(dev1);
+	igt_vkms_device_destroy(dev2);
+}
+
 igt_main
 {
 	struct {
@@ -586,6 +663,7 @@ igt_main
 		{ "connector-default-values", test_connector_default_values },
 		{ "connector-wrong-values", test_connector_wrong_values },
 		{ "connector-valid-values", test_connector_valid_values },
+		{ "attach-plane-to-crtc", test_attach_plane_to_crtc },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 19/41] lib/vkms: Test attaching encoders to CRTCs
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (17 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 18/41] lib/vkms: Test attaching planes to CRTCs José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 20/41] lib/vkms: Test attaching connectors to encoders José Expósito
                   ` (25 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Add helpers to attach and detach encoders and CRTCs and a test checking
the different valid and invalid cases.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/igt_vkms.c             | 46 ++++++++++++++++++++++++++
 lib/igt_vkms.h             |  6 ++++
 tests/vkms/vkms_configfs.c | 66 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 118 insertions(+)

diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
index 66d4a397d..13ba50273 100644
--- a/lib/igt_vkms.c
+++ b/lib/igt_vkms.c
@@ -363,6 +363,21 @@ void igt_vkms_get_encoder_path(igt_vkms_t *dev, const char *name, char *path,
 	get_pipeline_item_path(dev, VKMS_PIPELINE_ITEM_ENCODER, name, path, len);
 }
 
+/**
+ * igt_vkms_get_encoder_possible_crtcs_path:
+ * @dev: Device containing the encoder
+ * @name: Encoder name
+ * @path: Output path
+ * @len: Maximum @path length
+ *
+ * Returns the encoder "possible_crtcs" directory path.
+ */
+void igt_vkms_get_encoder_possible_crtcs_path(igt_vkms_t *dev, const char *name,
+					      char *path, size_t len)
+{
+	get_attach_dir_path(dev, VKMS_PIPELINE_ITEM_ENCODER, name, path, len);
+}
+
 /**
  * igt_vkms_get_connector_path:
  * @dev: Device containing the connector
@@ -706,6 +721,37 @@ void igt_vkms_device_add_encoder(igt_vkms_t *dev, const char *name)
 	add_pipeline_item(dev, VKMS_PIPELINE_ITEM_ENCODER, name);
 }
 
+/**
+ * igt_vkms_encoder_attach_crtc:
+ * @dev: Target device
+ * @encoder_name: Target encoder name
+ * @crtc_name: Destination CRTC name
+ *
+ * Attach an encoder to a CRTC. Return true on success and false on error.
+ */
+bool igt_vkms_encoder_attach_crtc(igt_vkms_t *dev, const char *encoder_name,
+				  const char *crtc_name)
+{
+	return attach_pipeline_item(dev, VKMS_PIPELINE_ITEM_ENCODER,
+				    encoder_name, VKMS_PIPELINE_ITEM_CRTC,
+				    crtc_name);
+}
+
+/**
+ * igt_vkms_encoder_detach_crtc:
+ * @dev: Target device
+ * @encoder_name: Target encoder name
+ * @crtc_name: Destination CRTC name
+ *
+ * Detach an encoder from a CRTC. Return true on success and false on error.
+ */
+bool igt_vkms_encoder_detach_crtc(igt_vkms_t *dev, const char *encoder_name,
+				  const char *crtc_name)
+{
+	return detach_pipeline_item(dev, VKMS_PIPELINE_ITEM_ENCODER,
+				    encoder_name, crtc_name);
+}
+
 /**
  * igt_vkms_device_add_connector:
  * @dev: Device to add the connector to
diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
index 18f2a1068..4975fdf49 100644
--- a/lib/igt_vkms.h
+++ b/lib/igt_vkms.h
@@ -35,6 +35,8 @@ void igt_vkms_get_crtc_writeback_path(igt_vkms_t *dev, const char *name,
 				      char *path, size_t len);
 void igt_vkms_get_encoder_path(igt_vkms_t *dev, const char *name, char *path,
 			       size_t len);
+void igt_vkms_get_encoder_possible_crtcs_path(igt_vkms_t *dev, const char *name,
+					      char *path, size_t len);
 void igt_vkms_get_connector_path(igt_vkms_t *dev, const char *name, char *path,
 				 size_t len);
 void igt_vkms_get_connector_status_path(igt_vkms_t *dev, const char *name,
@@ -61,6 +63,10 @@ void igt_vkms_crtc_set_writeback_enabled(igt_vkms_t *dev, const char *name,
 					 bool writeback);
 
 void igt_vkms_device_add_encoder(igt_vkms_t *dev, const char *name);
+bool igt_vkms_encoder_attach_crtc(igt_vkms_t *dev, const char *encoder_name,
+				  const char *crtc_name);
+bool igt_vkms_encoder_detach_crtc(igt_vkms_t *dev, const char *encoder_name,
+				  const char *crtc_name);
 
 void igt_vkms_device_add_connector(igt_vkms_t *dev, const char *name);
 int igt_vkms_connector_get_status(igt_vkms_t *dev, const char *name);
diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 737af8847..d210b7f89 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -641,6 +641,71 @@ static void test_attach_plane_to_crtc(void)
 	igt_vkms_device_destroy(dev2);
 }
 
+/**
+ * SUBTEST: attach-encoder-to-crtc
+ * Description: Check that errors are handled while attaching encoders to CRTCs.
+ */
+
+static void test_attach_encoder_to_crtc(void)
+{
+	igt_vkms_t *dev1;
+	igt_vkms_t *dev2;
+	char plane1[PATH_MAX];
+	char crtc1[PATH_MAX];
+	char encoder1[PATH_MAX];
+	char plane1_type_path[PATH_MAX];
+	char crtc2[PATH_MAX];
+	bool ok;
+
+	dev1 = igt_vkms_device_create("test_attach_encoder_to_crtc_1");
+	igt_assert(dev1);
+
+	dev2 = igt_vkms_device_create("test_attach_encoder_to_crtc_2");
+	igt_assert(dev2);
+
+	igt_vkms_device_add_plane(dev1, "plane1");
+	igt_vkms_device_add_crtc(dev1, "crtc1");
+	igt_vkms_device_add_encoder(dev1, "encoder1");
+	igt_vkms_device_add_crtc(dev2, "crtc2");
+
+	igt_vkms_get_plane_path(dev1, "plane1", plane1, sizeof(plane1));
+	igt_vkms_get_crtc_path(dev1, "crtc1", crtc1, sizeof(crtc1));
+	igt_vkms_get_encoder_possible_crtcs_path(dev1, "encoder1", encoder1,
+						 sizeof(encoder1));
+	igt_vkms_get_crtc_path(dev2, "crtc2", crtc2, sizeof(crtc2));
+	igt_vkms_get_plane_type_path(dev1, "plane1", plane1_type_path,
+				     sizeof(plane1_type_path));
+
+	/* Error: Attach a encoder to a plane */
+	ok = attach(encoder1, plane1, "plane");
+	igt_assert_f(!ok, "Attaching encoder1 to plane1 should fail\n");
+
+	/* Error: Attach a encoder to a random file */
+	ok = attach(encoder1, plane1_type_path, "file");
+	igt_assert_f(!ok, "Attaching encoder1 to a random file should fail\n");
+
+	/* Error: Attach a encoder to a CRTC from other device */
+	ok = attach(encoder1, crtc2, "crtc2");
+	igt_assert_f(!ok, "Attaching encoder1 to crtc2 should fail\n");
+
+	/* OK: Attaching encoder1 to crtc1 */
+	ok = igt_vkms_encoder_attach_crtc(dev1, "encoder1", "crtc1");
+	igt_assert_f(ok, "Error attaching plane1 to crtc1\n");
+
+	/* Error: Attaching encoder1 to crtc1 twice */
+	ok = attach(encoder1, crtc1, "crtc1_duplicated");
+	igt_assert_f(!ok, "Error attaching encoder1 to crtc1 twice should fail");
+
+	/* OK: Detaching and attaching again */
+	ok = igt_vkms_encoder_detach_crtc(dev1, "encoder1", "crtc1");
+	igt_assert_f(ok, "Error detaching encoder1 from crtc1\n");
+	ok = igt_vkms_encoder_attach_crtc(dev1, "encoder1", "crtc1");
+	igt_assert_f(ok, "Error attaching encoder1 to crtc1\n");
+
+	igt_vkms_device_destroy(dev1);
+	igt_vkms_device_destroy(dev2);
+}
+
 igt_main
 {
 	struct {
@@ -664,6 +729,7 @@ igt_main
 		{ "connector-wrong-values", test_connector_wrong_values },
 		{ "connector-valid-values", test_connector_valid_values },
 		{ "attach-plane-to-crtc", test_attach_plane_to_crtc },
+		{ "attach-encoder-to-crtc", test_attach_encoder_to_crtc },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 20/41] lib/vkms: Test attaching connectors to encoders
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (18 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 19/41] lib/vkms: Test attaching encoders " José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 21/41] lib/igt_device_scan: Allow to find device by sysname José Expósito
                   ` (24 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Add helpers to attach and detach connectors and encoders and a test
checking the different valid and invalid cases.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/igt_vkms.c             | 50 ++++++++++++++++++++++++++++
 lib/igt_vkms.h             |  9 +++++
 tests/vkms/vkms_configfs.c | 68 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 127 insertions(+)

diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
index 13ba50273..0897c77ab 100644
--- a/lib/igt_vkms.c
+++ b/lib/igt_vkms.c
@@ -409,6 +409,22 @@ void igt_vkms_get_connector_status_path(igt_vkms_t *dev, const char *name,
 				    VKMS_FILE_CONNECTOR_STATUS, path, len);
 }
 
+/**
+ * igt_vkms_get_connector_possible_encoders_path:
+ * @dev: Device containing the connector
+ * @name: Connector name
+ * @path: Output path
+ * @len: Maximum @path length
+ *
+ * Returns the connector "possible_encoders" directory path.
+ */
+void igt_vkms_get_connector_possible_encoders_path(igt_vkms_t *dev,
+						   const char *name, char *path,
+						   size_t len)
+{
+	get_attach_dir_path(dev, VKMS_PIPELINE_ITEM_CONNECTOR, name, path, len);
+}
+
 /**
  * igt_vkms_device_create:
  * @name: VKMS device name
@@ -803,3 +819,37 @@ void igt_vkms_connector_set_status(igt_vkms_t *dev, const char *name,
 
 	write_int(path, status);
 }
+
+/**
+ * igt_vkms_connector_attach_encoder:
+ * @dev: Target device
+ * @connector_name: Target connector name
+ * @encoder_name: Destination encoder name
+ *
+ * Attach a connector to an encoder. Return true on success and false on error.
+ */
+bool igt_vkms_connector_attach_encoder(igt_vkms_t *dev,
+				       const char *connector_name,
+				       const char *encoder_name)
+{
+	return attach_pipeline_item(dev, VKMS_PIPELINE_ITEM_CONNECTOR,
+				    connector_name, VKMS_PIPELINE_ITEM_ENCODER,
+				    encoder_name);
+}
+
+/**
+ * igt_vkms_connector_detach_encoder:
+ * @dev: Target device
+ * @connector_name: Target connector name
+ * @encoder_name: Destination encoder name
+ *
+ * Detach a connector from an encoder. Return true on success and false on
+ * error.
+ */
+bool igt_vkms_connector_detach_encoder(igt_vkms_t *dev,
+				       const char *connector_name,
+				       const char *encoder_name)
+{
+	return detach_pipeline_item(dev, VKMS_PIPELINE_ITEM_CONNECTOR,
+				    connector_name, encoder_name);
+}
diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
index 4975fdf49..62187a8aa 100644
--- a/lib/igt_vkms.h
+++ b/lib/igt_vkms.h
@@ -41,6 +41,9 @@ void igt_vkms_get_connector_path(igt_vkms_t *dev, const char *name, char *path,
 				 size_t len);
 void igt_vkms_get_connector_status_path(igt_vkms_t *dev, const char *name,
 					char *path, size_t len);
+void igt_vkms_get_connector_possible_encoders_path(igt_vkms_t *dev,
+						   const char *name, char *path,
+						   size_t len);
 
 igt_vkms_t *igt_vkms_device_create(const char *name);
 void igt_vkms_device_destroy(igt_vkms_t *dev);
@@ -72,5 +75,11 @@ void igt_vkms_device_add_connector(igt_vkms_t *dev, const char *name);
 int igt_vkms_connector_get_status(igt_vkms_t *dev, const char *name);
 void igt_vkms_connector_set_status(igt_vkms_t *dev, const char *name,
 				   int status);
+bool igt_vkms_connector_attach_encoder(igt_vkms_t *dev,
+				       const char *connector_name,
+				       const char *encoder_name);
+bool igt_vkms_connector_detach_encoder(igt_vkms_t *dev,
+				       const char *connector_name,
+				       const char *encoder_name);
 
 #endif /* __IGT_VKMS_H__ */
diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index d210b7f89..8391513ea 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -706,6 +706,73 @@ static void test_attach_encoder_to_crtc(void)
 	igt_vkms_device_destroy(dev2);
 }
 
+/**
+ * SUBTEST: attach-connector-to-encoder
+ * Description: Check that errors are handled while attaching connectors to
+ *              encoders.
+ */
+
+static void test_attach_connector_to_encoder(void)
+{
+	igt_vkms_t *dev1;
+	igt_vkms_t *dev2;
+	char crtc1[PATH_MAX];
+	char encoder1[PATH_MAX];
+	char connector1[PATH_MAX];
+	char encoder2[PATH_MAX];
+	char crtc1_writeback_path[PATH_MAX];
+	bool ok;
+
+	dev1 = igt_vkms_device_create("test_attach_encoder_to_crtc_1");
+	igt_assert(dev1);
+
+	dev2 = igt_vkms_device_create("test_attach_encoder_to_crtc_2");
+	igt_assert(dev2);
+
+	igt_vkms_device_add_crtc(dev1, "crtc1");
+	igt_vkms_device_add_encoder(dev1, "encoder1");
+	igt_vkms_device_add_connector(dev1, "connector1");
+	igt_vkms_device_add_encoder(dev2, "encoder2");
+
+	igt_vkms_get_crtc_path(dev1, "crtc1", crtc1, sizeof(crtc1));
+	igt_vkms_get_encoder_path(dev1, "encoder1", encoder1, sizeof(encoder1));
+	igt_vkms_get_connector_possible_encoders_path(dev1, "connector1",
+						      connector1,
+						      sizeof(connector1));
+	igt_vkms_get_encoder_path(dev2, "encoder2", encoder2, sizeof(encoder2));
+	igt_vkms_get_crtc_writeback_path(dev1, "crtc1", crtc1_writeback_path,
+					 sizeof(crtc1_writeback_path));
+
+	/* Error: Attach a connector to a CRTC */
+	ok = attach(connector1, crtc1, "crtc");
+	igt_assert_f(!ok, "Attaching connector1 to crtc1 should fail\n");
+
+	/* Error: Attach a connector to a random file */
+	ok = attach(connector1, crtc1_writeback_path, "file");
+	igt_assert_f(!ok, "Attaching connector1 to a random file should fail\n");
+
+	/* Error: Attach a connector to an encoder from other device */
+	ok = attach(connector1, encoder2, "encoder2");
+	igt_assert_f(!ok, "Attaching connector1 to encoder2 should fail\n");
+
+	/* OK: Attaching connector1 to encoder1 */
+	ok = igt_vkms_connector_attach_encoder(dev1, "connector1", "encoder1");
+	igt_assert_f(ok, "Error attaching plane1 to crtc1\n");
+
+	/* Error: Attaching connector1 to encoder1 twice */
+	ok = attach(connector1, encoder1, "encoder1_duplicated");
+	igt_assert_f(!ok, "Error attaching connector1 to encoder1 twice should fail");
+
+	/* OK: Detaching and attaching again */
+	ok = igt_vkms_connector_detach_encoder(dev1, "connector1", "encoder1");
+	igt_assert_f(ok, "Error detaching connector1 from encoder1\n");
+	ok = igt_vkms_connector_attach_encoder(dev1, "connector1", "encoder1");
+	igt_assert_f(ok, "Error attaching connector1 to encoder1\n");
+
+	igt_vkms_device_destroy(dev1);
+	igt_vkms_device_destroy(dev2);
+}
+
 igt_main
 {
 	struct {
@@ -730,6 +797,7 @@ igt_main
 		{ "connector-valid-values", test_connector_valid_values },
 		{ "attach-plane-to-crtc", test_attach_plane_to_crtc },
 		{ "attach-encoder-to-crtc", test_attach_encoder_to_crtc },
+		{ "attach-connector-to-encoder", test_attach_connector_to_encoder },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 21/41] lib/igt_device_scan: Allow to find device by sysname
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (19 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 20/41] lib/vkms: Test attaching connectors to encoders José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 22/41] tests/vkms_configfs: Test enablement without pipeline items José Expósito
                   ` (23 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

The VKMS driver allows to create multiple devices handled by the same
driver but with a different sysname.

In order to differentiate between them, allow to find devices by
sysname.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/igt_device_scan.c | 22 ++++++++++++++++++++++
 lib/igt_device_scan.h |  2 ++
 2 files changed, 24 insertions(+)

diff --git a/lib/igt_device_scan.c b/lib/igt_device_scan.c
index 0ab7b7a0a..abd8ca209 100644
--- a/lib/igt_device_scan.c
+++ b/lib/igt_device_scan.c
@@ -231,6 +231,7 @@ struct igt_device {
 	char *subsystem;
 	char *syspath;
 	char *devnode;
+	char *sysname;
 
 	/* /dev/dri/... paths */
 	char *drm_card;
@@ -680,6 +681,7 @@ static struct igt_device *igt_device_new_from_udev(struct udev_device *dev,
 	idev->syspath = strdup_nullsafe(udev_device_get_syspath(dev));
 	idev->subsystem = strdup_nullsafe(udev_device_get_subsystem(dev));
 	idev->devnode = strdup_nullsafe(udev_device_get_devnode(dev));
+	idev->sysname = strdup_nullsafe(udev_device_get_sysname(dev));
 
 	if (idev->devnode && strstr(idev->devnode, "/dev/dri/card"))
 		idev->drm_card = strdup(idev->devnode);
@@ -2145,6 +2147,26 @@ bool igt_device_card_match_pci(const char *filter,
        return __igt_device_card_match(filter, card, true);
 }
 
+bool igt_device_find_card_by_sysname(const char *sysname,
+				     struct igt_device_card *card)
+{
+	struct igt_device *dev;
+
+	igt_assert(card);
+	igt_assert(sysname);
+
+	memset(card, 0, sizeof(*card));
+
+	igt_list_for_each_entry(dev, &igt_devs.all, link) {
+		if (strcmp(dev->sysname, sysname) == 0) {
+			__copy_dev_to_card(dev, card);
+			return true;
+		}
+	}
+
+	return false;
+}
+
 /**
  * igt_device_card_match_all
  * @filter: filter string.
diff --git a/lib/igt_device_scan.h b/lib/igt_device_scan.h
index e6e31e799..f24a193cd 100644
--- a/lib/igt_device_scan.h
+++ b/lib/igt_device_scan.h
@@ -94,6 +94,8 @@ bool igt_device_find_first_i915_discrete_card(struct igt_device_card *card);
 bool igt_device_find_integrated_card(struct igt_device_card *card);
 bool igt_device_find_first_xe_discrete_card(struct igt_device_card *card);
 bool igt_device_find_xe_integrated_card(struct igt_device_card *card);
+bool igt_device_find_card_by_sysname(const char *sysname,
+				     struct igt_device_card *card);
 char *igt_device_get_pretty_name(struct igt_device_card *card, bool numeric);
 int igt_open_card(struct igt_device_card *card);
 int igt_open_render(struct igt_device_card *card);
-- 
2.50.1


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

* [PATCH i-g-t v4 22/41] tests/vkms_configfs: Test enablement without pipeline items
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (20 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 21/41] lib/igt_device_scan: Allow to find device by sysname José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 23/41] lib/vkms: Create VKMS device from static config José Expósito
                   ` (22 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

It shouldn't be possible to enable a device without creating and
attaching its pipeline items.

Test that the device is not enabled and also that no actual device was
created using libdrm.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 tests/vkms/vkms_configfs.c | 39 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 8391513ea..2156b59ca 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -21,6 +21,7 @@
 
 #include "drmtest.h"
 #include "igt.h"
+#include "igt_device_scan.h"
 #include "igt_vkms.h"
 
 struct invalid_value {
@@ -116,6 +117,20 @@ static bool attach(const char *src_path, const char *dst_path,
 	return ret == 0;
 }
 
+static bool find_device(const char *name, struct igt_device_card *card)
+{
+	igt_devices_scan();
+
+	return igt_device_find_card_by_sysname(name, card);
+}
+
+static bool device_exists(const char *name)
+{
+	struct igt_device_card card;
+
+	return find_device(name, &card);
+}
+
 /**
  * SUBTEST: device-default-files
  * Description: Test that creating a VKMS device creates the default files and
@@ -773,6 +788,29 @@ static void test_attach_connector_to_encoder(void)
 	igt_vkms_device_destroy(dev2);
 }
 
+/**
+ * SUBTEST: enable-no-pipeline-items
+ * Description: Try to enable a VKMS device without adding any pipeline items
+ *              and test that it fails.
+ */
+
+static void test_enable_no_pipeline_items(void)
+{
+	igt_vkms_t *dev;
+
+	dev = igt_vkms_device_create(__func__);
+	igt_assert(dev);
+
+	/* Try to enable it and check that the device is not set as enabled */
+	igt_vkms_device_set_enabled(dev, true);
+	igt_assert(!igt_vkms_device_is_enabled(dev));
+
+	/* Check that no actual device was created*/
+	igt_assert(!device_exists(__func__));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -798,6 +836,7 @@ igt_main
 		{ "attach-plane-to-crtc", test_attach_plane_to_crtc },
 		{ "attach-encoder-to-crtc", test_attach_encoder_to_crtc },
 		{ "attach-connector-to-encoder", test_attach_connector_to_encoder },
+		{ "enable-no-pipeline-items", test_enable_no_pipeline_items },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 23/41] lib/vkms: Create VKMS device from static config
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (21 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 22/41] tests/vkms_configfs: Test enablement without pipeline items José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 24/41] tests/vkms_configfs: Test adding too many planes José Expósito
                   ` (21 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

In order to make the process of creating new VKMS devices as simple as
possible and in a declarative way, create a set of structures
representing a VKMS device configuration and a function that reads them
and applies the configuration.

In addition, add a test using this new function that checks that
creating a device without planes fails.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/igt_vkms.c             | 88 ++++++++++++++++++++++++++++++++++++++
 lib/igt_vkms.h             | 43 +++++++++++++++++++
 tests/vkms/vkms_configfs.c | 40 +++++++++++++++++
 3 files changed, 171 insertions(+)

diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
index 0897c77ab..30f7c289f 100644
--- a/lib/igt_vkms.c
+++ b/lib/igt_vkms.c
@@ -465,6 +465,94 @@ igt_vkms_t *igt_vkms_device_create(const char *name)
 	return dev;
 }
 
+/**
+ * igt_vkms_device_create_from_config:
+ * @cfg: Device configuration
+ *
+ * Create a VKMS device and set all the parameters specified by the
+ * configuration.
+ */
+igt_vkms_t *igt_vkms_device_create_from_config(igt_vkms_config_t *cfg)
+{
+	igt_vkms_t *dev;
+	igt_vkms_plane_config_t *plane;
+	igt_vkms_crtc_config_t *crtc;
+	igt_vkms_encoder_config_t *encoder;
+	igt_vkms_connector_config_t *connector;
+	const char *name;
+	int n, i;
+
+	igt_debug("Creating device from configuration:\n");
+	igt_debug("\t- Device name: %s\n", cfg->device_name);
+
+	dev = igt_vkms_device_create(cfg->device_name);
+	if (!dev)
+		return NULL;
+
+	for (n = 0; (crtc = &cfg->crtcs[n])->name; n++) {
+		igt_debug("\t- CRTC %d:\n", n);
+		igt_debug("\t\t- name: %s\n", crtc->name);
+		igt_debug("\t\t- writeback: %d\n", crtc->writeback);
+
+		igt_vkms_device_add_crtc(dev, crtc->name);
+		igt_vkms_crtc_set_writeback_enabled(dev, crtc->name,
+						    crtc->writeback);
+	}
+
+	for (n = 0; (plane = &cfg->planes[n])->name; n++) {
+		igt_debug("\t- Plane %d:\n", n);
+		igt_debug("\t\t- name: %s\n", plane->name);
+		igt_debug("\t\t- type: %d\n", plane->type);
+		igt_debug("\t\t- possible_crtcs:\n");
+
+		igt_vkms_device_add_plane(dev, plane->name);
+		igt_vkms_plane_set_type(dev, plane->name, plane->type);
+
+		for (i = 0; (name = plane->possible_crtcs[i]); i++) {
+			igt_debug("\t\t\t- %s\n", name);
+
+			igt_vkms_plane_attach_crtc(dev, plane->name, name);
+		}
+	}
+
+	for (n = 0; (encoder = &cfg->encoders[n])->name; n++) {
+		igt_debug("\t- Encoder %d:\n", n);
+		igt_debug("\t\t- name: %s\n", encoder->name);
+		igt_debug("\t\t- possible_crtcs:\n");
+
+		igt_vkms_device_add_encoder(dev, encoder->name);
+
+		for (i = 0; (name = encoder->possible_crtcs[i]); i++) {
+			igt_debug("\t\t\t- %s\n", name);
+
+			igt_vkms_encoder_attach_crtc(dev, encoder->name, name);
+		}
+	}
+
+	for (n = 0; (connector = &cfg->connectors[n])->name; n++) {
+		if (connector->status == 0)
+			connector->status = DRM_MODE_CONNECTED;
+
+		igt_debug("\t- Connector %d:\n", n);
+		igt_debug("\t\t- name: %s\n", connector->name);
+		igt_debug("\t\t- status: %d\n", connector->status);
+		igt_debug("\t\t- possible_encoders:\n");
+
+		igt_vkms_device_add_connector(dev, connector->name);
+		igt_vkms_connector_set_status(dev, connector->name,
+					      connector->status);
+
+		for (i = 0; (name = connector->possible_encoders[i]); i++) {
+			igt_debug("\t\t\t- %s\n", name);
+
+			igt_vkms_connector_attach_encoder(dev, connector->name,
+							  name);
+		}
+	}
+
+	return dev;
+}
+
 static int detach_pipeline_items(const char *path, const struct stat *info,
 				 const int typeflag, struct FTW *pathinfo)
 {
diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
index 62187a8aa..7de3171cb 100644
--- a/lib/igt_vkms.h
+++ b/lib/igt_vkms.h
@@ -10,6 +10,8 @@
 
 #include <stdbool.h>
 
+#define VKMS_MAX_PIPELINE_ITEMS	40
+
 /**
  * igt_vkms_t:
  * @path: VKMS root directory inside configfs mounted directory
@@ -20,6 +22,46 @@ typedef struct igt_vkms {
 	char *path;
 } igt_vkms_t;
 
+typedef struct igt_vkms_crtc_config {
+	const char *name;
+	bool writeback; /* Default: false */
+} igt_vkms_crtc_config_t;
+
+typedef struct igt_vkms_plane_config {
+	const char *name;
+	int type; /* Default: DRM_PLANE_TYPE_OVERLAY */
+	const char *possible_crtcs[VKMS_MAX_PIPELINE_ITEMS];
+} igt_vkms_plane_config_t;
+
+typedef struct igt_vkms_encoder_config {
+	const char *name;
+	const char *possible_crtcs[VKMS_MAX_PIPELINE_ITEMS];
+} igt_vkms_encoder_config_t;
+
+typedef struct igt_vkms_connector_config {
+	const char *name;
+	int status; /* Default: DRM_MODE_CONNECTED */
+	const char *possible_encoders[VKMS_MAX_PIPELINE_ITEMS];
+} igt_vkms_connector_config_t;
+
+/**
+ * igt_vkms_config_t:
+ * @device_name: Device name
+ * @planes: NULL terminated list of plane configurations
+ * @crtcs: NULL terminated list of CRTC configurations
+ * @encoders: NULL terminated list of encoders configurations
+ * @connectors: NULL terminated list of connector configurations
+ *
+ * Structure used to create a VKMS device from a static configuration.
+ */
+typedef struct igt_vkms_config {
+	const char *device_name;
+	igt_vkms_plane_config_t planes[VKMS_MAX_PIPELINE_ITEMS];
+	igt_vkms_crtc_config_t crtcs[VKMS_MAX_PIPELINE_ITEMS];
+	igt_vkms_encoder_config_t encoders[VKMS_MAX_PIPELINE_ITEMS];
+	igt_vkms_connector_config_t connectors[VKMS_MAX_PIPELINE_ITEMS];
+} igt_vkms_config_t;
+
 void igt_require_vkms_configfs(void);
 
 void igt_vkms_get_device_enabled_path(igt_vkms_t *dev, char *path, size_t len);
@@ -46,6 +88,7 @@ void igt_vkms_get_connector_possible_encoders_path(igt_vkms_t *dev,
 						   size_t len);
 
 igt_vkms_t *igt_vkms_device_create(const char *name);
+igt_vkms_t *igt_vkms_device_create_from_config(igt_vkms_config_t *cfg);
 void igt_vkms_device_destroy(igt_vkms_t *dev);
 void igt_vkms_destroy_all_devices(void);
 
diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 2156b59ca..551b7610a 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -811,6 +811,45 @@ static void test_enable_no_pipeline_items(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: enable-no-planes
+ * Description: Try to enable a VKMS device without adding planes and test that
+ *              it fails.
+ */
+
+static void test_enable_no_planes(void)
+{
+	igt_vkms_t *dev;
+
+	igt_vkms_config_t cfg = {
+		.device_name = __func__,
+		.planes = { },
+		.crtcs = {
+			{ .name = "crtc0" },
+			{ .name = "crtc1" },
+		},
+		.encoders = {
+			{ .name = "encoder0", .possible_crtcs = { "crtc0" } },
+			{ .name = "encoder1", .possible_crtcs = { "crtc1" } },
+		},
+		.connectors = {
+			{
+				.name = "connector0",
+				.possible_encoders = { "encoder0", "encoder1" },
+			},
+		},
+	};
+
+	dev = igt_vkms_device_create_from_config(&cfg);
+	igt_assert(dev);
+
+	igt_vkms_device_set_enabled(dev, true);
+	igt_assert(!igt_vkms_device_is_enabled(dev));
+	igt_assert(!device_exists(__func__));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -837,6 +876,7 @@ igt_main
 		{ "attach-encoder-to-crtc", test_attach_encoder_to_crtc },
 		{ "attach-connector-to-encoder", test_attach_connector_to_encoder },
 		{ "enable-no-pipeline-items", test_enable_no_pipeline_items },
+		{ "enable-no-planes", test_enable_no_planes },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 24/41] tests/vkms_configfs: Test adding too many planes
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (22 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 23/41] lib/vkms: Create VKMS device from static config José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 25/41] tests/vkms_configfs: Test not adding a primary plane José Expósito
                   ` (20 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

The kernel references pipeline items with 32 bit bitmaks, therefore,
adding more than 31 items causes an overflow.

Make sure that this limit is handled correctly.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 tests/vkms/vkms_configfs.c | 57 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)

diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 551b7610a..6937373d8 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -850,6 +850,62 @@ static void test_enable_no_planes(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: enable-too-many-planes
+ * Description: Try to enable a VKMS device with too many planes and test that
+ *              it fails.
+ */
+
+static void test_enable_too_many_planes(void)
+{
+	igt_vkms_t *dev;
+	char plane_names[VKMS_MAX_PIPELINE_ITEMS][8];
+	int ret;
+
+	igt_vkms_config_t cfg = {
+		.device_name = __func__,
+		.planes = {
+			{
+				.name = "plane0",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc0" },
+			},
+		},
+		.crtcs = {
+			{ .name = "crtc0" },
+		},
+		.encoders = {
+			{ .name = "encoder0", .possible_crtcs = { "crtc0" } },
+		},
+		.connectors = {
+			{
+				.name = "connector0",
+				.possible_encoders = { "encoder0" },
+			},
+		},
+	};
+
+	for (int n = 1; n < 32; n++) {
+		ret = snprintf(plane_names[n], sizeof(plane_names[n]),
+			       "plane%d", n);
+		igt_assert(ret >= 0 && ret < sizeof(plane_names[n]));
+
+		cfg.planes[n] = (igt_vkms_plane_config_t){
+			.name = plane_names[n],
+			.possible_crtcs = { "crtc0" },
+		};
+	}
+
+	dev = igt_vkms_device_create_from_config(&cfg);
+	igt_assert(dev);
+
+	igt_vkms_device_set_enabled(dev, true);
+	igt_assert(!igt_vkms_device_is_enabled(dev));
+	igt_assert(!device_exists(__func__));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -877,6 +933,7 @@ igt_main
 		{ "attach-connector-to-encoder", test_attach_connector_to_encoder },
 		{ "enable-no-pipeline-items", test_enable_no_pipeline_items },
 		{ "enable-no-planes", test_enable_no_planes },
+		{ "enable-too-many-planes", test_enable_too_many_planes },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 25/41] tests/vkms_configfs: Test not adding a primary plane
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (23 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 24/41] tests/vkms_configfs: Test adding too many planes José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 26/41] tests/vkms_configfs: Test adding multiple primary planes José Expósito
                   ` (19 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Try to enable a VKMS device without a primary plane for one of its
CRTCs and test that it fails.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 tests/vkms/vkms_configfs.c | 51 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 6937373d8..56fbbd93a 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -906,6 +906,56 @@ static void test_enable_too_many_planes(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: enable-no-primary-plane
+ * Description: Try to enable a VKMS device without a primary plane for one of
+ *              its CRTCs and test that it fails.
+ */
+
+static void test_enable_no_primary_plane(void)
+{
+	igt_vkms_t *dev;
+
+	igt_vkms_config_t cfg = {
+		.device_name = __func__,
+		.planes = {
+			{
+				.name = "plane0",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc0" },
+			},
+			{
+				.name = "plane1",
+				.type = DRM_PLANE_TYPE_CURSOR,
+				.possible_crtcs = { "crtc1" },
+			},
+		},
+		.crtcs = {
+			{ .name = "crtc0" },
+			{ .name = "crtc1" },
+		},
+		.encoders = {
+			{ .name = "encoder0", .possible_crtcs = { "crtc0" } },
+			{ .name = "encoder1", .possible_crtcs = { "crtc1" } },
+		},
+		.connectors = {
+			{
+				.name = "connector0",
+				.possible_encoders = { "encoder0", "encoder1" },
+			},
+		},
+	};
+
+	dev = igt_vkms_device_create_from_config(&cfg);
+	igt_assert(dev);
+
+	igt_vkms_device_set_enabled(dev, true);
+	igt_assert(!igt_vkms_device_is_enabled(dev));
+	igt_assert(!device_exists(__func__));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -934,6 +984,7 @@ igt_main
 		{ "enable-no-pipeline-items", test_enable_no_pipeline_items },
 		{ "enable-no-planes", test_enable_no_planes },
 		{ "enable-too-many-planes", test_enable_too_many_planes },
+		{ "enable-no-primary-plane", test_enable_no_primary_plane },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 26/41] tests/vkms_configfs: Test adding multiple primary planes
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (24 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 25/41] tests/vkms_configfs: Test not adding a primary plane José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 27/41] tests/vkms_configfs: Test adding multiple cursor planes José Expósito
                   ` (18 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Try to enable a VKMS device with multiple primary planes for one of its
CRTCs and test that it fails.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 tests/vkms/vkms_configfs.c | 56 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 56fbbd93a..87136d32a 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -956,6 +956,61 @@ static void test_enable_no_primary_plane(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: enable-multiple-primary-planes
+ * Description: Try to enable a VKMS device with multiple primary planes for one
+ *              of its CRTCs and test that it fails.
+ */
+
+static void test_enable_multiple_primary_planes(void)
+{
+	igt_vkms_t *dev;
+
+	igt_vkms_config_t cfg = {
+		.device_name = __func__,
+		.planes = {
+			{
+				.name = "plane0",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc0" },
+			},
+			{
+				.name = "plane1",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc1" },
+			},
+			{
+				.name = "plane2",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc1" },
+			},
+		},
+		.crtcs = {
+			{ .name = "crtc0" },
+			{ .name = "crtc1" },
+		},
+		.encoders = {
+			{ .name = "encoder0", .possible_crtcs = { "crtc0" } },
+			{ .name = "encoder1", .possible_crtcs = { "crtc1" } },
+		},
+		.connectors = {
+			{
+				.name = "connector0",
+				.possible_encoders = { "encoder0", "encoder1" },
+			},
+		},
+	};
+
+	dev = igt_vkms_device_create_from_config(&cfg);
+	igt_assert(dev);
+
+	igt_vkms_device_set_enabled(dev, true);
+	igt_assert(!igt_vkms_device_is_enabled(dev));
+	igt_assert(!device_exists(__func__));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -985,6 +1040,7 @@ igt_main
 		{ "enable-no-planes", test_enable_no_planes },
 		{ "enable-too-many-planes", test_enable_too_many_planes },
 		{ "enable-no-primary-plane", test_enable_no_primary_plane },
+		{ "enable-multiple-primary-planes", test_enable_multiple_primary_planes },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 27/41] tests/vkms_configfs: Test adding multiple cursor planes
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (25 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 26/41] tests/vkms_configfs: Test adding multiple primary planes José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 28/41] tests/vkms_configfs: Test adding a plane without possible CRTCs José Expósito
                   ` (17 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Try to enable a VKMS device with multiple cursor planes for one of its
CRTCs and test that it fails.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 tests/vkms/vkms_configfs.c | 61 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 61 insertions(+)

diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 87136d32a..0e6ee37e5 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -1011,6 +1011,66 @@ static void test_enable_multiple_primary_planes(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: enable-multiple-cursor-planes
+ * Description: Try to enable a VKMS device with multiple cursor planes for one
+ *              of its CRTCs and test that it fails.
+ */
+
+static void test_enable_multiple_cursor_planes(void)
+{
+	igt_vkms_t *dev;
+
+	igt_vkms_config_t cfg = {
+		.device_name = __func__,
+		.planes = {
+			{
+				.name = "plane0",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc0" },
+			},
+			{
+				.name = "plane1",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc1" },
+			},
+			{
+				.name = "plane2",
+				.type = DRM_PLANE_TYPE_CURSOR,
+				.possible_crtcs = { "crtc1" },
+			},
+			{
+				.name = "plane3",
+				.type = DRM_PLANE_TYPE_CURSOR,
+				.possible_crtcs = { "crtc1" },
+			},
+		},
+		.crtcs = {
+			{ .name = "crtc0" },
+			{ .name = "crtc1" },
+		},
+		.encoders = {
+			{ .name = "encoder0", .possible_crtcs = { "crtc0" } },
+			{ .name = "encoder1", .possible_crtcs = { "crtc1" } },
+		},
+		.connectors = {
+			{
+				.name = "connector0",
+				.possible_encoders = { "encoder0", "encoder1" },
+			},
+		},
+	};
+
+	dev = igt_vkms_device_create_from_config(&cfg);
+	igt_assert(dev);
+
+	igt_vkms_device_set_enabled(dev, true);
+	igt_assert(!igt_vkms_device_is_enabled(dev));
+	igt_assert(!device_exists(__func__));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -1041,6 +1101,7 @@ igt_main
 		{ "enable-too-many-planes", test_enable_too_many_planes },
 		{ "enable-no-primary-plane", test_enable_no_primary_plane },
 		{ "enable-multiple-primary-planes", test_enable_multiple_primary_planes },
+		{ "enable-multiple-cursor-planes", test_enable_multiple_cursor_planes },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 28/41] tests/vkms_configfs: Test adding a plane without possible CRTCs
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (26 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 27/41] tests/vkms_configfs: Test adding multiple cursor planes José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 29/41] tests/vkms_configfs: Test enabling a device without CRTCs José Expósito
                   ` (16 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Try to enable a VKMS device with a plane without possible CRTCs and test
that it fails.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 tests/vkms/vkms_configfs.c | 51 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 0e6ee37e5..943e28afe 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -1071,6 +1071,56 @@ static void test_enable_multiple_cursor_planes(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: enable-plane-no-crtcs
+ * Description: Try to enable a VKMS device with a plane without possible CRTCs
+ *              and test that it fails.
+ */
+
+static void test_enable_plane_no_crtcs(void)
+{
+	igt_vkms_t *dev;
+
+	igt_vkms_config_t cfg = {
+		.device_name = __func__,
+		.planes = {
+			{
+				.name = "plane0",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc0" },
+			},
+			{
+				.name = "plane1",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = {},
+			},
+		},
+		.crtcs = {
+			{ .name = "crtc0" },
+			{ .name = "crtc1" },
+		},
+		.encoders = {
+			{ .name = "encoder0", .possible_crtcs = { "crtc0" } },
+			{ .name = "encoder1", .possible_crtcs = { "crtc1" } },
+		},
+		.connectors = {
+			{
+				.name = "connector0",
+				.possible_encoders = { "encoder0", "encoder1" },
+			},
+		},
+	};
+
+	dev = igt_vkms_device_create_from_config(&cfg);
+	igt_assert(dev);
+
+	igt_vkms_device_set_enabled(dev, true);
+	igt_assert(!igt_vkms_device_is_enabled(dev));
+	igt_assert(!device_exists(__func__));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -1102,6 +1152,7 @@ igt_main
 		{ "enable-no-primary-plane", test_enable_no_primary_plane },
 		{ "enable-multiple-primary-planes", test_enable_multiple_primary_planes },
 		{ "enable-multiple-cursor-planes", test_enable_multiple_cursor_planes },
+		{ "enable-plane-no-crtcs", test_enable_plane_no_crtcs },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 29/41] tests/vkms_configfs: Test enabling a device without CRTCs
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (27 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 28/41] tests/vkms_configfs: Test adding a plane without possible CRTCs José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 30/41] tests/vkms_configfs: Test enabling a device with too many CRTCs José Expósito
                   ` (15 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Try to enable a VKMS device without adding CRTCs and test that it fails.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 tests/vkms/vkms_configfs.c | 42 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 943e28afe..919570e71 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -1121,6 +1121,47 @@ static void test_enable_plane_no_crtcs(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: enable-no-crtcs
+ * Description: Try to enable a VKMS device without adding CRTCs and test that
+ *              it fails.
+ */
+
+static void test_enable_no_crtcs(void)
+{
+	igt_vkms_t *dev;
+
+	igt_vkms_config_t cfg = {
+		.device_name = __func__,
+		.planes = {
+			{
+				.name = "plane0",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = {},
+			},
+		},
+		.crtcs = { },
+		.encoders = {
+			{ .name = "encoder0", .possible_crtcs = { "crtc0" } },
+		},
+		.connectors = {
+			{
+				.name = "connector0",
+				.possible_encoders = { "encoder0" },
+			},
+		},
+	};
+
+	dev = igt_vkms_device_create_from_config(&cfg);
+	igt_assert(dev);
+
+	igt_vkms_device_set_enabled(dev, true);
+	igt_assert(!igt_vkms_device_is_enabled(dev));
+	igt_assert(!device_exists(__func__));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -1153,6 +1194,7 @@ igt_main
 		{ "enable-multiple-primary-planes", test_enable_multiple_primary_planes },
 		{ "enable-multiple-cursor-planes", test_enable_multiple_cursor_planes },
 		{ "enable-plane-no-crtcs", test_enable_plane_no_crtcs },
+		{ "enable-no-crtcs", test_enable_no_crtcs },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 30/41] tests/vkms_configfs: Test enabling a device with too many CRTCs
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (28 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 29/41] tests/vkms_configfs: Test enabling a device without CRTCs José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 31/41] tests/vkms_configfs: Test enabling a device without encoders José Expósito
                   ` (14 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Try to enable a VKMS device with too many CRTCs and test that it fails.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 tests/vkms/vkms_configfs.c | 54 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 54 insertions(+)

diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 919570e71..89b0c8f5e 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -1162,6 +1162,59 @@ static void test_enable_no_crtcs(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: enable-too-many-crtcs
+ * Description: Try to enable a VKMS device with too many CRTCs and test that it
+ *              fails.
+ */
+
+static void test_enable_too_many_crtcs(void)
+{
+	igt_vkms_t *dev;
+	char crtc_names[VKMS_MAX_PIPELINE_ITEMS][7];
+	int ret;
+
+	igt_vkms_config_t cfg = {
+		.device_name = __func__,
+		.planes = {
+			{
+				.name = "plane0",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc0" },
+			},
+		},
+		.crtcs = {},
+		.encoders = {
+			{ .name = "encoder0", .possible_crtcs = { "crtc0" } },
+		},
+		.connectors = {
+			{
+				.name = "connector0",
+				.possible_encoders = { "encoder0" },
+			},
+		},
+	};
+
+	for (int n = 0; n < 32; n++) {
+		ret = snprintf(crtc_names[n], sizeof(crtc_names[n]),
+			       "crtc%d", n);
+		igt_assert(ret >= 0 && ret < sizeof(crtc_names[n]));
+
+		cfg.crtcs[n] = (igt_vkms_crtc_config_t){
+			.name = crtc_names[n],
+		};
+	}
+
+	dev = igt_vkms_device_create_from_config(&cfg);
+	igt_assert(dev);
+
+	igt_vkms_device_set_enabled(dev, true);
+	igt_assert(!igt_vkms_device_is_enabled(dev));
+	igt_assert(!device_exists(__func__));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -1195,6 +1248,7 @@ igt_main
 		{ "enable-multiple-cursor-planes", test_enable_multiple_cursor_planes },
 		{ "enable-plane-no-crtcs", test_enable_plane_no_crtcs },
 		{ "enable-no-crtcs", test_enable_no_crtcs },
+		{ "enable-too-many-crtcs", test_enable_too_many_crtcs },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 31/41] tests/vkms_configfs: Test enabling a device without encoders
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (29 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 30/41] tests/vkms_configfs: Test enabling a device with too many CRTCs José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 32/41] tests/vkms_configfs: Test enabling a device with too many encoders José Expósito
                   ` (13 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Try to enable a VKMS device without adding encoders and test that it
fails.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 tests/vkms/vkms_configfs.c | 42 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 89b0c8f5e..fe8b3b650 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -1215,6 +1215,47 @@ static void test_enable_too_many_crtcs(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: enable-no-encoders
+ * Description: Try to enable a VKMS device without adding encoders and test
+ *              that it fails.
+ */
+
+static void test_enable_no_encoders(void)
+{
+	igt_vkms_t *dev;
+
+	igt_vkms_config_t cfg = {
+		.device_name = __func__,
+		.planes = {
+			{
+				.name = "plane0",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc0" },
+			},
+		},
+		.crtcs = {
+			{ .name = "crtc0" },
+		},
+		.encoders = { },
+		.connectors = {
+			{
+				.name = "connector0",
+				.possible_encoders = {},
+			},
+		},
+	};
+
+	dev = igt_vkms_device_create_from_config(&cfg);
+	igt_assert(dev);
+
+	igt_vkms_device_set_enabled(dev, true);
+	igt_assert(!igt_vkms_device_is_enabled(dev));
+	igt_assert(!device_exists(__func__));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -1249,6 +1290,7 @@ igt_main
 		{ "enable-plane-no-crtcs", test_enable_plane_no_crtcs },
 		{ "enable-no-crtcs", test_enable_no_crtcs },
 		{ "enable-too-many-crtcs", test_enable_too_many_crtcs },
+		{ "enable-no-encoders", test_enable_no_encoders },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 32/41] tests/vkms_configfs: Test enabling a device with too many encoders
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (30 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 31/41] tests/vkms_configfs: Test enabling a device without encoders José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 33/41] tests/vkms_configfs: Test adding an encoder without possible CRTCs José Expósito
                   ` (12 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Try to enable a VKMS device with too many encoders and test that it
fails.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 tests/vkms/vkms_configfs.c | 55 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 55 insertions(+)

diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index fe8b3b650..1e192e3d1 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -1256,6 +1256,60 @@ static void test_enable_no_encoders(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: enable-too-many-encoders
+ * Description: Try to enable a VKMS device with too many encoders and test that
+ *              it fails.
+ */
+
+static void test_enable_too_many_encoders(void)
+{
+	igt_vkms_t *dev;
+	char encoder_names[VKMS_MAX_PIPELINE_ITEMS][10];
+	int ret;
+
+	igt_vkms_config_t cfg = {
+		.device_name = __func__,
+		.planes = {
+			{
+				.name = "plane0",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc0" },
+			},
+		},
+		.crtcs = {
+			{ .name = "crtc0" },
+		},
+		.encoders = {},
+		.connectors = {
+			{
+				.name = "connector0",
+				.possible_encoders = { "encoder0" },
+			},
+		},
+	};
+
+	for (int n = 0; n < 32; n++) {
+		ret = snprintf(encoder_names[n], sizeof(encoder_names[n]),
+			       "encoder%d", n);
+		igt_assert(ret >= 0 && ret < sizeof(encoder_names[n]));
+
+		cfg.encoders[n] = (igt_vkms_encoder_config_t){
+			.name = encoder_names[n],
+			.possible_crtcs = { "crtc0" }
+		};
+	}
+
+	dev = igt_vkms_device_create_from_config(&cfg);
+	igt_assert(dev);
+
+	igt_vkms_device_set_enabled(dev, true);
+	igt_assert(!igt_vkms_device_is_enabled(dev));
+	igt_assert(!device_exists(__func__));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -1291,6 +1345,7 @@ igt_main
 		{ "enable-no-crtcs", test_enable_no_crtcs },
 		{ "enable-too-many-crtcs", test_enable_too_many_crtcs },
 		{ "enable-no-encoders", test_enable_no_encoders },
+		{ "enable-too-many-encoders", test_enable_too_many_encoders },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 33/41] tests/vkms_configfs: Test adding an encoder without possible CRTCs
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (31 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 32/41] tests/vkms_configfs: Test enabling a device with too many encoders José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 34/41] tests/vkms_configfs: Test adding a CRTC without encoders José Expósito
                   ` (11 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Try to enable a VKMS device with an encoder without possible CRTCs and
test that it fails.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 tests/vkms/vkms_configfs.c | 44 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 1e192e3d1..8444b5509 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -1310,6 +1310,49 @@ static void test_enable_too_many_encoders(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: enable-encoder-no-crtcs
+ * Description: Try to enable a VKMS device with an encoder without possible
+ *              CRTCs and test that it fails.
+ */
+
+static void test_enable_encoder_no_crtcs(void)
+{
+	igt_vkms_t *dev;
+
+	igt_vkms_config_t cfg = {
+		.device_name = __func__,
+		.planes = {
+			{
+				.name = "plane0",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc0" },
+			},
+		},
+		.crtcs = {
+			{ .name = "crtc0" },
+		},
+		.encoders = {
+			{ .name = "encoder0", .possible_crtcs = {} },
+		},
+		.connectors = {
+			{
+				.name = "connector0",
+				.possible_encoders = { "encoder0" },
+			},
+		},
+	};
+
+	dev = igt_vkms_device_create_from_config(&cfg);
+	igt_assert(dev);
+
+	igt_vkms_device_set_enabled(dev, true);
+	igt_assert(!igt_vkms_device_is_enabled(dev));
+	igt_assert(!device_exists(__func__));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -1346,6 +1389,7 @@ igt_main
 		{ "enable-too-many-crtcs", test_enable_too_many_crtcs },
 		{ "enable-no-encoders", test_enable_no_encoders },
 		{ "enable-too-many-encoders", test_enable_too_many_encoders },
+		{ "enable-encoder-no-crtcs", test_enable_encoder_no_crtcs },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 34/41] tests/vkms_configfs: Test adding a CRTC without encoders
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (32 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 33/41] tests/vkms_configfs: Test adding an encoder without possible CRTCs José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 35/41] tests/vkms_configfs: Test enabling a device without connectors José Expósito
                   ` (10 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Try to enable a VKMS device with a CRTC without encoders and test that
it fails.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 tests/vkms/vkms_configfs.c | 51 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 8444b5509..0b6d395cb 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -1353,6 +1353,56 @@ static void test_enable_encoder_no_crtcs(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: enable-crtc-no-encoder
+ * Description: Try to enable a VKMS device with a CRTC without encoders and
+ *              test that it fails.
+ */
+
+static void test_enable_crtc_no_encoder(void)
+{
+	igt_vkms_t *dev;
+
+	igt_vkms_config_t cfg = {
+		.device_name = __func__,
+		.planes = {
+			{
+				.name = "plane0",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc0" },
+			},
+			{
+				.name = "plane1",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc1" },
+			},
+		},
+		.crtcs = {
+			{ .name = "crtc0" },
+			{ .name = "crtc1" },
+		},
+		.encoders = {
+			{ .name = "encoder0", .possible_crtcs = { "crtc0" } },
+			{ .name = "encoder1", .possible_crtcs = { "crtc0" } },
+		},
+		.connectors = {
+			{
+				.name = "connector0",
+				.possible_encoders = { "encoder0", "encoder1" },
+			},
+		},
+	};
+
+	dev = igt_vkms_device_create_from_config(&cfg);
+	igt_assert(dev);
+
+	igt_vkms_device_set_enabled(dev, true);
+	igt_assert(!igt_vkms_device_is_enabled(dev));
+	igt_assert(!device_exists(__func__));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -1390,6 +1440,7 @@ igt_main
 		{ "enable-no-encoders", test_enable_no_encoders },
 		{ "enable-too-many-encoders", test_enable_too_many_encoders },
 		{ "enable-encoder-no-crtcs", test_enable_encoder_no_crtcs },
+		{ "enable-crtc-no-encoder", test_enable_crtc_no_encoder },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 35/41] tests/vkms_configfs: Test enabling a device without connectors
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (33 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 34/41] tests/vkms_configfs: Test adding a CRTC without encoders José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 36/41] tests/vkms_configfs: Test enabling a device with too many connectors José Expósito
                   ` (9 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Enable a VKMS device without adding connectors and test that it is
created with the specified configuration.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 tests/vkms/vkms_configfs.c | 39 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 0b6d395cb..d9cbc24ae 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -1403,6 +1403,44 @@ static void test_enable_crtc_no_encoder(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: enable-no-connectors
+ * Description: Try to enable a VKMS device without adding connectors and test
+ *              that it fails.
+ */
+
+static void test_enable_no_connectors(void)
+{
+	igt_vkms_t *dev;
+
+	igt_vkms_config_t cfg = {
+		.device_name = __func__,
+		.planes = {
+			{
+				.name = "plane0",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc0"},
+			},
+		},
+		.crtcs = {
+			{ .name = "crtc0" },
+		},
+		.encoders = {
+			{ .name = "encoder0", .possible_crtcs = { "crtc0" } },
+		},
+		.connectors = { },
+	};
+
+	dev = igt_vkms_device_create_from_config(&cfg);
+	igt_assert(dev);
+
+	igt_vkms_device_set_enabled(dev, true);
+	igt_assert(!igt_vkms_device_is_enabled(dev));
+	igt_assert(!device_exists(__func__));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -1441,6 +1479,7 @@ igt_main
 		{ "enable-too-many-encoders", test_enable_too_many_encoders },
 		{ "enable-encoder-no-crtcs", test_enable_encoder_no_crtcs },
 		{ "enable-crtc-no-encoder", test_enable_crtc_no_encoder },
+		{ "enable-no-connectors", test_enable_no_connectors },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 36/41] tests/vkms_configfs: Test enabling a device with too many connectors
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (34 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 35/41] tests/vkms_configfs: Test enabling a device without connectors José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 37/41] lib/vkms: Test changing enabled device planes José Expósito
                   ` (8 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Try to enable a VKMS device with too many connectors and test that it
fails.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 tests/vkms/vkms_configfs.c | 52 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index d9cbc24ae..466b16a62 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -1441,6 +1441,57 @@ static void test_enable_no_connectors(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: enable-too-many-connectors
+ * Description: Try to enable a VKMS device with too many connectors and test
+ *              that it fails.
+ */
+
+static void test_enable_too_many_connectors(void)
+{
+	igt_vkms_t *dev;
+	char connector_names[VKMS_MAX_PIPELINE_ITEMS][12];
+	int ret;
+
+	igt_vkms_config_t cfg = {
+		.device_name = __func__,
+		.planes = {
+			{
+				.name = "plane0",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc0" },
+			},
+		},
+		.crtcs = {
+			{ .name = "crtc0" },
+		},
+		.encoders = {
+			{ .name = "encoder0", .possible_crtcs = { "crtc0" } },
+		},
+		.connectors = {},
+	};
+
+	for (int n = 0; n < 32; n++) {
+		ret = snprintf(connector_names[n], sizeof(connector_names[n]),
+			       "connector%d", n);
+		igt_assert(ret >= 0 && ret < sizeof(connector_names[n]));
+
+		cfg.connectors[n] = (igt_vkms_connector_config_t){
+			.name = connector_names[n],
+			.possible_encoders = { "encoder0" }
+		};
+	}
+
+	dev = igt_vkms_device_create_from_config(&cfg);
+	igt_assert(dev);
+
+	igt_vkms_device_set_enabled(dev, true);
+	igt_assert(!igt_vkms_device_is_enabled(dev));
+	igt_assert(!device_exists(__func__));
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -1480,6 +1531,7 @@ igt_main
 		{ "enable-encoder-no-crtcs", test_enable_encoder_no_crtcs },
 		{ "enable-crtc-no-encoder", test_enable_crtc_no_encoder },
 		{ "enable-no-connectors", test_enable_no_connectors },
+		{ "enable-too-many-connectors", test_enable_too_many_connectors },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 37/41] lib/vkms: Test changing enabled device planes
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (35 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 36/41] tests/vkms_configfs: Test enabling a device with too many connectors José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 38/41] lib/vkms: Test changing enabled device CRTCs José Expósito
                   ` (7 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Test that, once a VKMS device is enabled, the plane values can't change
and that deleting it or the attached CRTCs doesn't change the VKMS
device.

Add a function that performs a basic validation checking that the
device created matches the expected one.

Reviewed-by: louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/igt_vkms.c             |  24 +++++++
 lib/igt_vkms.h             |   1 +
 tests/vkms/vkms_configfs.c | 143 +++++++++++++++++++++++++++++++++++++
 3 files changed, 168 insertions(+)

diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
index 30f7c289f..96bce58f6 100644
--- a/lib/igt_vkms.c
+++ b/lib/igt_vkms.c
@@ -193,6 +193,18 @@ static void get_attach_dir_path(igt_vkms_t *dev, enum vkms_pipeline_item item,
 	igt_assert(ret >= 0 && ret < len);
 }
 
+static bool remove_pipeline_item(igt_vkms_t *dev, enum vkms_pipeline_item item,
+				 const char *name)
+{
+	char path[PATH_MAX];
+	int ret;
+
+	get_pipeline_item_path(dev, item, name, path, sizeof(path));
+
+	ret = rmdir(path);
+	return ret == 0;
+}
+
 static bool attach_pipeline_item(igt_vkms_t *dev,
 				 enum vkms_pipeline_item src_item,
 				 const char *src_item_name,
@@ -698,6 +710,18 @@ void igt_vkms_device_add_plane(igt_vkms_t *dev, const char *name)
 	add_pipeline_item(dev, VKMS_PIPELINE_ITEM_PLANE, name);
 }
 
+/**
+ * igt_vkms_device_remove_plane:
+ * @dev: Device to remove the plane from
+ * @name: Plane name
+ *
+ * Remove an existing plane from the VKMS device.
+ */
+bool igt_vkms_device_remove_plane(igt_vkms_t *dev, const char *name)
+{
+	return remove_pipeline_item(dev, VKMS_PIPELINE_ITEM_PLANE, name);
+}
+
 /**
  * igt_vkms_plane_get_type:
  * @dev: Device the plane belongs to
diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
index 7de3171cb..839a7a6ef 100644
--- a/lib/igt_vkms.h
+++ b/lib/igt_vkms.h
@@ -96,6 +96,7 @@ bool igt_vkms_device_is_enabled(igt_vkms_t *dev);
 void igt_vkms_device_set_enabled(igt_vkms_t *dev, bool enabled);
 
 void igt_vkms_device_add_plane(igt_vkms_t *dev, const char *name);
+bool igt_vkms_device_remove_plane(igt_vkms_t *dev, const char *name);
 int igt_vkms_plane_get_type(igt_vkms_t *dev, const char *name);
 void igt_vkms_plane_set_type(igt_vkms_t *dev, const char *name, int type);
 bool igt_vkms_plane_attach_crtc(igt_vkms_t *dev, const char *plane_name,
diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 466b16a62..56ef54acc 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -131,6 +131,85 @@ static bool device_exists(const char *name)
 	return find_device(name, &card);
 }
 
+static void assert_device_config(igt_vkms_config_t *cfg)
+{
+	struct igt_device_card card;
+	drmModeResPtr res;
+	drmModePlaneResPtr plane_res;
+	drmModeConnectorPtr connector_res;
+	igt_vkms_crtc_config_t *crtc;
+	igt_vkms_connector_config_t *connector;
+	bool found;
+	int n_planes = 0;
+	int n_crtcs = 0;
+	int n_encoders = 0;
+	int n_connectors = 0;
+	int n_connector_status_cfg[4] = {0};
+	int n_connector_status_drm[4] = {0};
+	int fd;
+
+	found = find_device(cfg->device_name, &card);
+	igt_assert_f(found, "Device '%s' not found\n", cfg->device_name);
+
+	fd = igt_open_card(&card);
+	igt_assert_f(fd >= 0, "Error opening device '%s' at path '%s'\n",
+		     cfg->device_name, card.card);
+	igt_assert_f(!drmSetClientCap(fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1),
+		     "Error setting DRM_CLIENT_CAP_UNIVERSAL_PLANES\n");
+	igt_assert_f(!drmSetClientCap(fd, DRM_CLIENT_CAP_ATOMIC, 1),
+		     "Error setting DRM_CLIENT_CAP_ATOMIC\n");
+	igt_assert_f(!drmSetClientCap(fd, DRM_CLIENT_CAP_WRITEBACK_CONNECTORS, 1),
+		     "Error setting DRM_CLIENT_CAP_WRITEBACK_CONNECTORS\n");
+
+	res = drmModeGetResources(fd);
+	igt_assert_f(res, "Error getting resources\n");
+	plane_res = drmModeGetPlaneResources(fd);
+	igt_assert_f(plane_res, "Error getting plane resources\n");
+
+	for (int n = 0; (&cfg->planes[n])->name; n++)
+		n_planes++;
+
+	for (int n = 0; (crtc = &cfg->crtcs[n])->name; n++) {
+		n_crtcs++;
+
+		if (crtc->writeback) {
+			n_encoders++;
+			n_connectors++;
+			n_connector_status_cfg[DRM_MODE_UNKNOWNCONNECTION]++;
+		}
+	}
+
+	for (int n = 0; (&cfg->encoders[n])->name; n++)
+		n_encoders++;
+
+	for (int n = 0; (connector = &cfg->connectors[n])->name; n++) {
+		n_connectors++;
+		n_connector_status_cfg[connector->status]++;
+	}
+
+	for (int n = 0; n < res->count_connectors; n++) {
+		connector_res = drmModeGetConnectorCurrent(fd,
+							   res->connectors[n]);
+		n_connector_status_drm[connector_res->connection]++;
+		drmModeFreeConnector(connector_res);
+	}
+
+	igt_assert_eq(n_planes, plane_res->count_planes);
+	igt_assert_eq(n_crtcs, res->count_crtcs);
+	igt_assert_eq(n_encoders, res->count_encoders);
+	igt_assert_eq(n_connectors, res->count_connectors);
+	igt_assert_eq(n_connector_status_cfg[DRM_MODE_CONNECTED],
+		      n_connector_status_drm[DRM_MODE_CONNECTED]);
+	igt_assert_eq(n_connector_status_cfg[DRM_MODE_DISCONNECTED],
+		      n_connector_status_drm[DRM_MODE_DISCONNECTED]);
+	igt_assert_eq(n_connector_status_cfg[DRM_MODE_UNKNOWNCONNECTION],
+		      n_connector_status_drm[DRM_MODE_UNKNOWNCONNECTION]);
+
+	drmModeFreePlaneResources(plane_res);
+	drmModeFreeResources(res);
+	close(fd);
+}
+
 /**
  * SUBTEST: device-default-files
  * Description: Test that creating a VKMS device creates the default files and
@@ -1492,6 +1571,69 @@ static void test_enable_too_many_connectors(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: enabled-plane-cannot-change
+ * Description: Test that, once a VKMS device is enabled, the plane values can't
+ *              change and that deleting it or the attached CRTCs doesn't change
+ *              the VKMS device.
+ */
+
+static void test_enabled_plane_cannot_change(void)
+{
+	igt_vkms_t *dev;
+
+	igt_vkms_config_t cfg = {
+		.device_name = __func__,
+		.planes = {
+			{
+				.name = "plane0",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc0"},
+			},
+			{
+				.name = "plane1",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc1"},
+			},
+		},
+		.crtcs = {
+			{ .name = "crtc0" },
+			{ .name = "crtc1" },
+		},
+		.encoders = {
+			{ .name = "encoder0", .possible_crtcs = { "crtc0" } },
+			{ .name = "encoder1", .possible_crtcs = { "crtc1" } },
+		},
+		.connectors = {
+			{
+				.name = "connector0",
+				.possible_encoders = { "encoder0", "encoder1" },
+			},
+		},
+	};
+
+	dev = igt_vkms_device_create_from_config(&cfg);
+	igt_assert(dev);
+
+	igt_vkms_device_set_enabled(dev, true);
+	igt_assert(igt_vkms_device_is_enabled(dev));
+	assert_device_config(&cfg);
+
+	/* Try to change values */
+	igt_vkms_plane_set_type(dev, "plane0", DRM_PLANE_TYPE_OVERLAY);
+	igt_assert_eq(igt_vkms_plane_get_type(dev, "plane0"),
+		      DRM_PLANE_TYPE_PRIMARY);
+
+	igt_assert(!igt_vkms_plane_attach_crtc(dev, "plane0", "crtc1"));
+
+	/* Deleting pipeline items doesn't affect the device */
+	igt_assert(igt_vkms_plane_detach_crtc(dev, "plane0", "crtc0"));
+	igt_assert(igt_vkms_device_remove_plane(dev, "plane0"));
+	assert_device_config(&cfg);
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -1532,6 +1674,7 @@ igt_main
 		{ "enable-crtc-no-encoder", test_enable_crtc_no_encoder },
 		{ "enable-no-connectors", test_enable_no_connectors },
 		{ "enable-too-many-connectors", test_enable_too_many_connectors },
+		{ "enabled-plane-cannot-change", test_enabled_plane_cannot_change },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 38/41] lib/vkms: Test changing enabled device CRTCs
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (36 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 37/41] lib/vkms: Test changing enabled device planes José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 39/41] lib/vkms: Test changing enabled device encoders José Expósito
                   ` (6 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Test that, once a VKMS device is enabled, the CRTC values can't change
and that deleting it or the attached planes/encoders doesn't change the
VKMS device.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/igt_vkms.c             | 12 +++++++++
 lib/igt_vkms.h             |  1 +
 tests/vkms/vkms_configfs.c | 55 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 68 insertions(+)

diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
index 96bce58f6..06cd3e52e 100644
--- a/lib/igt_vkms.c
+++ b/lib/igt_vkms.c
@@ -803,6 +803,18 @@ void igt_vkms_device_add_crtc(igt_vkms_t *dev, const char *name)
 	add_pipeline_item(dev, VKMS_PIPELINE_ITEM_CRTC, name);
 }
 
+/**
+ * igt_vkms_device_remove_crtc:
+ * @dev: Device to remove the CRTC from
+ * @name: CRTC name
+ *
+ * Remove an existing CRTC from the VKMS device.
+ */
+bool igt_vkms_device_remove_crtc(igt_vkms_t *dev, const char *name)
+{
+	return remove_pipeline_item(dev, VKMS_PIPELINE_ITEM_CRTC, name);
+}
+
 /**
  * igt_vkms_crtc_is_writeback_enabled:
  * @dev: Device the CRTC belongs to
diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
index 839a7a6ef..66d10074a 100644
--- a/lib/igt_vkms.h
+++ b/lib/igt_vkms.h
@@ -105,6 +105,7 @@ bool igt_vkms_plane_detach_crtc(igt_vkms_t *dev, const char *plane_name,
 				const char *crtc_name);
 
 void igt_vkms_device_add_crtc(igt_vkms_t *dev, const char *name);
+bool igt_vkms_device_remove_crtc(igt_vkms_t *dev, const char *name);
 bool igt_vkms_crtc_is_writeback_enabled(igt_vkms_t *dev, const char *name);
 void igt_vkms_crtc_set_writeback_enabled(igt_vkms_t *dev, const char *name,
 					 bool writeback);
diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 56ef54acc..f8f78144f 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -1634,6 +1634,60 @@ static void test_enabled_plane_cannot_change(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: enabled-crtc-cannot-change
+ * Description: Test that, once a VKMS device is enabled, the CRTC values can't
+ *              change and that deleting it or the attached planes/encoders
+ *              doesn't change the VKMS device.
+ */
+
+static void test_enabled_crtc_cannot_change(void)
+{
+	igt_vkms_t *dev;
+
+	igt_vkms_config_t cfg = {
+		.device_name = __func__,
+		.planes = {
+			{
+				.name = "plane0",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc0"},
+			},
+		},
+		.crtcs = {
+			{ .name = "crtc0", .writeback = true },
+		},
+		.encoders = {
+			{ .name = "encoder0", .possible_crtcs = { "crtc0" } },
+		},
+		.connectors = {
+			{
+				.name = "connector0",
+				.possible_encoders = { "encoder0" },
+			},
+		},
+	};
+
+	dev = igt_vkms_device_create_from_config(&cfg);
+	igt_assert(dev);
+
+	igt_vkms_device_set_enabled(dev, true);
+	igt_assert(igt_vkms_device_is_enabled(dev));
+	assert_device_config(&cfg);
+
+	/* Try to change values */
+	igt_vkms_crtc_set_writeback_enabled(dev, "crtc0", false);
+	igt_assert(igt_vkms_crtc_is_writeback_enabled(dev, "crtc0"));
+
+	/* Deleting pipeline items doesn't affect the device */
+	igt_assert(igt_vkms_plane_detach_crtc(dev, "plane0", "crtc0"));
+	igt_assert(igt_vkms_encoder_detach_crtc(dev, "encoder0", "crtc0"));
+	igt_assert(igt_vkms_device_remove_crtc(dev, "crtc0"));
+	assert_device_config(&cfg);
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -1675,6 +1729,7 @@ igt_main
 		{ "enable-no-connectors", test_enable_no_connectors },
 		{ "enable-too-many-connectors", test_enable_too_many_connectors },
 		{ "enabled-plane-cannot-change", test_enabled_plane_cannot_change },
+		{ "enabled-crtc-cannot-change", test_enabled_crtc_cannot_change },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 39/41] lib/vkms: Test changing enabled device encoders
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (37 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 38/41] lib/vkms: Test changing enabled device CRTCs José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 40/41] lib/vkms: Test changing enabled device connectors José Expósito
                   ` (5 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Test that, once a VKMS device is enabled, the encoder values can't
change and that deleting it or the attached CRTCs doesn't change the
VKMS device.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/igt_vkms.c             | 12 ++++++++
 lib/igt_vkms.h             |  1 +
 tests/vkms/vkms_configfs.c | 62 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 75 insertions(+)

diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
index 06cd3e52e..e37d92b78 100644
--- a/lib/igt_vkms.c
+++ b/lib/igt_vkms.c
@@ -861,6 +861,18 @@ void igt_vkms_device_add_encoder(igt_vkms_t *dev, const char *name)
 	add_pipeline_item(dev, VKMS_PIPELINE_ITEM_ENCODER, name);
 }
 
+/**
+ * igt_vkms_device_remove_encoder:
+ * @dev: Device to remove the encoder from
+ * @name: Encoder name
+ *
+ * Remove an existing encoder from the VKMS device.
+ */
+bool igt_vkms_device_remove_encoder(igt_vkms_t *dev, const char *name)
+{
+	return remove_pipeline_item(dev, VKMS_PIPELINE_ITEM_ENCODER, name);
+}
+
 /**
  * igt_vkms_encoder_attach_crtc:
  * @dev: Target device
diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
index 66d10074a..cc03f9ef3 100644
--- a/lib/igt_vkms.h
+++ b/lib/igt_vkms.h
@@ -111,6 +111,7 @@ void igt_vkms_crtc_set_writeback_enabled(igt_vkms_t *dev, const char *name,
 					 bool writeback);
 
 void igt_vkms_device_add_encoder(igt_vkms_t *dev, const char *name);
+bool igt_vkms_device_remove_encoder(igt_vkms_t *dev, const char *name);
 bool igt_vkms_encoder_attach_crtc(igt_vkms_t *dev, const char *encoder_name,
 				  const char *crtc_name);
 bool igt_vkms_encoder_detach_crtc(igt_vkms_t *dev, const char *encoder_name,
diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index f8f78144f..194624c17 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -1688,6 +1688,67 @@ static void test_enabled_crtc_cannot_change(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: enabled-encoder-cannot-change
+ * Description: Test that, once a VKMS device is enabled, the encoder values
+ *              can't change and that deleting it or the attached CRTCs doesn't
+ *              change the VKMS device.
+ */
+
+static void test_enabled_encoder_cannot_change(void)
+{
+	igt_vkms_t *dev;
+
+	igt_vkms_config_t cfg = {
+		.device_name = __func__,
+		.planes = {
+			{
+				.name = "plane0",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc0"},
+			},
+			{
+				.name = "plane1",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc1"},
+			},
+		},
+		.crtcs = {
+			{ .name = "crtc0" },
+			{ .name = "crtc1" },
+		},
+		.encoders = {
+			{ .name = "encoder0", .possible_crtcs = { "crtc0" } },
+			{ .name = "encoder1", .possible_crtcs = { "crtc1" } },
+		},
+		.connectors = {
+			{
+				.name = "connector0",
+				.possible_encoders = { "encoder0", "encoder1" },
+			},
+		},
+	};
+
+	dev = igt_vkms_device_create_from_config(&cfg);
+	igt_assert(dev);
+
+	igt_vkms_device_set_enabled(dev, true);
+	igt_assert(igt_vkms_device_is_enabled(dev));
+	assert_device_config(&cfg);
+
+	/* Try to change values */
+	igt_assert(!igt_vkms_encoder_attach_crtc(dev, "encoder0", "crtc1"));
+
+	/* Deleting pipeline items doesn't affect the device */
+	igt_assert(igt_vkms_encoder_detach_crtc(dev, "encoder0", "crtc0"));
+	igt_assert(igt_vkms_connector_detach_encoder(dev, "connector0",
+						     "encoder0"));
+	igt_assert(igt_vkms_device_remove_encoder(dev, "encoder0"));
+	assert_device_config(&cfg);
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -1730,6 +1791,7 @@ igt_main
 		{ "enable-too-many-connectors", test_enable_too_many_connectors },
 		{ "enabled-plane-cannot-change", test_enabled_plane_cannot_change },
 		{ "enabled-crtc-cannot-change", test_enabled_crtc_cannot_change },
+		{ "enabled-encoder-cannot-change", test_enabled_encoder_cannot_change },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 40/41] lib/vkms: Test changing enabled device connectors
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (38 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 39/41] lib/vkms: Test changing enabled device encoders José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  7:45 ` [PATCH i-g-t v4 41/41] tests/vkms_configfs: Test connector hot-plug José Expósito
                   ` (4 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Test that, once a VKMS device is enabled, the connector values, with
the exception of status, can't change and that deleting it or the
attached encoders doesn't change the VKMS device.

Connector hot-plug/unplug is not covered by this test.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 lib/igt_vkms.c             | 12 +++++++
 lib/igt_vkms.h             |  1 +
 tests/vkms/vkms_configfs.c | 64 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 77 insertions(+)

diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
index e37d92b78..97f988405 100644
--- a/lib/igt_vkms.c
+++ b/lib/igt_vkms.c
@@ -916,6 +916,18 @@ void igt_vkms_device_add_connector(igt_vkms_t *dev, const char *name)
 	add_pipeline_item(dev, VKMS_PIPELINE_ITEM_CONNECTOR, name);
 }
 
+/**
+ * igt_vkms_device_remove_connector:
+ * @dev: Device to remove the connector from
+ * @name: Connector name
+ *
+ * Remove an existing connector from the VKMS device.
+ */
+bool igt_vkms_device_remove_connector(igt_vkms_t *dev, const char *name)
+{
+	return remove_pipeline_item(dev, VKMS_PIPELINE_ITEM_CONNECTOR, name);
+}
+
 /**
  * igt_vkms_connector_get_status:
  * @dev: Device the connector belongs to
diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
index cc03f9ef3..4761c7dcb 100644
--- a/lib/igt_vkms.h
+++ b/lib/igt_vkms.h
@@ -118,6 +118,7 @@ bool igt_vkms_encoder_detach_crtc(igt_vkms_t *dev, const char *encoder_name,
 				  const char *crtc_name);
 
 void igt_vkms_device_add_connector(igt_vkms_t *dev, const char *name);
+bool igt_vkms_device_remove_connector(igt_vkms_t *dev, const char *name);
 int igt_vkms_connector_get_status(igt_vkms_t *dev, const char *name);
 void igt_vkms_connector_set_status(igt_vkms_t *dev, const char *name,
 				   int status);
diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 194624c17..0f498a630 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -1749,6 +1749,69 @@ static void test_enabled_encoder_cannot_change(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: enabled-connector-cannot-change
+ * Description: Test that, once a VKMS device is enabled, the connector values,
+ *              with the exception of status, can't change and that deleting it
+ *              or the attached encoders doesn't change the VKMS device.
+ *              Connector hot-plug/unplug is not covered by this test.
+ */
+
+static void test_enabled_connector_cannot_change(void)
+{
+	igt_vkms_t *dev;
+
+	igt_vkms_config_t cfg = {
+		.device_name = __func__,
+		.planes = {
+			{
+				.name = "plane0",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc0"},
+			},
+			{
+				.name = "plane1",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc1"},
+			},
+		},
+		.crtcs = {
+			{ .name = "crtc0" },
+			{ .name = "crtc1" },
+		},
+		.encoders = {
+			{ .name = "encoder0", .possible_crtcs = { "crtc0" } },
+			{ .name = "encoder1", .possible_crtcs = { "crtc1" } },
+		},
+		.connectors = {
+			{
+				.name = "connector0",
+				.status = DRM_MODE_CONNECTED,
+				.possible_encoders = { "encoder0" },
+			},
+		},
+	};
+
+	dev = igt_vkms_device_create_from_config(&cfg);
+	igt_assert(dev);
+
+	igt_vkms_device_set_enabled(dev, true);
+	igt_assert(igt_vkms_device_is_enabled(dev));
+	assert_device_config(&cfg);
+
+	/* Try to change values */
+	igt_assert(!igt_vkms_connector_attach_encoder(dev, "connector0",
+						      "encoder1"));
+
+	/* Deleting pipeline items doesn't affect the device */
+	igt_assert(igt_vkms_connector_detach_encoder(dev, "connector0",
+						     "encoder0"));
+	igt_assert(igt_vkms_device_remove_connector(dev, "connector0"));
+	assert_device_config(&cfg);
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -1792,6 +1855,7 @@ igt_main
 		{ "enabled-plane-cannot-change", test_enabled_plane_cannot_change },
 		{ "enabled-crtc-cannot-change", test_enabled_crtc_cannot_change },
 		{ "enabled-encoder-cannot-change", test_enabled_encoder_cannot_change },
+		{ "enabled-connector-cannot-change", test_enabled_connector_cannot_change },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* [PATCH i-g-t v4 41/41] tests/vkms_configfs: Test connector hot-plug
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (39 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 40/41] lib/vkms: Test changing enabled device connectors José Expósito
@ 2025-08-07  7:45 ` José Expósito
  2025-08-07  9:02 ` ✓ i915.CI.BAT: success for VKMS configfs tests (rev7) Patchwork
                   ` (3 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: José Expósito @ 2025-08-07  7:45 UTC (permalink / raw)
  To: igt-dev
  Cc: louis.chauvet, zbigniew.kempczynski, kamil.konieczny, karthik.b.s,
	José Expósito

Test that, once a VKMS device is enabled, the connectors can be
hot-plugged and hot-unplugged.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 tests/vkms/vkms_configfs.c | 84 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 84 insertions(+)

diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
index 0f498a630..04a86de43 100644
--- a/tests/vkms/vkms_configfs.c
+++ b/tests/vkms/vkms_configfs.c
@@ -1812,6 +1812,89 @@ static void test_enabled_connector_cannot_change(void)
 	igt_vkms_device_destroy(dev);
 }
 
+/**
+ * SUBTEST: enabled-connector-hot-plug
+ * Description: Test that, once a VKMS device is enabled, the connectors can be
+ *              hot-plugged and unplugged.
+ */
+
+static void test_enabled_connector_hot_plug(void)
+{
+	igt_vkms_t *dev;
+	drmModeConnection status;
+
+	igt_vkms_config_t cfg = {
+		.device_name = __func__,
+		.planes = {
+			{
+				.name = "plane0",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc0"},
+			},
+			{
+				.name = "plane1",
+				.type = DRM_PLANE_TYPE_PRIMARY,
+				.possible_crtcs = { "crtc1"},
+			},
+		},
+		.crtcs = {
+			{ .name = "crtc0", .writeback = true },
+			{ .name = "crtc1", .writeback = true },
+		},
+		.encoders = {
+			{ .name = "encoder0", .possible_crtcs = { "crtc0" } },
+			{ .name = "encoder1", .possible_crtcs = { "crtc1" } },
+		},
+		.connectors = {
+			{
+				.name = "connector0",
+				.status = DRM_MODE_DISCONNECTED,
+				.possible_encoders = { "encoder0" },
+			},
+			{
+				.name = "connector1",
+				.status = DRM_MODE_DISCONNECTED,
+				.possible_encoders = { "encoder1" },
+			},
+		},
+	};
+
+	dev = igt_vkms_device_create_from_config(&cfg);
+	igt_assert(dev);
+
+	igt_vkms_device_set_enabled(dev, true);
+	igt_assert(igt_vkms_device_is_enabled(dev));
+	assert_device_config(&cfg);
+
+	/* Connect both connectors */
+	cfg.connectors[0].status = DRM_MODE_CONNECTED;
+	igt_vkms_connector_set_status(dev, "connector0", DRM_MODE_CONNECTED);
+	status = igt_vkms_connector_get_status(dev, "connector0");
+	igt_assert_eq(status, DRM_MODE_CONNECTED);
+	assert_device_config(&cfg);
+
+	cfg.connectors[1].status = DRM_MODE_CONNECTED;
+	igt_vkms_connector_set_status(dev, "connector1", DRM_MODE_CONNECTED);
+	status = igt_vkms_connector_get_status(dev, "connector1");
+	igt_assert_eq(status, DRM_MODE_CONNECTED);
+	assert_device_config(&cfg);
+
+	/* Set one to unknown connection and disconnect the other one */
+	cfg.connectors[0].status = DRM_MODE_UNKNOWNCONNECTION;
+	igt_vkms_connector_set_status(dev, "connector0", DRM_MODE_UNKNOWNCONNECTION);
+	status = igt_vkms_connector_get_status(dev, "connector0");
+	igt_assert_eq(status, DRM_MODE_UNKNOWNCONNECTION);
+	assert_device_config(&cfg);
+
+	cfg.connectors[1].status = DRM_MODE_DISCONNECTED;
+	igt_vkms_connector_set_status(dev, "connector1", DRM_MODE_DISCONNECTED);
+	status = igt_vkms_connector_get_status(dev, "connector1");
+	igt_assert_eq(status, DRM_MODE_DISCONNECTED);
+	assert_device_config(&cfg);
+
+	igt_vkms_device_destroy(dev);
+}
+
 igt_main
 {
 	struct {
@@ -1856,6 +1939,7 @@ igt_main
 		{ "enabled-crtc-cannot-change", test_enabled_crtc_cannot_change },
 		{ "enabled-encoder-cannot-change", test_enabled_encoder_cannot_change },
 		{ "enabled-connector-cannot-change", test_enabled_connector_cannot_change },
+		{ "enabled-connector-hot-plug", test_enabled_connector_hot_plug },
 	};
 
 	igt_fixture {
-- 
2.50.1


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

* ✓ i915.CI.BAT: success for VKMS configfs tests (rev7)
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (40 preceding siblings ...)
  2025-08-07  7:45 ` [PATCH i-g-t v4 41/41] tests/vkms_configfs: Test connector hot-plug José Expósito
@ 2025-08-07  9:02 ` Patchwork
  2025-08-07  9:16 ` ✓ Xe.CI.BAT: " Patchwork
                   ` (2 subsequent siblings)
  44 siblings, 0 replies; 52+ messages in thread
From: Patchwork @ 2025-08-07  9:02 UTC (permalink / raw)
  To: José Expósito; +Cc: igt-dev

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

== Series Details ==

Series: VKMS configfs tests (rev7)
URL   : https://patchwork.freedesktop.org/series/145065/
State : success

== Summary ==

CI Bug Log - changes from IGT_8488 -> IGTPW_13558
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (45 -> 44)
------------------------------

  Missing    (1): fi-snb-2520m 

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

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

### IGT changes ###

#### Issues hit ####

  * igt@i915_module_load@load:
    - bat-mtlp-9:         [PASS][1] -> [ABORT][2] ([i915#13494])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/bat-mtlp-9/igt@i915_module_load@load.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/bat-mtlp-9/igt@i915_module_load@load.html

  * igt@i915_selftest@live:
    - bat-jsl-1:          [PASS][3] -> [DMESG-FAIL][4] ([i915#13774]) +1 other test dmesg-fail
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/bat-jsl-1/igt@i915_selftest@live.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/bat-jsl-1/igt@i915_selftest@live.html

  * igt@i915_selftest@live@workarounds:
    - bat-mtlp-6:         [PASS][5] -> [DMESG-FAIL][6] ([i915#12061]) +1 other test dmesg-fail
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/bat-mtlp-6/igt@i915_selftest@live@workarounds.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/bat-mtlp-6/igt@i915_selftest@live@workarounds.html
    - bat-dg2-9:          [PASS][7] -> [DMESG-FAIL][8] ([i915#12061]) +1 other test dmesg-fail
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/bat-dg2-9/igt@i915_selftest@live@workarounds.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/bat-dg2-9/igt@i915_selftest@live@workarounds.html
    - bat-dg2-11:         [PASS][9] -> [DMESG-FAIL][10] ([i915#12061]) +1 other test dmesg-fail
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/bat-dg2-11/igt@i915_selftest@live@workarounds.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/bat-dg2-11/igt@i915_selftest@live@workarounds.html
    - bat-dg2-14:         [PASS][11] -> [DMESG-FAIL][12] ([i915#12061]) +1 other test dmesg-fail
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/bat-dg2-14/igt@i915_selftest@live@workarounds.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/bat-dg2-14/igt@i915_selftest@live@workarounds.html

  
#### Possible fixes ####

  * igt@dmabuf@all-tests@dma_fence_chain:
    - fi-bsw-n3050:       [ABORT][13] ([i915#12904]) -> [PASS][14] +1 other test pass
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/fi-bsw-n3050/igt@dmabuf@all-tests@dma_fence_chain.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/fi-bsw-n3050/igt@dmabuf@all-tests@dma_fence_chain.html

  * igt@i915_pm_rpm@module-reload:
    - bat-adlp-6:         [DMESG-WARN][15] ([i915#13890]) -> [PASS][16] +78 other tests pass
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/bat-adlp-6/igt@i915_pm_rpm@module-reload.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/bat-adlp-6/igt@i915_pm_rpm@module-reload.html

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

  [i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
  [i915#12904]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12904
  [i915#13494]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13494
  [i915#13774]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13774
  [i915#13890]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13890


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

  * CI: CI-20190529 -> None
  * IGT: IGT_8488 -> IGTPW_13558

  CI-20190529: 20190529
  CI_DRM_16964: 8463eb0394270c7f78c091aa5f5c7af0abf6fdf8 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_13558: 8c6c9e1fc13f086db69fb38214552dc243eb6dd4 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  IGT_8488: c4a9bee161f4bb74cbbf81c73b24c416ecf93976 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git

== Logs ==

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

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

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

* ✓ Xe.CI.BAT: success for VKMS configfs tests (rev7)
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (41 preceding siblings ...)
  2025-08-07  9:02 ` ✓ i915.CI.BAT: success for VKMS configfs tests (rev7) Patchwork
@ 2025-08-07  9:16 ` Patchwork
  2025-08-07 10:16 ` ✗ Xe.CI.Full: failure " Patchwork
  2025-08-07 11:08 ` ✗ i915.CI.Full: " Patchwork
  44 siblings, 0 replies; 52+ messages in thread
From: Patchwork @ 2025-08-07  9:16 UTC (permalink / raw)
  To: José Expósito; +Cc: igt-dev

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

== Series Details ==

Series: VKMS configfs tests (rev7)
URL   : https://patchwork.freedesktop.org/series/145065/
State : success

== Summary ==

CI Bug Log - changes from XEIGT_8488_BAT -> XEIGTPW_13558_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

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

  No changes in participating hosts

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

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

### IGT changes ###

#### Possible fixes ####

  * igt@sriov_basic@enable-vfs-autoprobe-off:
    - bat-bmg-2:          [SKIP][1] ([Intel XE#1091] / [Intel XE#2849]) -> [PASS][2] +1 other test pass
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/bat-bmg-2/igt@sriov_basic@enable-vfs-autoprobe-off.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/bat-bmg-2/igt@sriov_basic@enable-vfs-autoprobe-off.html
    - bat-bmg-1:          [SKIP][3] ([Intel XE#1091] / [Intel XE#2849]) -> [PASS][4] +1 other test pass
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/bat-bmg-1/igt@sriov_basic@enable-vfs-autoprobe-off.html
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/bat-bmg-1/igt@sriov_basic@enable-vfs-autoprobe-off.html

  * igt@xe_sriov_flr@flr-vf1-clear:
    - bat-bmg-1:          [SKIP][5] ([Intel XE#3342]) -> [PASS][6]
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/bat-bmg-1/igt@xe_sriov_flr@flr-vf1-clear.html
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/bat-bmg-1/igt@xe_sriov_flr@flr-vf1-clear.html
    - bat-bmg-2:          [SKIP][7] ([Intel XE#3342]) -> [PASS][8]
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/bat-bmg-2/igt@xe_sriov_flr@flr-vf1-clear.html
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/bat-bmg-2/igt@xe_sriov_flr@flr-vf1-clear.html

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

  [Intel XE#1091]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1091
  [Intel XE#2849]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2849
  [Intel XE#3342]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3342
  [Intel XE#5783]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5783


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

  * IGT: IGT_8488 -> IGTPW_13558

  IGTPW_13558: 8c6c9e1fc13f086db69fb38214552dc243eb6dd4 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  IGT_8488: c4a9bee161f4bb74cbbf81c73b24c416ecf93976 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-3512-8463eb0394270c7f78c091aa5f5c7af0abf6fdf8: 8463eb0394270c7f78c091aa5f5c7af0abf6fdf8

== Logs ==

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

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

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

* ✗ Xe.CI.Full: failure for VKMS configfs tests (rev7)
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (42 preceding siblings ...)
  2025-08-07  9:16 ` ✓ Xe.CI.BAT: " Patchwork
@ 2025-08-07 10:16 ` Patchwork
  2025-08-07 11:08 ` ✗ i915.CI.Full: " Patchwork
  44 siblings, 0 replies; 52+ messages in thread
From: Patchwork @ 2025-08-07 10:16 UTC (permalink / raw)
  To: José Expósito; +Cc: igt-dev

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

== Series Details ==

Series: VKMS configfs tests (rev7)
URL   : https://patchwork.freedesktop.org/series/145065/
State : failure

== Summary ==

CI Bug Log - changes from XEIGT_8488_FULL -> XEIGTPW_13558_FULL
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with XEIGTPW_13558_FULL absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in XEIGTPW_13558_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 -> 3)
------------------------------

  Missing    (1): shard-adlp 

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@kms_cursor_edge_walk@256x256-top-edge:
    - shard-bmg:          [PASS][1] -> [SKIP][2]
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-1/igt@kms_cursor_edge_walk@256x256-top-edge.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-4/igt@kms_cursor_edge_walk@256x256-top-edge.html

  * igt@xe_compute@ccs-mode-basic:
    - shard-bmg:          [PASS][3] -> [FAIL][4] +3 other tests fail
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-8/igt@xe_compute@ccs-mode-basic.html
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-5/igt@xe_compute@ccs-mode-basic.html

  * igt@xe_fault_injection@probe-fail-guc-xe_guc_mmio_send_recv:
    - shard-dg2-set2:     [PASS][5] -> [DMESG-WARN][6]
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-463/igt@xe_fault_injection@probe-fail-guc-xe_guc_mmio_send_recv.html
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-464/igt@xe_fault_injection@probe-fail-guc-xe_guc_mmio_send_recv.html

  * igt@xe_pm@d3hot-multiple-execs:
    - shard-bmg:          [PASS][7] -> [TIMEOUT][8]
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-5/igt@xe_pm@d3hot-multiple-execs.html
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-4/igt@xe_pm@d3hot-multiple-execs.html

  * igt@xe_pm@s3-vm-bind-unbind-all:
    - shard-dg2-set2:     [PASS][9] -> [TIMEOUT][10]
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-466/igt@xe_pm@s3-vm-bind-unbind-all.html
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-464/igt@xe_pm@s3-vm-bind-unbind-all.html

  * igt@xe_sriov_auto_provisioning@fair-allocation@numvfs-random:
    - shard-bmg:          NOTRUN -> [FAIL][11]
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-4/igt@xe_sriov_auto_provisioning@fair-allocation@numvfs-random.html

  
#### Warnings ####

  * igt@xe_eudebug_sriov@deny-sriov:
    - shard-bmg:          [SKIP][12] ([Intel XE#4518]) -> [SKIP][13] +1 other test skip
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-6/igt@xe_eudebug_sriov@deny-sriov.html
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-3/igt@xe_eudebug_sriov@deny-sriov.html

  * igt@xe_sriov_auto_provisioning@fair-allocation:
    - shard-bmg:          [SKIP][14] ([Intel XE#4130]) -> [FAIL][15]
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-1/igt@xe_sriov_auto_provisioning@fair-allocation.html
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-4/igt@xe_sriov_auto_provisioning@fair-allocation.html

  
#### Suppressed ####

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

  * {igt@xe_pmu@engine-activity-render-node-load-idle}:
    - shard-bmg:          [PASS][16] -> [FAIL][17] +1 other test fail
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-2/igt@xe_pmu@engine-activity-render-node-load-idle.html
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-4/igt@xe_pmu@engine-activity-render-node-load-idle.html

  
New tests
---------

  New tests have been introduced between XEIGT_8488_FULL and XEIGTPW_13558_FULL:

### New IGT tests (7) ###

  * igt@sriov_basic@enable-vfs-autoprobe-off@numvfs-10:
    - Statuses : 1 pass(s)
    - Exec time: [1.69] s

  * igt@sriov_basic@enable-vfs-autoprobe-off@numvfs-11:
    - Statuses : 1 pass(s)
    - Exec time: [1.75] s

  * igt@sriov_basic@enable-vfs-autoprobe-off@numvfs-12:
    - Statuses : 1 pass(s)
    - Exec time: [1.63] s

  * igt@sriov_basic@enable-vfs-autoprobe-off@numvfs-8:
    - Statuses : 1 pass(s)
    - Exec time: [1.63] s

  * igt@sriov_basic@enable-vfs-autoprobe-off@numvfs-9:
    - Statuses : 1 pass(s)
    - Exec time: [1.69] s

  * igt@xe_pmu@fn-engine-activity-load@engine-drm_xe_engine_class_compute0:
    - Statuses : 1 pass(s)
    - Exec time: [6.06] s

  * igt@xe_pmu@fn-engine-activity-load@engine-drm_xe_engine_class_video_enhance1:
    - Statuses : 1 pass(s)
    - Exec time: [6.06] s

  

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

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

### IGT changes ###

#### Issues hit ####

  * igt@core_setmaster@master-drop-set-user:
    - shard-dg2-set2:     [PASS][18] -> [FAIL][19] ([Intel XE#4208]) +1 other test fail
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-432/igt@core_setmaster@master-drop-set-user.html
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@core_setmaster@master-drop-set-user.html

  * igt@fbdev@nullptr:
    - shard-dg2-set2:     NOTRUN -> [SKIP][20] ([Intel XE#2134])
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@fbdev@nullptr.html

  * igt@kms_async_flips@alternate-sync-async-flip:
    - shard-bmg:          [PASS][21] -> [FAIL][22] ([Intel XE#827])
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-6/igt@kms_async_flips@alternate-sync-async-flip.html
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-5/igt@kms_async_flips@alternate-sync-async-flip.html

  * igt@kms_async_flips@alternate-sync-async-flip@pipe-b-dp-2:
    - shard-bmg:          NOTRUN -> [FAIL][23] ([Intel XE#827])
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-5/igt@kms_async_flips@alternate-sync-async-flip@pipe-b-dp-2.html

  * igt@kms_async_flips@async-flip-with-page-flip-events-linear-atomic@pipe-c-edp-1:
    - shard-lnl:          [PASS][24] -> [FAIL][25] ([Intel XE#911]) +7 other tests fail
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-4/igt@kms_async_flips@async-flip-with-page-flip-events-linear-atomic@pipe-c-edp-1.html
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-7/igt@kms_async_flips@async-flip-with-page-flip-events-linear-atomic@pipe-c-edp-1.html

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

  * igt@kms_big_fb@y-tiled-addfb-size-overflow:
    - shard-dg2-set2:     NOTRUN -> [SKIP][27] ([Intel XE#610])
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-464/igt@kms_big_fb@y-tiled-addfb-size-overflow.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip:
    - shard-bmg:          NOTRUN -> [SKIP][28] ([Intel XE#1124]) +3 other tests skip
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-3/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip.html

  * igt@kms_big_fb@yf-tiled-addfb-size-overflow:
    - shard-bmg:          NOTRUN -> [SKIP][29] ([Intel XE#610])
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-4/igt@kms_big_fb@yf-tiled-addfb-size-overflow.html
    - shard-lnl:          NOTRUN -> [SKIP][30] ([Intel XE#1428])
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-4/igt@kms_big_fb@yf-tiled-addfb-size-overflow.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-async-flip:
    - shard-lnl:          NOTRUN -> [SKIP][31] ([Intel XE#1124]) +2 other tests skip
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-5/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html

  * igt@kms_bw@linear-tiling-3-displays-3840x2160p:
    - shard-bmg:          NOTRUN -> [SKIP][32] ([Intel XE#367])
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-7/igt@kms_bw@linear-tiling-3-displays-3840x2160p.html

  * igt@kms_ccs@bad-pixel-format-yf-tiled-ccs:
    - shard-dg2-set2:     NOTRUN -> [SKIP][33] ([Intel XE#455] / [Intel XE#787]) +16 other tests skip
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-433/igt@kms_ccs@bad-pixel-format-yf-tiled-ccs.html

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

  * igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs@pipe-d-dp-4:
    - shard-dg2-set2:     NOTRUN -> [INCOMPLETE][35] ([Intel XE#3862]) +1 other test incomplete
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-433/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs@pipe-d-dp-4.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs-cc@pipe-d-dp-4:
    - shard-dg2-set2:     [PASS][36] -> [INCOMPLETE][37] ([Intel XE#3862]) +1 other test incomplete
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-436/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs-cc@pipe-d-dp-4.html
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-435/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs-cc@pipe-d-dp-4.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs@pipe-a-dp-2:
    - shard-bmg:          NOTRUN -> [SKIP][38] ([Intel XE#2652] / [Intel XE#787]) +3 other tests skip
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-1/igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs@pipe-a-dp-2.html

  * igt@kms_ccs@missing-ccs-buffer-yf-tiled-ccs@pipe-b-dp-4:
    - shard-dg2-set2:     NOTRUN -> [SKIP][39] ([Intel XE#787]) +97 other tests skip
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-463/igt@kms_ccs@missing-ccs-buffer-yf-tiled-ccs@pipe-b-dp-4.html

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-a-dp-4:
    - shard-dg2-set2:     NOTRUN -> [INCOMPLETE][40] ([Intel XE#2705] / [Intel XE#4212])
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-434/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-a-dp-4.html

  * igt@kms_ccs@random-ccs-data-y-tiled-gen12-mc-ccs:
    - shard-lnl:          NOTRUN -> [SKIP][41] ([Intel XE#2887]) +2 other tests skip
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-2/igt@kms_ccs@random-ccs-data-y-tiled-gen12-mc-ccs.html

  * igt@kms_chamelium_audio@hdmi-audio-edid:
    - shard-dg2-set2:     NOTRUN -> [SKIP][42] ([Intel XE#373])
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-433/igt@kms_chamelium_audio@hdmi-audio-edid.html

  * igt@kms_content_protection@atomic@pipe-a-dp-2:
    - shard-bmg:          NOTRUN -> [FAIL][43] ([Intel XE#1178]) +2 other tests fail
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-1/igt@kms_content_protection@atomic@pipe-a-dp-2.html

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

  * igt@kms_content_protection@legacy@pipe-a-dp-2:
    - shard-dg2-set2:     NOTRUN -> [FAIL][45] ([Intel XE#1178])
   [45]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-432/igt@kms_content_protection@legacy@pipe-a-dp-2.html

  * igt@kms_cursor_crc@cursor-onscreen-512x170:
    - shard-dg2-set2:     NOTRUN -> [SKIP][46] ([Intel XE#308])
   [46]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-432/igt@kms_cursor_crc@cursor-onscreen-512x170.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic:
    - shard-bmg:          [PASS][47] -> [FAIL][48] ([Intel XE#1475])
   [47]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-2/igt@kms_cursor_legacy@flip-vs-cursor-atomic.html
   [48]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-4/igt@kms_cursor_legacy@flip-vs-cursor-atomic.html

  * igt@kms_cursor_legacy@flip-vs-cursor-legacy:
    - shard-bmg:          [PASS][49] -> [FAIL][50] ([Intel XE#5299])
   [49]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-6/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html
   [50]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-7/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html

  * igt@kms_dp_link_training@uhbr-sst:
    - shard-dg2-set2:     NOTRUN -> [SKIP][51] ([Intel XE#4356]) +1 other test skip
   [51]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-432/igt@kms_dp_link_training@uhbr-sst.html

  * igt@kms_fbcon_fbt@fbc:
    - shard-bmg:          NOTRUN -> [SKIP][52] ([Intel XE#5425])
   [52]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-5/igt@kms_fbcon_fbt@fbc.html

  * igt@kms_feature_discovery@chamelium:
    - shard-dg2-set2:     NOTRUN -> [SKIP][53] ([Intel XE#701])
   [53]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-433/igt@kms_feature_discovery@chamelium.html

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

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

  * igt@kms_flip@2x-modeset-vs-vblank-race@cd-dp2-hdmi-a3:
    - shard-bmg:          [PASS][57] -> [FAIL][58] ([Intel XE#3650]) +2 other tests fail
   [57]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-7/igt@kms_flip@2x-modeset-vs-vblank-race@cd-dp2-hdmi-a3.html
   [58]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-6/igt@kms_flip@2x-modeset-vs-vblank-race@cd-dp2-hdmi-a3.html

  * igt@kms_flip@2x-plain-flip-fb-recreate-interruptible:
    - shard-bmg:          [PASS][59] -> [FAIL][60] ([Intel XE#5416])
   [59]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-7/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible.html
   [60]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-7/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible.html

  * igt@kms_flip@2x-plain-flip-ts-check-interruptible:
    - shard-bmg:          [PASS][61] -> [SKIP][62] ([Intel XE#2316]) +3 other tests skip
   [61]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-7/igt@kms_flip@2x-plain-flip-ts-check-interruptible.html
   [62]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-6/igt@kms_flip@2x-plain-flip-ts-check-interruptible.html

  * igt@kms_flip@flip-vs-suspend-interruptible:
    - shard-dg2-set2:     [PASS][63] -> [INCOMPLETE][64] ([Intel XE#2049] / [Intel XE#2597]) +1 other test incomplete
   [63]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-464/igt@kms_flip@flip-vs-suspend-interruptible.html
   [64]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-434/igt@kms_flip@flip-vs-suspend-interruptible.html

  * igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-downscaling:
    - shard-dg2-set2:     [PASS][65] -> [SKIP][66] ([Intel XE#4208]) +379 other tests skip
   [65]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-466/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-downscaling.html
   [66]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-downscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-xtile-to-64bpp-xtile-upscaling:
    - shard-dg2-set2:     [PASS][67] -> [SKIP][68] ([Intel XE#2351] / [Intel XE#4208]) +12 other tests skip
   [67]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-433/igt@kms_flip_scaled_crc@flip-32bpp-xtile-to-64bpp-xtile-upscaling.html
   [68]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_flip_scaled_crc@flip-32bpp-xtile-to-64bpp-xtile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-upscaling:
    - shard-bmg:          [PASS][69] -> [DMESG-WARN][70] ([Intel XE#3428]) +1 other test dmesg-warn
   [69]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-8/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-upscaling.html
   [70]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-6/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-upscaling.html

  * igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-blt:
    - shard-lnl:          NOTRUN -> [SKIP][71] ([Intel XE#656]) +8 other tests skip
   [71]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-4/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-blt:
    - shard-bmg:          NOTRUN -> [SKIP][72] ([Intel XE#5390])
   [72]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-2/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-mmap-wc:
    - shard-lnl:          NOTRUN -> [SKIP][73] ([Intel XE#651]) +1 other test skip
   [73]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-2/igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-indfb-pgflip-blt:
    - shard-bmg:          NOTRUN -> [SKIP][74] ([Intel XE#2311]) +8 other tests skip
   [74]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-7/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-indfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-render:
    - shard-bmg:          NOTRUN -> [SKIP][75] ([Intel XE#2312])
   [75]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-4/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-move:
    - shard-dg2-set2:     NOTRUN -> [SKIP][76] ([Intel XE#651]) +9 other tests skip
   [76]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-466/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-move.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-tiling-y:
    - shard-dg2-set2:     NOTRUN -> [SKIP][77] ([Intel XE#2351] / [Intel XE#4208]) +4 other tests skip
   [77]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_frontbuffer_tracking@fbcdrrs-tiling-y.html
    - shard-lnl:          NOTRUN -> [SKIP][78] ([Intel XE#1469])
   [78]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-8/igt@kms_frontbuffer_tracking@fbcdrrs-tiling-y.html
    - shard-bmg:          NOTRUN -> [SKIP][79] ([Intel XE#2352])
   [79]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-7/igt@kms_frontbuffer_tracking@fbcdrrs-tiling-y.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-indfb-draw-blt:
    - shard-dg2-set2:     NOTRUN -> [SKIP][80] ([Intel XE#653]) +10 other tests skip
   [80]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-463/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-indfb-draw-blt.html

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

  * igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
    - shard-dg2-set2:     NOTRUN -> [SKIP][82] ([Intel XE#356])
   [82]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-434/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html

  * igt@kms_plane_multiple@2x-tiling-none:
    - shard-bmg:          [PASS][83] -> [SKIP][84] ([Intel XE#4596])
   [83]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-1/igt@kms_plane_multiple@2x-tiling-none.html
   [84]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-6/igt@kms_plane_multiple@2x-tiling-none.html

  * igt@kms_pm_dc@dc6-dpms:
    - shard-dg2-set2:     NOTRUN -> [SKIP][85] ([Intel XE#908])
   [85]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-463/igt@kms_pm_dc@dc6-dpms.html
    - shard-lnl:          [PASS][86] -> [FAIL][87] ([Intel XE#718])
   [86]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-2/igt@kms_pm_dc@dc6-dpms.html
   [87]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-5/igt@kms_pm_dc@dc6-dpms.html

  * igt@kms_pm_lpsp@kms-lpsp:
    - shard-bmg:          NOTRUN -> [SKIP][88] ([Intel XE#2499])
   [88]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-7/igt@kms_pm_lpsp@kms-lpsp.html

  * igt@kms_pm_rpm@dpms-non-lpsp:
    - shard-bmg:          [PASS][89] -> [ABORT][90] ([Intel XE#4760])
   [89]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-5/igt@kms_pm_rpm@dpms-non-lpsp.html
   [90]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-2/igt@kms_pm_rpm@dpms-non-lpsp.html

  * igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-sf:
    - shard-lnl:          NOTRUN -> [SKIP][91] ([Intel XE#2893])
   [91]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-4/igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-sf.html

  * igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-sf-dmg-area@pipe-a-edp-1:
    - shard-lnl:          NOTRUN -> [SKIP][92] ([Intel XE#4608])
   [92]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-3/igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-sf-dmg-area@pipe-a-edp-1.html

  * igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-exceed-fully-sf:
    - shard-dg2-set2:     NOTRUN -> [SKIP][93] ([Intel XE#1489]) +1 other test skip
   [93]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-432/igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-exceed-fully-sf.html

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

  * igt@kms_psr@fbc-psr-primary-render:
    - shard-bmg:          NOTRUN -> [SKIP][95] ([Intel XE#2234] / [Intel XE#2850]) +2 other tests skip
   [95]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-6/igt@kms_psr@fbc-psr-primary-render.html

  * igt@kms_psr@fbc-psr2-dpms:
    - shard-dg2-set2:     NOTRUN -> [SKIP][96] ([Intel XE#2850] / [Intel XE#929]) +3 other tests skip
   [96]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-433/igt@kms_psr@fbc-psr2-dpms.html

  * igt@kms_psr@pr-sprite-plane-onoff:
    - shard-lnl:          NOTRUN -> [SKIP][97] ([Intel XE#1406]) +1 other test skip
   [97]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-2/igt@kms_psr@pr-sprite-plane-onoff.html

  * igt@kms_rotation_crc@sprite-rotation-90:
    - shard-bmg:          NOTRUN -> [SKIP][98] ([Intel XE#3414] / [Intel XE#3904])
   [98]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-4/igt@kms_rotation_crc@sprite-rotation-90.html

  * igt@kms_scaling_modes@scaling-mode-center:
    - shard-dg2-set2:     NOTRUN -> [SKIP][99] ([Intel XE#455]) +3 other tests skip
   [99]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-463/igt@kms_scaling_modes@scaling-mode-center.html

  * igt@kms_vrr@cmrr@pipe-a-edp-1:
    - shard-lnl:          [PASS][100] -> [FAIL][101] ([Intel XE#4459]) +1 other test fail
   [100]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-4/igt@kms_vrr@cmrr@pipe-a-edp-1.html
   [101]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-5/igt@kms_vrr@cmrr@pipe-a-edp-1.html

  * igt@xe_eu_stall@blocking-re-enable:
    - shard-dg2-set2:     NOTRUN -> [SKIP][102] ([Intel XE#5626])
   [102]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-464/igt@xe_eu_stall@blocking-re-enable.html

  * igt@xe_eudebug@basic-vm-access-faultable:
    - shard-dg2-set2:     NOTRUN -> [SKIP][103] ([Intel XE#4837]) +2 other tests skip
   [103]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-464/igt@xe_eudebug@basic-vm-access-faultable.html

  * igt@xe_eudebug@discovery-race-sigint:
    - shard-bmg:          NOTRUN -> [SKIP][104] ([Intel XE#4837]) +2 other tests skip
   [104]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-5/igt@xe_eudebug@discovery-race-sigint.html
    - shard-lnl:          NOTRUN -> [SKIP][105] ([Intel XE#4837]) +2 other tests skip
   [105]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-5/igt@xe_eudebug@discovery-race-sigint.html

  * igt@xe_evict_ccs@evict-overcommit-parallel-instantfree-reopen:
    - shard-lnl:          NOTRUN -> [SKIP][106] ([Intel XE#688])
   [106]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-2/igt@xe_evict_ccs@evict-overcommit-parallel-instantfree-reopen.html

  * igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr-rebind:
    - shard-lnl:          NOTRUN -> [SKIP][107] ([Intel XE#1392])
   [107]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-5/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr-rebind.html

  * igt@xe_exec_basic@multigpu-no-exec-basic:
    - shard-dg2-set2:     NOTRUN -> [SKIP][108] ([Intel XE#1392])
   [108]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-432/igt@xe_exec_basic@multigpu-no-exec-basic.html

  * igt@xe_exec_basic@multigpu-no-exec-bindexecqueue:
    - shard-bmg:          NOTRUN -> [SKIP][109] ([Intel XE#2322]) +2 other tests skip
   [109]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-3/igt@xe_exec_basic@multigpu-no-exec-bindexecqueue.html

  * igt@xe_exec_basic@multigpu-once-bindexecqueue-userptr-invalidate:
    - shard-dg2-set2:     [PASS][110] -> [SKIP][111] ([Intel XE#1392]) +1 other test skip
   [110]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-436/igt@xe_exec_basic@multigpu-once-bindexecqueue-userptr-invalidate.html
   [111]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-432/igt@xe_exec_basic@multigpu-once-bindexecqueue-userptr-invalidate.html

  * igt@xe_exec_basic@no-exec-userptr-invalidate:
    - shard-dg2-set2:     NOTRUN -> [SKIP][112] ([Intel XE#4208]) +55 other tests skip
   [112]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_exec_basic@no-exec-userptr-invalidate.html

  * igt@xe_exec_fault_mode@many-bindexecqueue-userptr-rebind-imm:
    - shard-dg2-set2:     NOTRUN -> [SKIP][113] ([Intel XE#288]) +4 other tests skip
   [113]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-463/igt@xe_exec_fault_mode@many-bindexecqueue-userptr-rebind-imm.html

  * igt@xe_exec_system_allocator@many-execqueues-mmap-huge-nomemset:
    - shard-bmg:          NOTRUN -> [SKIP][114] ([Intel XE#4943]) +3 other tests skip
   [114]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-1/igt@xe_exec_system_allocator@many-execqueues-mmap-huge-nomemset.html

  * igt@xe_exec_system_allocator@process-many-mmap-new-huge-nomemset:
    - shard-lnl:          NOTRUN -> [SKIP][115] ([Intel XE#4943]) +2 other tests skip
   [115]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-4/igt@xe_exec_system_allocator@process-many-mmap-new-huge-nomemset.html

  * igt@xe_exec_system_allocator@twice-mmap-new-huge:
    - shard-dg2-set2:     NOTRUN -> [SKIP][116] ([Intel XE#4915]) +58 other tests skip
   [116]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-464/igt@xe_exec_system_allocator@twice-mmap-new-huge.html

  * igt@xe_oa@buffer-fill:
    - shard-dg2-set2:     NOTRUN -> [SKIP][117] ([Intel XE#3573]) +1 other test skip
   [117]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-463/igt@xe_oa@buffer-fill.html

  * igt@xe_pat@display-vs-wb-transient:
    - shard-dg2-set2:     NOTRUN -> [SKIP][118] ([Intel XE#1337])
   [118]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-463/igt@xe_pat@display-vs-wb-transient.html

  * igt@xe_peer2peer@read@read-gpua-vram01-gpub-system-p2p:
    - shard-dg2-set2:     NOTRUN -> [FAIL][119] ([Intel XE#1173])
   [119]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-433/igt@xe_peer2peer@read@read-gpua-vram01-gpub-system-p2p.html

  * igt@xe_pm@d3cold-basic-exec:
    - shard-lnl:          NOTRUN -> [SKIP][120] ([Intel XE#2284] / [Intel XE#366]) +1 other test skip
   [120]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-8/igt@xe_pm@d3cold-basic-exec.html

  * igt@xe_pm@d3cold-multiple-execs:
    - shard-bmg:          NOTRUN -> [SKIP][121] ([Intel XE#2284]) +1 other test skip
   [121]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-3/igt@xe_pm@d3cold-multiple-execs.html

  * igt@xe_pm@d3hot-i2c:
    - shard-dg2-set2:     NOTRUN -> [SKIP][122] ([Intel XE#5742])
   [122]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-432/igt@xe_pm@d3hot-i2c.html

  * igt@xe_pm@s2idle-basic-exec:
    - shard-bmg:          [PASS][123] -> [DMESG-WARN][124] ([Intel XE#3428] / [Intel XE#4504] / [Intel XE#5215])
   [123]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-5/igt@xe_pm@s2idle-basic-exec.html
   [124]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-6/igt@xe_pm@s2idle-basic-exec.html

  * igt@xe_pm@s4-vm-bind-unbind-all:
    - shard-bmg:          [PASS][125] -> [DMESG-WARN][126] ([Intel XE#3428] / [Intel XE#5215]) +7 other tests dmesg-warn
   [125]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-8/igt@xe_pm@s4-vm-bind-unbind-all.html
   [126]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-6/igt@xe_pm@s4-vm-bind-unbind-all.html

  * igt@xe_pxp@regular-src-to-pxp-dest-rendercopy:
    - shard-dg2-set2:     NOTRUN -> [SKIP][127] ([Intel XE#4733])
   [127]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-433/igt@xe_pxp@regular-src-to-pxp-dest-rendercopy.html

  * igt@xe_query@multigpu-query-invalid-query:
    - shard-bmg:          NOTRUN -> [SKIP][128] ([Intel XE#944])
   [128]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-4/igt@xe_query@multigpu-query-invalid-query.html

  * igt@xe_query@multigpu-query-topology:
    - shard-dg2-set2:     NOTRUN -> [SKIP][129] ([Intel XE#944]) +1 other test skip
   [129]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-433/igt@xe_query@multigpu-query-topology.html

  * igt@xe_sriov_flr@flr-each-isolation:
    - shard-dg2-set2:     NOTRUN -> [SKIP][130] ([Intel XE#3342])
   [130]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-434/igt@xe_sriov_flr@flr-each-isolation.html

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

  
#### Possible fixes ####

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-a-hdmi-a-6:
    - shard-dg2-set2:     [INCOMPLETE][132] ([Intel XE#1727] / [Intel XE#3113] / [Intel XE#4212] / [Intel XE#4522]) -> [PASS][133]
   [132]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-466/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-a-hdmi-a-6.html
   [133]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-434/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-a-hdmi-a-6.html

  * igt@kms_cursor_legacy@cursora-vs-flipb-atomic-transitions-varying-size:
    - shard-bmg:          [SKIP][134] ([Intel XE#2291]) -> [PASS][135] +3 other tests pass
   [134]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-6/igt@kms_cursor_legacy@cursora-vs-flipb-atomic-transitions-varying-size.html
   [135]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-7/igt@kms_cursor_legacy@cursora-vs-flipb-atomic-transitions-varying-size.html

  * igt@kms_display_modes@extended-mode-basic:
    - shard-bmg:          [SKIP][136] ([Intel XE#4302]) -> [PASS][137]
   [136]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-6/igt@kms_display_modes@extended-mode-basic.html
   [137]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-5/igt@kms_display_modes@extended-mode-basic.html

  * igt@kms_dp_aux_dev:
    - shard-bmg:          [SKIP][138] ([Intel XE#3009]) -> [PASS][139]
   [138]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-6/igt@kms_dp_aux_dev.html
   [139]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-6/igt@kms_dp_aux_dev.html

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

  * igt@kms_hdr@static-toggle-suspend:
    - shard-bmg:          [SKIP][142] ([Intel XE#1503]) -> [PASS][143]
   [142]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-6/igt@kms_hdr@static-toggle-suspend.html
   [143]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-8/igt@kms_hdr@static-toggle-suspend.html

  * igt@kms_pm_dc@dc5-dpms:
    - shard-lnl:          [FAIL][144] ([Intel XE#718]) -> [PASS][145] +1 other test pass
   [144]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-8/igt@kms_pm_dc@dc5-dpms.html
   [145]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-5/igt@kms_pm_dc@dc5-dpms.html

  * igt@kms_setmode@clone-exclusive-crtc:
    - shard-bmg:          [SKIP][146] ([Intel XE#1435]) -> [PASS][147]
   [146]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-6/igt@kms_setmode@clone-exclusive-crtc.html
   [147]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-5/igt@kms_setmode@clone-exclusive-crtc.html

  * igt@sriov_basic@enable-vfs-autoprobe-off:
    - shard-bmg:          [SKIP][148] ([Intel XE#1091] / [Intel XE#2849]) -> [PASS][149] +1 other test pass
   [148]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-7/igt@sriov_basic@enable-vfs-autoprobe-off.html
   [149]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-1/igt@sriov_basic@enable-vfs-autoprobe-off.html

  * igt@xe_exec_basic@multigpu-many-execqueues-many-vm-basic-defer-bind:
    - shard-dg2-set2:     [SKIP][150] ([Intel XE#1392]) -> [PASS][151] +2 other tests pass
   [150]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-432/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-basic-defer-bind.html
   [151]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-433/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-basic-defer-bind.html

  * {igt@xe_exec_system_allocator@many-stride-malloc-prefetch}:
    - shard-bmg:          [WARN][152] ([Intel XE#5786]) -> [PASS][153]
   [152]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-4/igt@xe_exec_system_allocator@many-stride-malloc-prefetch.html
   [153]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-5/igt@xe_exec_system_allocator@many-stride-malloc-prefetch.html

  * igt@xe_exec_system_allocator@partial-remap-cpu-fault:
    - shard-bmg:          [FAIL][154] ([Intel XE#5625]) -> [PASS][155]
   [154]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-7/igt@xe_exec_system_allocator@partial-remap-cpu-fault.html
   [155]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-3/igt@xe_exec_system_allocator@partial-remap-cpu-fault.html

  * igt@xe_module_load@load:
    - shard-lnl:          ([PASS][156], [SKIP][157], [PASS][158], [PASS][159], [PASS][160], [PASS][161], [PASS][162], [PASS][163], [PASS][164], [PASS][165], [PASS][166], [PASS][167], [PASS][168], [PASS][169], [PASS][170], [PASS][171], [PASS][172], [PASS][173], [PASS][174], [PASS][175], [PASS][176], [PASS][177], [PASS][178], [PASS][179], [PASS][180], [PASS][181]) ([Intel XE#378]) -> ([PASS][182], [PASS][183], [PASS][184], [PASS][185], [PASS][186], [PASS][187], [PASS][188], [PASS][189], [PASS][190], [PASS][191], [PASS][192], [PASS][193], [PASS][194], [PASS][195], [PASS][196], [PASS][197], [PASS][198], [PASS][199], [PASS][200], [PASS][201], [PASS][202], [PASS][203], [PASS][204], [PASS][205], [PASS][206])
   [156]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-3/igt@xe_module_load@load.html
   [157]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-7/igt@xe_module_load@load.html
   [158]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-7/igt@xe_module_load@load.html
   [159]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-2/igt@xe_module_load@load.html
   [160]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-2/igt@xe_module_load@load.html
   [161]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-2/igt@xe_module_load@load.html
   [162]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-7/igt@xe_module_load@load.html
   [163]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-7/igt@xe_module_load@load.html
   [164]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-7/igt@xe_module_load@load.html
   [165]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-5/igt@xe_module_load@load.html
   [166]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-8/igt@xe_module_load@load.html
   [167]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-8/igt@xe_module_load@load.html
   [168]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-5/igt@xe_module_load@load.html
   [169]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-5/igt@xe_module_load@load.html
   [170]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-4/igt@xe_module_load@load.html
   [171]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-1/igt@xe_module_load@load.html
   [172]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-8/igt@xe_module_load@load.html
   [173]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-2/igt@xe_module_load@load.html
   [174]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-1/igt@xe_module_load@load.html
   [175]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-1/igt@xe_module_load@load.html
   [176]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-1/igt@xe_module_load@load.html
   [177]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-4/igt@xe_module_load@load.html
   [178]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-4/igt@xe_module_load@load.html
   [179]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-3/igt@xe_module_load@load.html
   [180]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-3/igt@xe_module_load@load.html
   [181]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-4/igt@xe_module_load@load.html
   [182]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-5/igt@xe_module_load@load.html
   [183]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-5/igt@xe_module_load@load.html
   [184]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-2/igt@xe_module_load@load.html
   [185]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-1/igt@xe_module_load@load.html
   [186]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-8/igt@xe_module_load@load.html
   [187]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-2/igt@xe_module_load@load.html
   [188]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-2/igt@xe_module_load@load.html
   [189]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-4/igt@xe_module_load@load.html
   [190]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-3/igt@xe_module_load@load.html
   [191]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-8/igt@xe_module_load@load.html
   [192]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-5/igt@xe_module_load@load.html
   [193]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-5/igt@xe_module_load@load.html
   [194]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-2/igt@xe_module_load@load.html
   [195]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-1/igt@xe_module_load@load.html
   [196]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-3/igt@xe_module_load@load.html
   [197]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-1/igt@xe_module_load@load.html
   [198]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-7/igt@xe_module_load@load.html
   [199]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-4/igt@xe_module_load@load.html
   [200]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-8/igt@xe_module_load@load.html
   [201]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-4/igt@xe_module_load@load.html
   [202]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-7/igt@xe_module_load@load.html
   [203]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-3/igt@xe_module_load@load.html
   [204]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-7/igt@xe_module_load@load.html
   [205]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-8/igt@xe_module_load@load.html
   [206]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-7/igt@xe_module_load@load.html
    - shard-bmg:          ([PASS][207], [PASS][208], [PASS][209], [PASS][210], [PASS][211], [PASS][212], [PASS][213], [PASS][214], [PASS][215], [PASS][216], [PASS][217], [PASS][218], [PASS][219], [PASS][220], [SKIP][221], [PASS][222], [PASS][223], [PASS][224], [PASS][225], [PASS][226], [PASS][227], [PASS][228], [PASS][229], [PASS][230], [PASS][231], [PASS][232]) ([Intel XE#2457]) -> ([PASS][233], [PASS][234], [PASS][235], [PASS][236], [PASS][237], [PASS][238], [PASS][239], [PASS][240], [PASS][241], [PASS][242], [PASS][243], [PASS][244], [PASS][245], [PASS][246], [PASS][247], [PASS][248], [PASS][249], [PASS][250], [PASS][251], [PASS][252], [PASS][253], [PASS][254], [PASS][255], [PASS][256])
   [207]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-4/igt@xe_module_load@load.html
   [208]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-3/igt@xe_module_load@load.html
   [209]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-3/igt@xe_module_load@load.html
   [210]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-3/igt@xe_module_load@load.html
   [211]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-8/igt@xe_module_load@load.html
   [212]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-1/igt@xe_module_load@load.html
   [213]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-1/igt@xe_module_load@load.html
   [214]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-1/igt@xe_module_load@load.html
   [215]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-4/igt@xe_module_load@load.html
   [216]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-2/igt@xe_module_load@load.html
   [217]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-6/igt@xe_module_load@load.html
   [218]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-6/igt@xe_module_load@load.html
   [219]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-1/igt@xe_module_load@load.html
   [220]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-6/igt@xe_module_load@load.html
   [221]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-6/igt@xe_module_load@load.html
   [222]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-6/igt@xe_module_load@load.html
   [223]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-7/igt@xe_module_load@load.html
   [224]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-7/igt@xe_module_load@load.html
   [225]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-7/igt@xe_module_load@load.html
   [226]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-8/igt@xe_module_load@load.html
   [227]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-5/igt@xe_module_load@load.html
   [228]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-5/igt@xe_module_load@load.html
   [229]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-5/igt@xe_module_load@load.html
   [230]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-8/igt@xe_module_load@load.html
   [231]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-2/igt@xe_module_load@load.html
   [232]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-2/igt@xe_module_load@load.html
   [233]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-7/igt@xe_module_load@load.html
   [234]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-7/igt@xe_module_load@load.html
   [235]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-5/igt@xe_module_load@load.html
   [236]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-3/igt@xe_module_load@load.html
   [237]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-3/igt@xe_module_load@load.html
   [238]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-3/igt@xe_module_load@load.html
   [239]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-8/igt@xe_module_load@load.html
   [240]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-4/igt@xe_module_load@load.html
   [241]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-8/igt@xe_module_load@load.html
   [242]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-1/igt@xe_module_load@load.html
   [243]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-7/igt@xe_module_load@load.html
   [244]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-1/igt@xe_module_load@load.html
   [245]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-4/igt@xe_module_load@load.html
   [246]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-2/igt@xe_module_load@load.html
   [247]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-5/igt@xe_module_load@load.html
   [248]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-6/igt@xe_module_load@load.html
   [249]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-4/igt@xe_module_load@load.html
   [250]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-5/igt@xe_module_load@load.html
   [251]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-2/igt@xe_module_load@load.html
   [252]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-7/igt@xe_module_load@load.html
   [253]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-2/igt@xe_module_load@load.html
   [254]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-6/igt@xe_module_load@load.html
   [255]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-2/igt@xe_module_load@load.html
   [256]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-1/igt@xe_module_load@load.html
    - shard-dg2-set2:     ([PASS][257], [PASS][258], [PASS][259], [PASS][260], [PASS][261], [PASS][262], [SKIP][263], [PASS][264], [PASS][265], [PASS][266], [PASS][267], [PASS][268], [PASS][269], [PASS][270], [PASS][271], [PASS][272], [PASS][273], [PASS][274], [PASS][275], [PASS][276], [PASS][277], [PASS][278], [PASS][279], [PASS][280], [PASS][281], [PASS][282]) ([Intel XE#378]) -> ([PASS][283], [PASS][284], [PASS][285], [PASS][286], [PASS][287], [PASS][288], [PASS][289], [PASS][290], [PASS][291], [PASS][292], [PASS][293], [PASS][294], [PASS][295], [PASS][296], [PASS][297], [PASS][298], [PASS][299], [PASS][300], [PASS][301], [PASS][302], [PASS][303], [PASS][304], [PASS][305], [PASS][306])
   [257]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-463/igt@xe_module_load@load.html
   [258]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-432/igt@xe_module_load@load.html
   [259]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-464/igt@xe_module_load@load.html
   [260]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-432/igt@xe_module_load@load.html
   [261]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-432/igt@xe_module_load@load.html
   [262]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-464/igt@xe_module_load@load.html
   [263]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-433/igt@xe_module_load@load.html
   [264]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-464/igt@xe_module_load@load.html
   [265]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-433/igt@xe_module_load@load.html
   [266]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-433/igt@xe_module_load@load.html
   [267]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-433/igt@xe_module_load@load.html
   [268]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-433/igt@xe_module_load@load.html
   [269]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-463/igt@xe_module_load@load.html
   [270]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-463/igt@xe_module_load@load.html
   [271]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-434/igt@xe_module_load@load.html
   [272]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-436/igt@xe_module_load@load.html
   [273]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-436/igt@xe_module_load@load.html
   [274]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-436/igt@xe_module_load@load.html
   [275]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-435/igt@xe_module_load@load.html
   [276]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-435/igt@xe_module_load@load.html
   [277]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-466/igt@xe_module_load@load.html
   [278]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-435/igt@xe_module_load@load.html
   [279]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-434/igt@xe_module_load@load.html
   [280]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-434/igt@xe_module_load@load.html
   [281]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-466/igt@xe_module_load@load.html
   [282]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-466/igt@xe_module_load@load.html
   [283]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_module_load@load.html
   [284]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-433/igt@xe_module_load@load.html
   [285]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_module_load@load.html
   [286]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_module_load@load.html
   [287]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-433/igt@xe_module_load@load.html
   [288]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-433/igt@xe_module_load@load.html
   [289]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-464/igt@xe_module_load@load.html
   [290]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-466/igt@xe_module_load@load.html
   [291]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-464/igt@xe_module_load@load.html
   [292]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-432/igt@xe_module_load@load.html
   [293]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-432/igt@xe_module_load@load.html
   [294]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-463/igt@xe_module_load@load.html
   [295]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_module_load@load.html
   [296]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_module_load@load.html
   [297]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-434/igt@xe_module_load@load.html
   [298]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-466/igt@xe_module_load@load.html
   [299]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-466/igt@xe_module_load@load.html
   [300]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-435/igt@xe_module_load@load.html
   [301]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-435/igt@xe_module_load@load.html
   [302]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-435/igt@xe_module_load@load.html
   [303]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-434/igt@xe_module_load@load.html
   [304]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-434/igt@xe_module_load@load.html
   [305]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-463/igt@xe_module_load@load.html
   [306]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_module_load@load.html

  * igt@xe_pmu@fn-engine-activity-load:
    - shard-bmg:          [SKIP][307] ([Intel XE#4650]) -> [PASS][308]
   [307]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-8/igt@xe_pmu@fn-engine-activity-load.html
   [308]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-7/igt@xe_pmu@fn-engine-activity-load.html

  * igt@xe_pmu@gt-frequency:
    - shard-dg2-set2:     [FAIL][309] ([Intel XE#4819]) -> [PASS][310] +1 other test pass
   [309]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-432/igt@xe_pmu@gt-frequency.html
   [310]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-435/igt@xe_pmu@gt-frequency.html

  * igt@xe_sriov_auto_provisioning@resources-released-on-vfs-disabling:
    - shard-bmg:          [SKIP][311] ([Intel XE#4130]) -> [PASS][312] +2 other tests pass
   [311]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-5/igt@xe_sriov_auto_provisioning@resources-released-on-vfs-disabling.html
   [312]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-2/igt@xe_sriov_auto_provisioning@resources-released-on-vfs-disabling.html

  * igt@xe_sriov_flr@flr-vf1-clear:
    - shard-bmg:          [SKIP][313] ([Intel XE#3342]) -> [PASS][314] +1 other test pass
   [313]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-3/igt@xe_sriov_flr@flr-vf1-clear.html
   [314]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-5/igt@xe_sriov_flr@flr-vf1-clear.html

  * igt@xe_sriov_flr@flr-vfs-parallel:
    - shard-bmg:          [SKIP][315] ([Intel XE#4273]) -> [PASS][316]
   [315]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-2/igt@xe_sriov_flr@flr-vfs-parallel.html
   [316]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-8/igt@xe_sriov_flr@flr-vfs-parallel.html

  * igt@xe_sriov_scheduling@nonpreempt-engine-resets:
    - shard-bmg:          [SKIP][317] ([Intel XE#4351]) -> [PASS][318]
   [317]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-1/igt@xe_sriov_scheduling@nonpreempt-engine-resets.html
   [318]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-4/igt@xe_sriov_scheduling@nonpreempt-engine-resets.html

  
#### Warnings ####

  * igt@kms_async_flips@invalid-async-flip:
    - shard-dg2-set2:     [SKIP][319] ([Intel XE#873]) -> [SKIP][320] ([Intel XE#4208])
   [319]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-434/igt@kms_async_flips@invalid-async-flip.html
   [320]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_async_flips@invalid-async-flip.html

  * igt@kms_big_fb@4-tiled-16bpp-rotate-90:
    - shard-dg2-set2:     [SKIP][321] ([Intel XE#316]) -> [SKIP][322] ([Intel XE#2351] / [Intel XE#4208])
   [321]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-435/igt@kms_big_fb@4-tiled-16bpp-rotate-90.html
   [322]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_big_fb@4-tiled-16bpp-rotate-90.html

  * igt@kms_big_fb@4-tiled-32bpp-rotate-270:
    - shard-dg2-set2:     [SKIP][323] ([Intel XE#316]) -> [SKIP][324] ([Intel XE#4208]) +5 other tests skip
   [323]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-466/igt@kms_big_fb@4-tiled-32bpp-rotate-270.html
   [324]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_big_fb@4-tiled-32bpp-rotate-270.html

  * igt@kms_big_fb@y-tiled-addfb-size-offset-overflow:
    - shard-dg2-set2:     [SKIP][325] ([Intel XE#607]) -> [SKIP][326] ([Intel XE#2351] / [Intel XE#4208])
   [325]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-432/igt@kms_big_fb@y-tiled-addfb-size-offset-overflow.html
   [326]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_big_fb@y-tiled-addfb-size-offset-overflow.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0:
    - shard-dg2-set2:     [SKIP][327] ([Intel XE#1124]) -> [SKIP][328] ([Intel XE#4208]) +9 other tests skip
   [327]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-433/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0.html
   [328]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0.html

  * igt@kms_big_fb@yf-tiled-16bpp-rotate-90:
    - shard-dg2-set2:     [SKIP][329] ([Intel XE#1124]) -> [SKIP][330] ([Intel XE#2351] / [Intel XE#4208]) +3 other tests skip
   [329]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-463/igt@kms_big_fb@yf-tiled-16bpp-rotate-90.html
   [330]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_big_fb@yf-tiled-16bpp-rotate-90.html

  * igt@kms_bw@connected-linear-tiling-4-displays-3840x2160p:
    - shard-dg2-set2:     [SKIP][331] ([Intel XE#2191]) -> [SKIP][332] ([Intel XE#4208]) +1 other test skip
   [331]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-466/igt@kms_bw@connected-linear-tiling-4-displays-3840x2160p.html
   [332]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_bw@connected-linear-tiling-4-displays-3840x2160p.html

  * igt@kms_bw@linear-tiling-3-displays-2560x1440p:
    - shard-dg2-set2:     [SKIP][333] ([Intel XE#367]) -> [SKIP][334] ([Intel XE#4208]) +3 other tests skip
   [333]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-435/igt@kms_bw@linear-tiling-3-displays-2560x1440p.html
   [334]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_bw@linear-tiling-3-displays-2560x1440p.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-lnl-ccs:
    - shard-dg2-set2:     [SKIP][335] ([Intel XE#2907]) -> [SKIP][336] ([Intel XE#4208]) +2 other tests skip
   [335]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-435/igt@kms_ccs@bad-rotation-90-4-tiled-lnl-ccs.html
   [336]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_ccs@bad-rotation-90-4-tiled-lnl-ccs.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs:
    - shard-dg2-set2:     [SKIP][337] ([Intel XE#455] / [Intel XE#787]) -> [SKIP][338] ([Intel XE#4208]) +14 other tests skip
   [337]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-433/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs.html
   [338]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs-cc:
    - shard-dg2-set2:     [SKIP][339] ([Intel XE#455] / [Intel XE#787]) -> [SKIP][340] ([Intel XE#2351] / [Intel XE#4208])
   [339]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-434/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs-cc.html
   [340]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs-cc.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs:
    - shard-dg2-set2:     [SKIP][341] ([Intel XE#3442]) -> [SKIP][342] ([Intel XE#4208])
   [341]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-435/igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs.html
   [342]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs.html

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs:
    - shard-dg2-set2:     [INCOMPLETE][343] ([Intel XE#1727] / [Intel XE#3113] / [Intel XE#4212] / [Intel XE#4345] / [Intel XE#4522]) -> [INCOMPLETE][344] ([Intel XE#2705] / [Intel XE#4212] / [Intel XE#4345])
   [343]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-466/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs.html
   [344]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-434/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs.html

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc:
    - shard-dg2-set2:     [INCOMPLETE][345] ([Intel XE#1727] / [Intel XE#2705] / [Intel XE#3113] / [Intel XE#4212] / [Intel XE#4522]) -> [SKIP][346] ([Intel XE#4208])
   [345]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-464/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc.html
   [346]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc.html

  * igt@kms_chamelium_color@gamma:
    - shard-dg2-set2:     [SKIP][347] ([Intel XE#306]) -> [SKIP][348] ([Intel XE#4208]) +2 other tests skip
   [347]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-464/igt@kms_chamelium_color@gamma.html
   [348]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_chamelium_color@gamma.html

  * igt@kms_chamelium_frames@hdmi-crc-nonplanar-formats:
    - shard-dg2-set2:     [SKIP][349] ([Intel XE#373]) -> [SKIP][350] ([Intel XE#4208]) +9 other tests skip
   [349]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-433/igt@kms_chamelium_frames@hdmi-crc-nonplanar-formats.html
   [350]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_chamelium_frames@hdmi-crc-nonplanar-formats.html

  * igt@kms_content_protection@atomic:
    - shard-bmg:          [SKIP][351] ([Intel XE#2341]) -> [FAIL][352] ([Intel XE#1178]) +2 other tests fail
   [351]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-6/igt@kms_content_protection@atomic.html
   [352]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-1/igt@kms_content_protection@atomic.html
    - shard-dg2-set2:     [FAIL][353] ([Intel XE#1178]) -> [SKIP][354] ([Intel XE#4208])
   [353]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-435/igt@kms_content_protection@atomic.html
   [354]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_content_protection@atomic.html

  * igt@kms_content_protection@dp-mst-lic-type-1:
    - shard-dg2-set2:     [SKIP][355] ([Intel XE#307]) -> [SKIP][356] ([Intel XE#4208])
   [355]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-466/igt@kms_content_protection@dp-mst-lic-type-1.html
   [356]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_content_protection@dp-mst-lic-type-1.html

  * igt@kms_cursor_crc@cursor-sliding-512x170:
    - shard-dg2-set2:     [SKIP][357] ([Intel XE#308]) -> [SKIP][358] ([Intel XE#4208])
   [357]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-433/igt@kms_cursor_crc@cursor-sliding-512x170.html
   [358]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_cursor_crc@cursor-sliding-512x170.html

  * igt@kms_dp_link_training@non-uhbr-mst:
    - shard-dg2-set2:     [SKIP][359] ([Intel XE#4354]) -> [SKIP][360] ([Intel XE#4208])
   [359]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-435/igt@kms_dp_link_training@non-uhbr-mst.html
   [360]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_dp_link_training@non-uhbr-mst.html

  * igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-out-visible-area:
    - shard-dg2-set2:     [SKIP][361] ([Intel XE#4422]) -> [SKIP][362] ([Intel XE#4208])
   [361]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-433/igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-out-visible-area.html
   [362]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-out-visible-area.html

  * igt@kms_fbcon_fbt@psr:
    - shard-dg2-set2:     [SKIP][363] ([Intel XE#776]) -> [SKIP][364] ([Intel XE#4208])
   [363]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-433/igt@kms_fbcon_fbt@psr.html
   [364]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_fbcon_fbt@psr.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling:
    - shard-dg2-set2:     [SKIP][365] ([Intel XE#455]) -> [SKIP][366] ([Intel XE#2351] / [Intel XE#4208]) +2 other tests skip
   [365]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-464/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling.html
   [366]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling:
    - shard-dg2-set2:     [SKIP][367] ([Intel XE#455]) -> [SKIP][368] ([Intel XE#4208]) +9 other tests skip
   [367]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-433/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling.html
   [368]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling.html

  * igt@kms_frontbuffer_tracking@drrs-2p-pri-indfb-multidraw:
    - shard-bmg:          [SKIP][369] ([Intel XE#2312]) -> [SKIP][370] ([Intel XE#2311]) +10 other tests skip
   [369]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-2p-pri-indfb-multidraw.html
   [370]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-5/igt@kms_frontbuffer_tracking@drrs-2p-pri-indfb-multidraw.html

  * igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-fullscreen:
    - shard-dg2-set2:     [SKIP][371] ([Intel XE#651]) -> [SKIP][372] ([Intel XE#2351] / [Intel XE#4208]) +16 other tests skip
   [371]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-436/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-fullscreen.html
   [372]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-fullscreen.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-move:
    - shard-bmg:          [SKIP][373] ([Intel XE#5390]) -> [SKIP][374] ([Intel XE#2312])
   [373]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-7/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-move.html
   [374]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-move.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-onoff:
    - shard-bmg:          [SKIP][375] ([Intel XE#2312]) -> [SKIP][376] ([Intel XE#5390]) +5 other tests skip
   [375]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-onoff.html
   [376]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-2/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@fbc-tiling-y:
    - shard-dg2-set2:     [SKIP][377] ([Intel XE#658]) -> [SKIP][378] ([Intel XE#2351] / [Intel XE#4208])
   [377]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-435/igt@kms_frontbuffer_tracking@fbc-tiling-y.html
   [378]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_frontbuffer_tracking@fbc-tiling-y.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-blt:
    - shard-bmg:          [SKIP][379] ([Intel XE#2311]) -> [SKIP][380] ([Intel XE#2312]) +6 other tests skip
   [379]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-5/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-blt.html
   [380]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-4/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-mmap-wc:
    - shard-dg2-set2:     [SKIP][381] ([Intel XE#651]) -> [SKIP][382] ([Intel XE#4208]) +26 other tests skip
   [381]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-464/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-mmap-wc.html
   [382]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-indfb-msflip-blt:
    - shard-dg2-set2:     [SKIP][383] ([Intel XE#653]) -> [SKIP][384] ([Intel XE#4208]) +34 other tests skip
   [383]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-436/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-indfb-msflip-blt.html
   [384]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-indfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-tiling-4:
    - shard-dg2-set2:     [SKIP][385] ([Intel XE#653]) -> [SKIP][386] ([Intel XE#2351] / [Intel XE#4208]) +7 other tests skip
   [385]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-436/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html
   [386]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-draw-render:
    - shard-bmg:          [SKIP][387] ([Intel XE#2313]) -> [SKIP][388] ([Intel XE#2312]) +4 other tests skip
   [387]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-1/igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-draw-render.html
   [388]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-6/igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-onoff:
    - shard-bmg:          [SKIP][389] ([Intel XE#2312]) -> [SKIP][390] ([Intel XE#2313]) +8 other tests skip
   [389]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-6/igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-onoff.html
   [390]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-4/igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-onoff.html

  * igt@kms_joiner@basic-max-non-joiner:
    - shard-dg2-set2:     [SKIP][391] ([Intel XE#4298]) -> [SKIP][392] ([Intel XE#4208])
   [391]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-463/igt@kms_joiner@basic-max-non-joiner.html
   [392]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_joiner@basic-max-non-joiner.html

  * igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner:
    - shard-dg2-set2:     [SKIP][393] ([Intel XE#2925]) -> [SKIP][394] ([Intel XE#4208])
   [393]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-433/igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner.html
   [394]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner.html

  * igt@kms_pipe_stress@stress-xrgb8888-ytiled:
    - shard-dg2-set2:     [SKIP][395] ([Intel XE#4359]) -> [SKIP][396] ([Intel XE#4208])
   [395]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-463/igt@kms_pipe_stress@stress-xrgb8888-ytiled.html
   [396]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_pipe_stress@stress-xrgb8888-ytiled.html

  * igt@kms_plane_multiple@2x-tiling-y:
    - shard-dg2-set2:     [SKIP][397] ([Intel XE#5021]) -> [SKIP][398] ([Intel XE#4208])
   [397]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-434/igt@kms_plane_multiple@2x-tiling-y.html
   [398]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_plane_multiple@2x-tiling-y.html

  * igt@kms_plane_multiple@tiling-y:
    - shard-dg2-set2:     [SKIP][399] ([Intel XE#5020]) -> [SKIP][400] ([Intel XE#4208])
   [399]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-434/igt@kms_plane_multiple@tiling-y.html
   [400]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_plane_multiple@tiling-y.html

  * igt@kms_pm_backlight@fade-with-suspend:
    - shard-dg2-set2:     [SKIP][401] ([Intel XE#870]) -> [SKIP][402] ([Intel XE#4208]) +1 other test skip
   [401]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-432/igt@kms_pm_backlight@fade-with-suspend.html
   [402]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_pm_backlight@fade-with-suspend.html

  * igt@kms_pm_dc@dc5-psr:
    - shard-dg2-set2:     [SKIP][403] ([Intel XE#1129]) -> [SKIP][404] ([Intel XE#4208])
   [403]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-463/igt@kms_pm_dc@dc5-psr.html
   [404]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_pm_dc@dc5-psr.html

  * igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-fully-sf:
    - shard-dg2-set2:     [SKIP][405] ([Intel XE#1489]) -> [SKIP][406] ([Intel XE#4208]) +9 other tests skip
   [405]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-463/igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-fully-sf.html
   [406]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr2_su@page_flip-p010:
    - shard-dg2-set2:     [SKIP][407] ([Intel XE#1122]) -> [SKIP][408] ([Intel XE#4208])
   [407]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-432/igt@kms_psr2_su@page_flip-p010.html
   [408]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_psr2_su@page_flip-p010.html

  * igt@kms_psr@psr-dpms:
    - shard-dg2-set2:     [SKIP][409] ([Intel XE#2850] / [Intel XE#929]) -> [SKIP][410] ([Intel XE#2351] / [Intel XE#4208]) +3 other tests skip
   [409]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-466/igt@kms_psr@psr-dpms.html
   [410]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_psr@psr-dpms.html

  * igt@kms_psr@psr2-dpms:
    - shard-dg2-set2:     [SKIP][411] ([Intel XE#2850] / [Intel XE#929]) -> [SKIP][412] ([Intel XE#4208]) +16 other tests skip
   [411]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-434/igt@kms_psr@psr2-dpms.html
   [412]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_psr@psr2-dpms.html

  * igt@kms_psr_stress_test@invalidate-primary-flip-overlay:
    - shard-dg2-set2:     [SKIP][413] ([Intel XE#2939]) -> [SKIP][414] ([Intel XE#4208])
   [413]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-433/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html
   [414]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html

  * igt@kms_rotation_crc@primary-y-tiled-reflect-x-0:
    - shard-dg2-set2:     [SKIP][415] ([Intel XE#1127]) -> [SKIP][416] ([Intel XE#4208])
   [415]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-464/igt@kms_rotation_crc@primary-y-tiled-reflect-x-0.html
   [416]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_rotation_crc@primary-y-tiled-reflect-x-0.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270:
    - shard-dg2-set2:     [SKIP][417] ([Intel XE#3414]) -> [SKIP][418] ([Intel XE#4208])
   [417]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-463/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html
   [418]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-bmg:          [SKIP][419] ([Intel XE#2426]) -> [FAIL][420] ([Intel XE#1729])
   [419]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-8/igt@kms_tiled_display@basic-test-pattern.html
   [420]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-5/igt@kms_tiled_display@basic-test-pattern.html

  * igt@kms_tiled_display@basic-test-pattern-with-chamelium:
    - shard-bmg:          [SKIP][421] ([Intel XE#2426]) -> [SKIP][422] ([Intel XE#2509])
   [421]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-2/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
   [422]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-1/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
    - shard-dg2-set2:     [SKIP][423] ([Intel XE#1500]) -> [SKIP][424] ([Intel XE#4208])
   [423]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-432/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
   [424]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html

  * igt@kms_vrr@lobf:
    - shard-dg2-set2:     [SKIP][425] ([Intel XE#2168]) -> [SKIP][426] ([Intel XE#4208])
   [425]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-433/igt@kms_vrr@lobf.html
   [426]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@kms_vrr@lobf.html

  * igt@sriov_basic@enable-vfs-autoprobe-off:
    - shard-dg2-set2:     [SKIP][427] ([Intel XE#1091] / [Intel XE#2849]) -> [SKIP][428] ([Intel XE#4208])
   [427]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-466/igt@sriov_basic@enable-vfs-autoprobe-off.html
   [428]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@sriov_basic@enable-vfs-autoprobe-off.html

  * igt@xe_compute_preempt@compute-preempt:
    - shard-dg2-set2:     [SKIP][429] ([Intel XE#1280] / [Intel XE#455]) -> [SKIP][430] ([Intel XE#4208])
   [429]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-432/igt@xe_compute_preempt@compute-preempt.html
   [430]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_compute_preempt@compute-preempt.html

  * igt@xe_copy_basic@mem-copy-linear-0xfd:
    - shard-dg2-set2:     [SKIP][431] ([Intel XE#1123]) -> [SKIP][432] ([Intel XE#4208])
   [431]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-433/igt@xe_copy_basic@mem-copy-linear-0xfd.html
   [432]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_copy_basic@mem-copy-linear-0xfd.html

  * igt@xe_copy_basic@mem-set-linear-0xfffe:
    - shard-dg2-set2:     [SKIP][433] ([Intel XE#1126]) -> [SKIP][434] ([Intel XE#4208]) +1 other test skip
   [433]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-434/igt@xe_copy_basic@mem-set-linear-0xfffe.html
   [434]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_copy_basic@mem-set-linear-0xfffe.html

  * igt@xe_eu_stall@invalid-event-report-count:
    - shard-dg2-set2:     [SKIP][435] ([Intel XE#5626]) -> [SKIP][436] ([Intel XE#4208]) +1 other test skip
   [435]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-435/igt@xe_eu_stall@invalid-event-report-count.html
   [436]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_eu_stall@invalid-event-report-count.html

  * igt@xe_eudebug@basic-vm-bind-ufence-delay-ack:
    - shard-dg2-set2:     [SKIP][437] ([Intel XE#4837]) -> [SKIP][438] ([Intel XE#4208]) +20 other tests skip
   [437]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-432/igt@xe_eudebug@basic-vm-bind-ufence-delay-ack.html
   [438]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_eudebug@basic-vm-bind-ufence-delay-ack.html

  * igt@xe_exec_basic@multigpu-no-exec-basic-defer-bind:
    - shard-dg2-set2:     [SKIP][439] ([Intel XE#1392]) -> [SKIP][440] ([Intel XE#4208])
   [439]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-432/igt@xe_exec_basic@multigpu-no-exec-basic-defer-bind.html
   [440]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_exec_basic@multigpu-no-exec-basic-defer-bind.html

  * igt@xe_exec_fault_mode@twice-userptr-rebind-imm:
    - shard-dg2-set2:     [SKIP][441] ([Intel XE#288]) -> [SKIP][442] ([Intel XE#4208]) +33 other tests skip
   [441]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-464/igt@xe_exec_fault_mode@twice-userptr-rebind-imm.html
   [442]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_exec_fault_mode@twice-userptr-rebind-imm.html

  * igt@xe_exec_mix_modes@exec-simple-batch-store-lr:
    - shard-dg2-set2:     [SKIP][443] ([Intel XE#2360]) -> [SKIP][444] ([Intel XE#4208]) +1 other test skip
   [443]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-434/igt@xe_exec_mix_modes@exec-simple-batch-store-lr.html
   [444]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_exec_mix_modes@exec-simple-batch-store-lr.html

  * igt@xe_exec_system_allocator@threads-shared-vm-many-stride-mmap-remap-eocheck:
    - shard-dg2-set2:     [SKIP][445] ([Intel XE#4915]) -> [SKIP][446] ([Intel XE#4208]) +346 other tests skip
   [445]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-466/igt@xe_exec_system_allocator@threads-shared-vm-many-stride-mmap-remap-eocheck.html
   [446]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_exec_system_allocator@threads-shared-vm-many-stride-mmap-remap-eocheck.html

  * igt@xe_fault_injection@probe-fail-guc-xe_guc_ct_send_recv:
    - shard-lnl:          [ABORT][447] ([Intel XE#4917] / [Intel XE#5466]) -> [INCOMPLETE][448] ([Intel XE#5466])
   [447]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-2/igt@xe_fault_injection@probe-fail-guc-xe_guc_ct_send_recv.html
   [448]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-2/igt@xe_fault_injection@probe-fail-guc-xe_guc_ct_send_recv.html

  * igt@xe_huc_copy@huc_copy:
    - shard-dg2-set2:     [SKIP][449] ([Intel XE#255]) -> [SKIP][450] ([Intel XE#4208])
   [449]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-432/igt@xe_huc_copy@huc_copy.html
   [450]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_huc_copy@huc_copy.html

  * igt@xe_mmap@small-bar:
    - shard-dg2-set2:     [SKIP][451] ([Intel XE#512]) -> [SKIP][452] ([Intel XE#4208])
   [451]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-466/igt@xe_mmap@small-bar.html
   [452]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_mmap@small-bar.html

  * igt@xe_oa@buffer-size:
    - shard-dg2-set2:     [SKIP][453] ([Intel XE#5103]) -> [SKIP][454] ([Intel XE#4208])
   [453]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-466/igt@xe_oa@buffer-size.html
   [454]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_oa@buffer-size.html

  * igt@xe_oa@closed-fd-and-unmapped-access:
    - shard-dg2-set2:     [SKIP][455] ([Intel XE#3573]) -> [SKIP][456] ([Intel XE#4208]) +9 other tests skip
   [455]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-433/igt@xe_oa@closed-fd-and-unmapped-access.html
   [456]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_oa@closed-fd-and-unmapped-access.html

  * igt@xe_pat@pat-index-xehpc:
    - shard-dg2-set2:     [SKIP][457] ([Intel XE#2838] / [Intel XE#979]) -> [SKIP][458] ([Intel XE#4208])
   [457]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-463/igt@xe_pat@pat-index-xehpc.html
   [458]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_pat@pat-index-xehpc.html

  * igt@xe_pat@pat-index-xelpg:
    - shard-dg2-set2:     [SKIP][459] ([Intel XE#979]) -> [SKIP][460] ([Intel XE#4208])
   [459]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-432/igt@xe_pat@pat-index-xelpg.html
   [460]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_pat@pat-index-xelpg.html

  * igt@xe_peer2peer@read:
    - shard-dg2-set2:     [SKIP][461] ([Intel XE#1061]) -> [FAIL][462] ([Intel XE#1173])
   [461]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-432/igt@xe_peer2peer@read.html
   [462]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-433/igt@xe_peer2peer@read.html

  * igt@xe_pm@d3cold-basic-exec:
    - shard-dg2-set2:     [SKIP][463] ([Intel XE#2284] / [Intel XE#366]) -> [SKIP][464] ([Intel XE#4208]) +2 other tests skip
   [463]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-463/igt@xe_pm@d3cold-basic-exec.html
   [464]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_pm@d3cold-basic-exec.html

  * igt@xe_pm@d3cold-mocs:
    - shard-dg2-set2:     [SKIP][465] ([Intel XE#2284]) -> [SKIP][466] ([Intel XE#4208])
   [465]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-463/igt@xe_pm@d3cold-mocs.html
   [466]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_pm@d3cold-mocs.html

  * igt@xe_pm@d3hot-i2c:
    - shard-lnl:          [SKIP][467] ([Intel XE#5695]) -> [SKIP][468] ([Intel XE#5742])
   [467]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-lnl-4/igt@xe_pm@d3hot-i2c.html
   [468]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-lnl-3/igt@xe_pm@d3hot-i2c.html
    - shard-bmg:          [SKIP][469] ([Intel XE#5695]) -> [SKIP][470] ([Intel XE#5742])
   [469]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-bmg-1/igt@xe_pm@d3hot-i2c.html
   [470]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-bmg-2/igt@xe_pm@d3hot-i2c.html

  * igt@xe_pxp@pxp-stale-bo-bind-post-suspend:
    - shard-dg2-set2:     [SKIP][471] ([Intel XE#4733]) -> [SKIP][472] ([Intel XE#4208]) +4 other tests skip
   [471]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-464/igt@xe_pxp@pxp-stale-bo-bind-post-suspend.html
   [472]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_pxp@pxp-stale-bo-bind-post-suspend.html

  * igt@xe_query@multigpu-query-cs-cycles:
    - shard-dg2-set2:     [SKIP][473] ([Intel XE#944]) -> [SKIP][474] ([Intel XE#4208]) +3 other tests skip
   [473]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-436/igt@xe_query@multigpu-query-cs-cycles.html
   [474]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_query@multigpu-query-cs-cycles.html

  * igt@xe_sriov_flr@flr-vfs-parallel:
    - shard-dg2-set2:     [SKIP][475] ([Intel XE#4273]) -> [SKIP][476] ([Intel XE#4208])
   [475]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8488/shard-dg2-435/igt@xe_sriov_flr@flr-vfs-parallel.html
   [476]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_13558/shard-dg2-436/igt@xe_sriov_flr@flr-vfs-parallel.html

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

  [Intel XE#1061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1061
  [Intel XE#1091]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1091
  [Intel XE#1122]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1122
  [Intel XE#1123]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1123
  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [Intel XE#1126]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1126
  [Intel XE#1127]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1127
  [Intel XE#1129]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1129
  [Intel XE#1173]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1173
  [Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
  [Intel XE#1280]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1280
  [Intel XE#1337]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1337
  [Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
  [Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
  [Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
  [Intel XE#1428]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1428
  [Intel XE#1435]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1435
  [Intel XE#1469]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1469
  [Intel XE#1475]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1475
  [Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
  [Intel XE#1500]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1500
  [Intel XE#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
  [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#2134]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2134
  [Intel XE#2168]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2168
  [Intel XE#2191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2191
  [Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
  [Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
  [Intel XE#2291]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2291
  [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#2316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2316
  [Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
  [Intel XE#2341]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2341
  [Intel XE#2351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2351
  [Intel XE#2352]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2352
  [Intel XE#2360]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2360
  [Intel XE#2373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2373
  [Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
  [Intel XE#2457]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2457
  [Intel XE#2499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2499
  [Intel XE#2509]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2509
  [Intel XE#255]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/255
  [Intel XE#2597]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2597
  [Intel XE#2652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2652
  [Intel XE#2705]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2705
  [Intel XE#2838]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2838
  [Intel XE#2849]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2849
  [Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
  [Intel XE#288]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/288
  [Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
  [Intel XE#2893]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2893
  [Intel XE#2907]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2907
  [Intel XE#2925]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2925
  [Intel XE#2939]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2939
  [Intel XE#3009]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3009
  [Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306
  [Intel XE#307]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/307
  [Intel XE#308]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/308
  [Intel XE#3113]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3113
  [Intel XE#316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/316
  [Intel XE#3342]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3342
  [Intel XE#3414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3414
  [Intel XE#3428]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3428
  [Intel XE#3442]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3442
  [Intel XE#356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/356
  [Intel XE#3573]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3573
  [Intel XE#3650]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3650
  [Intel XE#366]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/366
  [Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
  [Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
  [Intel XE#378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/378
  [Intel XE#3862]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3862
  [Intel XE#3904]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3904
  [Intel XE#4130]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4130
  [Intel XE#4208]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4208
  [Intel XE#4212]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4212
  [Intel XE#4273]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4273
  [Intel XE#4298]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4298
  [Intel XE#4302]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4302
  [Intel XE#4345]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4345
  [Intel XE#4351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4351
  [Intel XE#4354]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4354
  [Intel XE#4356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4356
  [Intel XE#4359]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4359
  [Intel XE#4422]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4422
  [Intel XE#4459]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4459
  [Intel XE#4504]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4504
  [Intel XE#4518]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4518
  [Intel XE#4522]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4522
  [Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
  [Intel XE#4596]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4596
  [Intel XE#4608]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4608
  [Intel XE#4650]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4650
  [Intel XE#4733]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4733
  [Intel XE#4760]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4760
  [Intel XE#4819]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4819
  [Intel XE#4837]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4837
  [Intel XE#4915]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4915
  [Intel XE#4917]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4917
  [Intel XE#4943]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4943
  [Intel XE#5020]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5020
  [Intel XE#5021]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5021
  [Intel XE#5103]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5103
  [Intel XE#512]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/512
  [Intel XE#5215]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5215
  [Intel XE#5299]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5299
  [Intel XE#5300]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5300
  [Intel XE#5390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5390
  [Intel XE#5416]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5416
  [Intel XE#5425]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5425
  [Intel XE#5466]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5466
  [Intel XE#5625]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5625
  [Intel XE#5626]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5626
  [Intel XE#5695]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5695
  [Intel XE#5742]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5742
  [Intel XE#5762]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5762
  [Intel XE#5786]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5786
  [Intel XE#607]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/607
  [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#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
  [Intel XE#658]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/658
  [Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
  [Intel XE#701]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/701
  [Intel XE#718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/718
  [Intel XE#776]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/776
  [Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
  [Intel XE#827]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/827
  [Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
  [Intel XE#873]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/873
  [Intel XE#908]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/908
  [Intel XE#911]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/911
  [Intel XE#929]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/929
  [Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
  [Intel XE#979]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/979


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

  * IGT: IGT_8488 -> IGTPW_13558

  IGTPW_13558: 8c6c9e1fc13f086db69fb38214552dc243eb6dd4 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  IGT_8488: c4a9bee161f4bb74cbbf81c73b24c416ecf93976 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-3512-8463eb0394270c7f78c091aa5f5c7af0abf6fdf8: 8463eb0394270c7f78c091aa5f5c7af0abf6fdf8

== Logs ==

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

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

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

* ✗ i915.CI.Full: failure for VKMS configfs tests (rev7)
  2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
                   ` (43 preceding siblings ...)
  2025-08-07 10:16 ` ✗ Xe.CI.Full: failure " Patchwork
@ 2025-08-07 11:08 ` Patchwork
  44 siblings, 0 replies; 52+ messages in thread
From: Patchwork @ 2025-08-07 11:08 UTC (permalink / raw)
  To: José Expósito; +Cc: igt-dev

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

== Series Details ==

Series: VKMS configfs tests (rev7)
URL   : https://patchwork.freedesktop.org/series/145065/
State : failure

== Summary ==

CI Bug Log - changes from IGT_8488_full -> IGTPW_13558_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with IGTPW_13558_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_13558_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_13558/index.html

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

  Missing    (1): shard-dg2-set2 

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@gem_exec_capture@pi@vecs1:
    - shard-dg2-9:        NOTRUN -> [FAIL][1]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@gem_exec_capture@pi@vecs1.html

  
New tests
---------

  New tests have been introduced between IGT_8488_full and IGTPW_13558_full:

### New IGT tests (6) ###

  * igt@kms_cursor_crc@cursor-tearing-framebuffer-change@pipe-a-hdmi-a-2:
    - Statuses : 1 pass(s)
    - Exec time: [0.46] s

  * igt@kms_cursor_crc@cursor-tearing-framebuffer-change@pipe-a-hdmi-a-3:
    - Statuses : 1 pass(s)
    - Exec time: [0.45] s

  * igt@kms_cursor_crc@cursor-tearing-framebuffer-change@pipe-c-hdmi-a-2:
    - Statuses : 1 pass(s)
    - Exec time: [0.30] s

  * igt@kms_cursor_crc@cursor-tearing-framebuffer-change@pipe-d-hdmi-a-3:
    - Statuses : 1 pass(s)
    - Exec time: [0.32] s

  * igt@kms_cursor_crc@cursor-tearing-position-change@pipe-c-hdmi-a-1:
    - Statuses : 1 pass(s)
    - Exec time: [0.58] s

  * igt@kms_cursor_crc@cursor-tearing-position-change@pipe-c-hdmi-a-2:
    - Statuses : 1 pass(s)
    - Exec time: [0.32] s

  

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

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

### IGT changes ###

#### Issues hit ####

  * igt@api_intel_bb@blit-reloc-keep-cache:
    - shard-mtlp:         NOTRUN -> [SKIP][2] ([i915#8411])
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-1/igt@api_intel_bb@blit-reloc-keep-cache.html

  * igt@api_intel_bb@blit-reloc-purge-cache:
    - shard-dg2-9:        NOTRUN -> [SKIP][3] ([i915#8411])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@api_intel_bb@blit-reloc-purge-cache.html

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

  * igt@fbdev@info:
    - shard-glk11:        NOTRUN -> [SKIP][5] ([i915#1849])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-glk11/igt@fbdev@info.html

  * igt@fbdev@nullptr:
    - shard-rkl:          [PASS][6] -> [SKIP][7] ([i915#14544] / [i915#2582])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-2/igt@fbdev@nullptr.html
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@fbdev@nullptr.html

  * igt@gem_bad_reloc@negative-reloc-bltcopy:
    - shard-mtlp:         NOTRUN -> [SKIP][8] ([i915#3281]) +4 other tests skip
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-5/igt@gem_bad_reloc@negative-reloc-bltcopy.html

  * igt@gem_basic@multigpu-create-close:
    - shard-dg2-9:        NOTRUN -> [SKIP][9] ([i915#7697])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@gem_basic@multigpu-create-close.html

  * igt@gem_ccs@suspend-resume:
    - shard-dg1:          NOTRUN -> [SKIP][10] ([i915#9323])
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-15/igt@gem_ccs@suspend-resume.html

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

  * igt@gem_create@create-ext-cpu-access-big:
    - shard-tglu-1:       NOTRUN -> [SKIP][12] ([i915#6335])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-1/igt@gem_create@create-ext-cpu-access-big.html

  * igt@gem_ctx_isolation@preservation-s3@bcs0:
    - shard-glk:          NOTRUN -> [INCOMPLETE][13] ([i915#12353]) +1 other test incomplete
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-glk9/igt@gem_ctx_isolation@preservation-s3@bcs0.html

  * igt@gem_ctx_persistence@heartbeat-many:
    - shard-dg2:          NOTRUN -> [SKIP][14] ([i915#8555])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-10/igt@gem_ctx_persistence@heartbeat-many.html

  * igt@gem_ctx_persistence@legacy-engines-mixed:
    - shard-snb:          NOTRUN -> [SKIP][15] ([i915#1099]) +1 other test skip
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-snb5/igt@gem_ctx_persistence@legacy-engines-mixed.html

  * igt@gem_ctx_sseu@engines:
    - shard-dg2:          NOTRUN -> [SKIP][16] ([i915#280])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-5/igt@gem_ctx_sseu@engines.html
    - shard-dg1:          NOTRUN -> [SKIP][17] ([i915#280])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-16/igt@gem_ctx_sseu@engines.html
    - shard-mtlp:         NOTRUN -> [SKIP][18] ([i915#280])
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-4/igt@gem_ctx_sseu@engines.html

  * igt@gem_ctx_sseu@mmap-args:
    - shard-dg2-9:        NOTRUN -> [SKIP][19] ([i915#280])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@gem_ctx_sseu@mmap-args.html

  * igt@gem_eio@kms:
    - shard-dg2:          [PASS][20] -> [FAIL][21] ([i915#5784])
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-10/igt@gem_eio@kms.html
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-5/igt@gem_eio@kms.html

  * igt@gem_exec_balancer@bonded-dual:
    - shard-dg2:          NOTRUN -> [SKIP][22] ([i915#4771])
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-1/igt@gem_exec_balancer@bonded-dual.html

  * igt@gem_exec_balancer@bonded-false-hang:
    - shard-dg1:          NOTRUN -> [SKIP][23] ([i915#4812])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-19/igt@gem_exec_balancer@bonded-false-hang.html

  * igt@gem_exec_balancer@bonded-pair:
    - shard-dg2-9:        NOTRUN -> [SKIP][24] ([i915#4771])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@gem_exec_balancer@bonded-pair.html

  * igt@gem_exec_balancer@invalid-bonds:
    - shard-mtlp:         NOTRUN -> [SKIP][25] ([i915#4036])
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-4/igt@gem_exec_balancer@invalid-bonds.html
    - shard-dg2-9:        NOTRUN -> [SKIP][26] ([i915#4036])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@gem_exec_balancer@invalid-bonds.html

  * igt@gem_exec_balancer@parallel:
    - shard-tglu:         NOTRUN -> [SKIP][27] ([i915#4525]) +1 other test skip
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-8/igt@gem_exec_balancer@parallel.html

  * igt@gem_exec_balancer@parallel-keep-submit-fence:
    - shard-rkl:          NOTRUN -> [SKIP][28] ([i915#4525])
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-4/igt@gem_exec_balancer@parallel-keep-submit-fence.html

  * igt@gem_exec_balancer@sliced:
    - shard-dg2-9:        NOTRUN -> [SKIP][29] ([i915#4812]) +2 other tests skip
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@gem_exec_balancer@sliced.html

  * igt@gem_exec_big@single:
    - shard-tglu-1:       NOTRUN -> [ABORT][30] ([i915#11713] / [i915#14756])
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-1/igt@gem_exec_big@single.html

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

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

  * igt@gem_exec_capture@pi:
    - shard-dg2-9:        NOTRUN -> [FAIL][33] ([i915#14024])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@gem_exec_capture@pi.html

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

  * igt@gem_exec_flush@basic-wb-set-default:
    - shard-dg2:          NOTRUN -> [SKIP][35] ([i915#3539] / [i915#4852])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-7/igt@gem_exec_flush@basic-wb-set-default.html

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

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

  * igt@gem_exec_reloc@basic-gtt-wc-noreloc:
    - shard-rkl:          NOTRUN -> [SKIP][38] ([i915#3281]) +3 other tests skip
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@gem_exec_reloc@basic-gtt-wc-noreloc.html
    - shard-dg1:          NOTRUN -> [SKIP][39] ([i915#3281]) +2 other tests skip
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-16/igt@gem_exec_reloc@basic-gtt-wc-noreloc.html

  * igt@gem_exec_suspend@basic-s3-devices:
    - shard-dg1:          [PASS][40] -> [DMESG-WARN][41] ([i915#4423]) +2 other tests dmesg-warn
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg1-18/igt@gem_exec_suspend@basic-s3-devices.html
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-17/igt@gem_exec_suspend@basic-s3-devices.html

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

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

  * igt@gem_fenced_exec_thrash@no-spare-fences-busy-interruptible:
    - shard-dg2-9:        NOTRUN -> [SKIP][44] ([i915#4860])
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@gem_fenced_exec_thrash@no-spare-fences-busy-interruptible.html

  * igt@gem_lmem_evict@dontneed-evict-race:
    - shard-tglu:         NOTRUN -> [SKIP][45] ([i915#4613] / [i915#7582])
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-5/igt@gem_lmem_evict@dontneed-evict-race.html

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

  * igt@gem_lmem_swapping@heavy-verify-multi-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][47] ([i915#14544] / [i915#4613])
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@gem_lmem_swapping@heavy-verify-multi-ccs.html
    - shard-dg1:          NOTRUN -> [SKIP][48] ([i915#12193])
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-14/igt@gem_lmem_swapping@heavy-verify-multi-ccs.html

  * igt@gem_lmem_swapping@heavy-verify-multi-ccs@lmem0:
    - shard-dg1:          NOTRUN -> [SKIP][49] ([i915#4565])
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-14/igt@gem_lmem_swapping@heavy-verify-multi-ccs@lmem0.html

  * igt@gem_lmem_swapping@heavy-verify-random-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][50] ([i915#4613]) +1 other test skip
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@gem_lmem_swapping@heavy-verify-random-ccs.html
    - shard-glk:          NOTRUN -> [SKIP][51] ([i915#4613])
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-glk2/igt@gem_lmem_swapping@heavy-verify-random-ccs.html

  * igt@gem_lmem_swapping@parallel-random-verify:
    - shard-tglu:         NOTRUN -> [SKIP][52] ([i915#4613]) +3 other tests skip
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-9/igt@gem_lmem_swapping@parallel-random-verify.html

  * igt@gem_lmem_swapping@smem-oom:
    - shard-mtlp:         NOTRUN -> [SKIP][53] ([i915#4613]) +1 other test skip
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-2/igt@gem_lmem_swapping@smem-oom.html

  * igt@gem_media_vme:
    - shard-dg2:          NOTRUN -> [SKIP][54] ([i915#284])
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-2/igt@gem_media_vme.html

  * igt@gem_mmap_gtt@basic-read:
    - shard-dg2-9:        NOTRUN -> [SKIP][55] ([i915#4077]) +9 other tests skip
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@gem_mmap_gtt@basic-read.html

  * igt@gem_mmap_gtt@close-race:
    - shard-rkl:          NOTRUN -> [DMESG-WARN][56] ([i915#12964]) +8 other tests dmesg-warn
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@gem_mmap_gtt@close-race.html

  * igt@gem_mmap_gtt@zero-extend:
    - shard-dg2:          NOTRUN -> [SKIP][57] ([i915#4077]) +11 other tests skip
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-5/igt@gem_mmap_gtt@zero-extend.html

  * igt@gem_mmap_wc@close:
    - shard-dg2:          NOTRUN -> [SKIP][58] ([i915#4083]) +5 other tests skip
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-3/igt@gem_mmap_wc@close.html

  * igt@gem_mmap_wc@read:
    - shard-dg1:          NOTRUN -> [SKIP][59] ([i915#4083]) +1 other test skip
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-14/igt@gem_mmap_wc@read.html
    - shard-mtlp:         NOTRUN -> [SKIP][60] ([i915#4083]) +1 other test skip
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-1/igt@gem_mmap_wc@read.html

  * igt@gem_partial_pwrite_pread@reads-display:
    - shard-dg2-9:        NOTRUN -> [SKIP][61] ([i915#3282]) +3 other tests skip
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@gem_partial_pwrite_pread@reads-display.html

  * igt@gem_partial_pwrite_pread@write-display:
    - shard-dg1:          NOTRUN -> [SKIP][62] ([i915#3282]) +2 other tests skip
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-12/igt@gem_partial_pwrite_pread@write-display.html

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

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

  * igt@gem_pwrite@basic-exhaustion:
    - shard-glk11:        NOTRUN -> [WARN][65] ([i915#14702] / [i915#2658])
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-glk11/igt@gem_pwrite@basic-exhaustion.html

  * igt@gem_pxp@create-regular-buffer:
    - shard-rkl:          NOTRUN -> [TIMEOUT][66] ([i915#12917] / [i915#12964])
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@gem_pxp@create-regular-buffer.html

  * igt@gem_pxp@display-protected-crc:
    - shard-dg2:          NOTRUN -> [SKIP][67] ([i915#4270]) +5 other tests skip
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-3/igt@gem_pxp@display-protected-crc.html

  * igt@gem_pxp@hw-rejects-pxp-buffer:
    - shard-mtlp:         NOTRUN -> [SKIP][68] ([i915#13398])
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-1/igt@gem_pxp@hw-rejects-pxp-buffer.html

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

  * igt@gem_pxp@reject-modify-context-protection-off-3:
    - shard-dg2-9:        NOTRUN -> [SKIP][70] ([i915#4270]) +1 other test skip
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@gem_pxp@reject-modify-context-protection-off-3.html

  * igt@gem_pxp@verify-pxp-stale-buf-optout-execution:
    - shard-rkl:          [PASS][71] -> [TIMEOUT][72] ([i915#12917] / [i915#12964]) +1 other test timeout
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-8/igt@gem_pxp@verify-pxp-stale-buf-optout-execution.html
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@gem_pxp@verify-pxp-stale-buf-optout-execution.html

  * igt@gem_readwrite@read-write:
    - shard-dg2:          NOTRUN -> [SKIP][73] ([i915#3282]) +4 other tests skip
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-5/igt@gem_readwrite@read-write.html

  * igt@gem_readwrite@write-bad-handle:
    - shard-mtlp:         NOTRUN -> [SKIP][74] ([i915#3282])
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-4/igt@gem_readwrite@write-bad-handle.html

  * igt@gem_render_copy@linear-to-vebox-yf-tiled:
    - shard-dg2-9:        NOTRUN -> [SKIP][75] ([i915#5190] / [i915#8428]) +2 other tests skip
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@gem_render_copy@linear-to-vebox-yf-tiled.html

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

  * igt@gem_render_copy@y-tiled-to-vebox-y-tiled:
    - shard-dg2:          NOTRUN -> [SKIP][77] ([i915#5190] / [i915#8428]) +7 other tests skip
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-2/igt@gem_render_copy@y-tiled-to-vebox-y-tiled.html

  * igt@gem_set_tiling_vs_blt@untiled-to-tiled:
    - shard-dg2:          NOTRUN -> [SKIP][78] ([i915#4079]) +1 other test skip
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-3/igt@gem_set_tiling_vs_blt@untiled-to-tiled.html
    - shard-rkl:          NOTRUN -> [SKIP][79] ([i915#8411]) +1 other test skip
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@gem_set_tiling_vs_blt@untiled-to-tiled.html

  * igt@gem_set_tiling_vs_gtt:
    - shard-dg1:          NOTRUN -> [SKIP][80] ([i915#4079]) +1 other test skip
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-17/igt@gem_set_tiling_vs_gtt.html
    - shard-mtlp:         NOTRUN -> [SKIP][81] ([i915#4079]) +1 other test skip
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-7/igt@gem_set_tiling_vs_gtt.html

  * igt@gem_softpin@evict-snoop:
    - shard-dg2:          NOTRUN -> [SKIP][82] ([i915#4885])
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-2/igt@gem_softpin@evict-snoop.html

  * igt@gem_softpin@evict-snoop-interruptible:
    - shard-rkl:          NOTRUN -> [SKIP][83] ([i915#14544]) +10 other tests skip
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@gem_softpin@evict-snoop-interruptible.html

  * igt@gem_tiled_pread_pwrite:
    - shard-dg2-9:        NOTRUN -> [SKIP][84] ([i915#4079])
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@gem_tiled_pread_pwrite.html

  * igt@gem_userptr_blits@create-destroy-unsync:
    - shard-dg2:          NOTRUN -> [SKIP][85] ([i915#3297]) +3 other tests skip
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-8/igt@gem_userptr_blits@create-destroy-unsync.html

  * igt@gem_userptr_blits@forbidden-operations:
    - shard-rkl:          NOTRUN -> [SKIP][86] ([i915#3282] / [i915#3297])
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@gem_userptr_blits@forbidden-operations.html

  * igt@gem_userptr_blits@map-fixed-invalidate-busy:
    - shard-dg2-9:        NOTRUN -> [SKIP][87] ([i915#3297] / [i915#4880])
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@gem_userptr_blits@map-fixed-invalidate-busy.html

  * igt@gem_userptr_blits@map-fixed-invalidate-overlap-busy:
    - shard-dg2:          NOTRUN -> [SKIP][88] ([i915#3297] / [i915#4880])
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-8/igt@gem_userptr_blits@map-fixed-invalidate-overlap-busy.html

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

  * igt@gem_userptr_blits@unsync-overlap:
    - shard-tglu-1:       NOTRUN -> [SKIP][90] ([i915#3297])
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-1/igt@gem_userptr_blits@unsync-overlap.html
    - shard-dg2-9:        NOTRUN -> [SKIP][91] ([i915#3297]) +1 other test skip
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@gem_userptr_blits@unsync-overlap.html

  * igt@gem_userptr_blits@unsync-unmap:
    - shard-tglu:         NOTRUN -> [SKIP][92] ([i915#3297]) +1 other test skip
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-10/igt@gem_userptr_blits@unsync-unmap.html

  * igt@gem_userptr_blits@unsync-unmap-after-close:
    - shard-mtlp:         NOTRUN -> [SKIP][93] ([i915#3297])
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-6/igt@gem_userptr_blits@unsync-unmap-after-close.html

  * igt@gem_workarounds@suspend-resume-context:
    - shard-glk:          NOTRUN -> [INCOMPLETE][94] ([i915#13356])
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-glk2/igt@gem_workarounds@suspend-resume-context.html

  * igt@gem_workarounds@suspend-resume-fd:
    - shard-dg2:          [PASS][95] -> [ABORT][96] ([i915#8213])
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-2/igt@gem_workarounds@suspend-resume-fd.html
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-10/igt@gem_workarounds@suspend-resume-fd.html

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

  * igt@gen9_exec_parse@allowed-single:
    - shard-mtlp:         NOTRUN -> [SKIP][98] ([i915#2856]) +1 other test skip
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-1/igt@gen9_exec_parse@allowed-single.html
    - shard-glk11:        NOTRUN -> [ABORT][99] ([i915#5566])
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-glk11/igt@gen9_exec_parse@allowed-single.html

  * igt@gen9_exec_parse@basic-rejected-ctx-param:
    - shard-dg2-9:        NOTRUN -> [SKIP][100] ([i915#2856]) +2 other tests skip
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@gen9_exec_parse@basic-rejected-ctx-param.html

  * igt@gen9_exec_parse@batch-without-end:
    - shard-tglu-1:       NOTRUN -> [SKIP][101] ([i915#2527] / [i915#2856])
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-1/igt@gen9_exec_parse@batch-without-end.html

  * igt@gen9_exec_parse@bb-oversize:
    - shard-rkl:          NOTRUN -> [SKIP][102] ([i915#2527]) +1 other test skip
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-7/igt@gen9_exec_parse@bb-oversize.html
    - shard-tglu:         NOTRUN -> [SKIP][103] ([i915#2527] / [i915#2856]) +1 other test skip
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-5/igt@gen9_exec_parse@bb-oversize.html

  * igt@gen9_exec_parse@shadow-peek:
    - shard-dg2:          NOTRUN -> [SKIP][104] ([i915#2856]) +2 other tests skip
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-2/igt@gen9_exec_parse@shadow-peek.html

  * igt@i915_drm_fdinfo@all-busy-idle-check-all:
    - shard-dg2:          NOTRUN -> [SKIP][105] ([i915#14123])
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-5/igt@i915_drm_fdinfo@all-busy-idle-check-all.html
    - shard-dg1:          NOTRUN -> [SKIP][106] ([i915#14123])
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-16/igt@i915_drm_fdinfo@all-busy-idle-check-all.html

  * igt@i915_drm_fdinfo@busy:
    - shard-dg2-9:        NOTRUN -> [SKIP][107] ([i915#14073]) +7 other tests skip
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@i915_drm_fdinfo@busy.html

  * igt@i915_drm_fdinfo@busy-check-all@bcs0:
    - shard-dg2-9:        NOTRUN -> [SKIP][108] ([i915#11527]) +7 other tests skip
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@i915_drm_fdinfo@busy-check-all@bcs0.html

  * igt@i915_drm_fdinfo@busy-hang@vcs0:
    - shard-dg2:          NOTRUN -> [SKIP][109] ([i915#14073]) +7 other tests skip
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-7/igt@i915_drm_fdinfo@busy-hang@vcs0.html

  * igt@i915_drm_fdinfo@busy-idle-check-all@vcs0:
    - shard-dg2:          NOTRUN -> [SKIP][110] ([i915#11527]) +7 other tests skip
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-3/igt@i915_drm_fdinfo@busy-idle-check-all@vcs0.html

  * igt@i915_drm_fdinfo@virtual-busy-hang:
    - shard-dg1:          NOTRUN -> [SKIP][111] ([i915#14118])
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-14/igt@i915_drm_fdinfo@virtual-busy-hang.html

  * igt@i915_drm_fdinfo@virtual-busy-idle:
    - shard-dg2:          NOTRUN -> [SKIP][112] ([i915#14118]) +1 other test skip
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-6/igt@i915_drm_fdinfo@virtual-busy-idle.html

  * igt@i915_fb_tiling@basic-x-tiling:
    - shard-dg2-9:        NOTRUN -> [SKIP][113] ([i915#13786])
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@i915_fb_tiling@basic-x-tiling.html

  * igt@i915_module_load@reload-no-display:
    - shard-dg2:          NOTRUN -> [DMESG-WARN][114] ([i915#13029] / [i915#14545])
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-4/igt@i915_module_load@reload-no-display.html

  * igt@i915_pm_rps@thresholds:
    - shard-dg2-9:        NOTRUN -> [SKIP][115] ([i915#11681])
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@i915_pm_rps@thresholds.html

  * igt@i915_pm_rps@thresholds-park:
    - shard-dg2:          NOTRUN -> [SKIP][116] ([i915#11681])
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-10/igt@i915_pm_rps@thresholds-park.html

  * igt@i915_pm_sseu@full-enable:
    - shard-dg2-9:        NOTRUN -> [SKIP][117] ([i915#4387])
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@i915_pm_sseu@full-enable.html

  * igt@i915_query@query-topology-coherent-slice-mask:
    - shard-dg2-9:        NOTRUN -> [SKIP][118] ([i915#6188])
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@i915_query@query-topology-coherent-slice-mask.html

  * igt@i915_suspend@fence-restore-tiled2untiled:
    - shard-rkl:          [PASS][119] -> [INCOMPLETE][120] ([i915#4817])
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-2/igt@i915_suspend@fence-restore-tiled2untiled.html
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-7/igt@i915_suspend@fence-restore-tiled2untiled.html

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

  * igt@kms_addfb_basic@addfb25-y-tiled-small-legacy:
    - shard-dg2:          NOTRUN -> [SKIP][122] ([i915#5190]) +3 other tests skip
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-1/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html

  * igt@kms_addfb_basic@basic-y-tiled-legacy:
    - shard-dg2:          NOTRUN -> [SKIP][123] ([i915#4215] / [i915#5190])
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-11/igt@kms_addfb_basic@basic-y-tiled-legacy.html

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

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

  * igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels:
    - shard-dg2:          NOTRUN -> [SKIP][127] ([i915#1769] / [i915#3555])
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-11/igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels.html
    - shard-dg1:          NOTRUN -> [SKIP][128] ([i915#1769] / [i915#3555])
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-15/igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels.html

  * igt@kms_big_fb@4-tiled-64bpp-rotate-180:
    - shard-tglu-1:       NOTRUN -> [SKIP][129] ([i915#5286]) +1 other test skip
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-1/igt@kms_big_fb@4-tiled-64bpp-rotate-180.html

  * igt@kms_big_fb@4-tiled-8bpp-rotate-0:
    - shard-dg1:          NOTRUN -> [SKIP][130] ([i915#4538] / [i915#5286])
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-13/igt@kms_big_fb@4-tiled-8bpp-rotate-0.html

  * igt@kms_big_fb@4-tiled-8bpp-rotate-90:
    - shard-rkl:          NOTRUN -> [SKIP][131] ([i915#5286]) +1 other test skip
   [131]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-4/igt@kms_big_fb@4-tiled-8bpp-rotate-90.html

  * igt@kms_big_fb@4-tiled-addfb:
    - shard-dg1:          NOTRUN -> [SKIP][132] ([i915#5286])
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-13/igt@kms_big_fb@4-tiled-addfb.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip:
    - shard-tglu:         NOTRUN -> [SKIP][133] ([i915#5286]) +3 other tests skip
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-6/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip.html

  * igt@kms_big_fb@linear-16bpp-rotate-270:
    - shard-rkl:          NOTRUN -> [SKIP][134] ([i915#3638])
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_big_fb@linear-16bpp-rotate-270.html

  * igt@kms_big_fb@linear-64bpp-rotate-90:
    - shard-dg1:          NOTRUN -> [SKIP][135] ([i915#3638]) +1 other test skip
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-18/igt@kms_big_fb@linear-64bpp-rotate-90.html

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

  * igt@kms_big_fb@yf-tiled-64bpp-rotate-270:
    - shard-dg2-9:        NOTRUN -> [SKIP][137] ([i915#4538] / [i915#5190]) +4 other tests skip
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_big_fb@yf-tiled-64bpp-rotate-270.html

  * igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow:
    - shard-dg2-9:        NOTRUN -> [SKIP][138] ([i915#5190])
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow.html

  * igt@kms_big_fb@yf-tiled-addfb-size-overflow:
    - shard-rkl:          NOTRUN -> [SKIP][139] +7 other tests skip
   [139]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-4/igt@kms_big_fb@yf-tiled-addfb-size-overflow.html
    - shard-mtlp:         NOTRUN -> [SKIP][140] ([i915#6187])
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-2/igt@kms_big_fb@yf-tiled-addfb-size-overflow.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-async-flip:
    - shard-dg1:          NOTRUN -> [SKIP][141] ([i915#4538])
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-16/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html

  * igt@kms_ccs@bad-aux-stride-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][142] ([i915#14098] / [i915#6095]) +42 other tests skip
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@kms_ccs@bad-aux-stride-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-1.html

  * igt@kms_ccs@bad-aux-stride-yf-tiled-ccs@pipe-d-hdmi-a-2:
    - shard-dg2:          NOTRUN -> [SKIP][143] ([i915#10307] / [i915#6095]) +181 other tests skip
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-2/igt@kms_ccs@bad-aux-stride-yf-tiled-ccs@pipe-d-hdmi-a-2.html

  * igt@kms_ccs@ccs-on-another-bo-y-tiled-ccs@pipe-b-hdmi-a-3:
    - shard-dg1:          NOTRUN -> [SKIP][144] ([i915#6095]) +132 other tests skip
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-13/igt@kms_ccs@ccs-on-another-bo-y-tiled-ccs@pipe-b-hdmi-a-3.html

  * igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-mc-ccs@pipe-b-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][145] ([i915#6095]) +19 other tests skip
   [145]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-8/igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-mc-ccs@pipe-b-edp-1.html

  * igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-mc-ccs@pipe-b-hdmi-a-1:
    - shard-tglu:         NOTRUN -> [SKIP][146] ([i915#6095]) +34 other tests skip
   [146]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-9/igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-mc-ccs@pipe-b-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-mc-ccs:
    - shard-dg2-9:        NOTRUN -> [SKIP][147] ([i915#10307] / [i915#10434] / [i915#6095])
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-mc-ccs.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][148] ([i915#6095]) +50 other tests skip
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2.html

  * igt@kms_ccs@crc-primary-rotation-180-yf-tiled-ccs@pipe-d-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][149] ([i915#10307] / [i915#10434] / [i915#6095]) +1 other test skip
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-4/igt@kms_ccs@crc-primary-rotation-180-yf-tiled-ccs@pipe-d-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-a-hdmi-a-2:
    - shard-glk:          NOTRUN -> [INCOMPLETE][150] ([i915#12796])
   [150]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-glk6/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-a-hdmi-a-2.html

  * igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs@pipe-b-dp-3:
    - shard-dg2:          NOTRUN -> [SKIP][151] ([i915#6095]) +12 other tests skip
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-10/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs@pipe-b-dp-3.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][152] ([i915#12313])
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs.html
    - shard-dg1:          NOTRUN -> [SKIP][153] ([i915#12313])
   [153]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-16/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs.html
    - shard-tglu:         NOTRUN -> [SKIP][154] ([i915#12313])
   [154]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-8/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs.html
    - shard-mtlp:         NOTRUN -> [SKIP][155] ([i915#12313])
   [155]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-7/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs.html
    - shard-dg2-9:        NOTRUN -> [SKIP][156] ([i915#12313])
   [156]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs.html

  * igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][157] ([i915#12313]) +1 other test skip
   [157]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-1/igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs.html

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc:
    - shard-tglu-1:       NOTRUN -> [SKIP][158] ([i915#6095]) +19 other tests skip
   [158]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-1/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc.html

  * igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-c-hdmi-a-2:
    - shard-dg2-9:        NOTRUN -> [SKIP][159] ([i915#10307] / [i915#6095]) +48 other tests skip
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-c-hdmi-a-2.html

  * igt@kms_cdclk@plane-scaling:
    - shard-rkl:          NOTRUN -> [SKIP][160] ([i915#3742])
   [160]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-4/igt@kms_cdclk@plane-scaling.html
    - shard-dg1:          NOTRUN -> [SKIP][161] ([i915#3742])
   [161]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-17/igt@kms_cdclk@plane-scaling.html
    - shard-tglu:         NOTRUN -> [SKIP][162] ([i915#3742])
   [162]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-7/igt@kms_cdclk@plane-scaling.html

  * igt@kms_cdclk@plane-scaling@pipe-c-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][163] ([i915#13783]) +4 other tests skip
   [163]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-7/igt@kms_cdclk@plane-scaling@pipe-c-edp-1.html

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

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

  * igt@kms_chamelium_audio@dp-audio-edid:
    - shard-rkl:          NOTRUN -> [SKIP][166] ([i915#11151] / [i915#14544] / [i915#7828])
   [166]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_chamelium_audio@dp-audio-edid.html

  * igt@kms_chamelium_edid@hdmi-edid-stress-resolution-non-4k:
    - shard-dg2:          NOTRUN -> [SKIP][167] ([i915#11151] / [i915#7828]) +11 other tests skip
   [167]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-11/igt@kms_chamelium_edid@hdmi-edid-stress-resolution-non-4k.html

  * igt@kms_chamelium_edid@hdmi-mode-timings:
    - shard-rkl:          NOTRUN -> [SKIP][168] ([i915#11151] / [i915#7828]) +2 other tests skip
   [168]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-7/igt@kms_chamelium_edid@hdmi-mode-timings.html

  * igt@kms_chamelium_frames@hdmi-aspect-ratio:
    - shard-snb:          NOTRUN -> [SKIP][169] +42 other tests skip
   [169]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-snb7/igt@kms_chamelium_frames@hdmi-aspect-ratio.html

  * igt@kms_chamelium_hpd@dp-hpd-storm-disable:
    - shard-dg2-9:        NOTRUN -> [SKIP][170] ([i915#11151] / [i915#7828]) +3 other tests skip
   [170]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_chamelium_hpd@dp-hpd-storm-disable.html

  * igt@kms_chamelium_hpd@hdmi-hpd-with-enabled-mode:
    - shard-tglu-1:       NOTRUN -> [SKIP][171] ([i915#11151] / [i915#7828]) +2 other tests skip
   [171]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-1/igt@kms_chamelium_hpd@hdmi-hpd-with-enabled-mode.html

  * igt@kms_chamelium_hpd@vga-hpd-for-each-pipe:
    - shard-dg1:          NOTRUN -> [SKIP][172] ([i915#11151] / [i915#7828]) +5 other tests skip
   [172]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-18/igt@kms_chamelium_hpd@vga-hpd-for-each-pipe.html

  * igt@kms_chamelium_hpd@vga-hpd-without-ddc:
    - shard-tglu:         NOTRUN -> [SKIP][173] ([i915#11151] / [i915#7828]) +4 other tests skip
   [173]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-8/igt@kms_chamelium_hpd@vga-hpd-without-ddc.html

  * igt@kms_color@gamma:
    - shard-rkl:          [PASS][174] -> [SKIP][175] ([i915#12655] / [i915#14544]) +2 other tests skip
   [174]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-5/igt@kms_color@gamma.html
   [175]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_color@gamma.html

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

  * igt@kms_content_protection@dp-mst-type-0:
    - shard-tglu:         NOTRUN -> [SKIP][178] ([i915#3116] / [i915#3299])
   [178]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-3/igt@kms_content_protection@dp-mst-type-0.html

  * igt@kms_content_protection@dp-mst-type-1:
    - shard-dg2:          NOTRUN -> [SKIP][179] ([i915#3299])
   [179]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-2/igt@kms_content_protection@dp-mst-type-1.html
    - shard-dg1:          NOTRUN -> [SKIP][180] ([i915#3299])
   [180]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-18/igt@kms_content_protection@dp-mst-type-1.html

  * igt@kms_content_protection@lic-type-1:
    - shard-dg2-9:        NOTRUN -> [SKIP][181] ([i915#9424])
   [181]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_content_protection@lic-type-1.html

  * igt@kms_content_protection@mei-interface:
    - shard-dg2:          NOTRUN -> [SKIP][182] ([i915#9424])
   [182]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-10/igt@kms_content_protection@mei-interface.html

  * igt@kms_content_protection@type1:
    - shard-dg2:          NOTRUN -> [SKIP][183] ([i915#7118] / [i915#9424])
   [183]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-7/igt@kms_content_protection@type1.html

  * igt@kms_cursor_crc@cursor-offscreen-64x21:
    - shard-mtlp:         NOTRUN -> [SKIP][184] ([i915#8814]) +1 other test skip
   [184]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-7/igt@kms_cursor_crc@cursor-offscreen-64x21.html

  * igt@kms_cursor_crc@cursor-onscreen-128x42:
    - shard-rkl:          [PASS][185] -> [FAIL][186] ([i915#13566])
   [185]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-7/igt@kms_cursor_crc@cursor-onscreen-128x42.html
   [186]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@kms_cursor_crc@cursor-onscreen-128x42.html

  * igt@kms_cursor_crc@cursor-onscreen-32x10:
    - shard-mtlp:         NOTRUN -> [SKIP][187] ([i915#3555] / [i915#8814])
   [187]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-4/igt@kms_cursor_crc@cursor-onscreen-32x10.html
    - shard-rkl:          NOTRUN -> [SKIP][188] ([i915#3555])
   [188]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-7/igt@kms_cursor_crc@cursor-onscreen-32x10.html

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

  * igt@kms_cursor_crc@cursor-onscreen-max-size:
    - shard-dg1:          NOTRUN -> [SKIP][190] ([i915#3555]) +1 other test skip
   [190]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-17/igt@kms_cursor_crc@cursor-onscreen-max-size.html

  * igt@kms_cursor_crc@cursor-random-512x170:
    - shard-rkl:          NOTRUN -> [SKIP][191] ([i915#13049])
   [191]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-4/igt@kms_cursor_crc@cursor-random-512x170.html
    - shard-tglu:         NOTRUN -> [SKIP][192] ([i915#13049])
   [192]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-7/igt@kms_cursor_crc@cursor-random-512x170.html

  * igt@kms_cursor_crc@cursor-random-512x512:
    - shard-tglu-1:       NOTRUN -> [SKIP][193] ([i915#13049])
   [193]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-1/igt@kms_cursor_crc@cursor-random-512x512.html

  * igt@kms_cursor_crc@cursor-rapid-movement-32x32:
    - shard-dg2:          NOTRUN -> [SKIP][194] ([i915#3555]) +5 other tests skip
   [194]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-5/igt@kms_cursor_crc@cursor-rapid-movement-32x32.html

  * igt@kms_cursor_crc@cursor-rapid-movement-512x512:
    - shard-mtlp:         NOTRUN -> [SKIP][195] ([i915#13049])
   [195]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-4/igt@kms_cursor_crc@cursor-rapid-movement-512x512.html
    - shard-dg2-9:        NOTRUN -> [SKIP][196] ([i915#13049]) +2 other tests skip
   [196]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_cursor_crc@cursor-rapid-movement-512x512.html

  * igt@kms_cursor_crc@cursor-sliding-64x21@pipe-a-hdmi-a-1:
    - shard-tglu:         [PASS][197] -> [FAIL][198] ([i915#13566]) +3 other tests fail
   [197]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-tglu-8/igt@kms_cursor_crc@cursor-sliding-64x21@pipe-a-hdmi-a-1.html
   [198]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-4/igt@kms_cursor_crc@cursor-sliding-64x21@pipe-a-hdmi-a-1.html

  * igt@kms_cursor_crc@cursor-sliding-64x21@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [FAIL][199] ([i915#13566]) +3 other tests fail
   [199]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_cursor_crc@cursor-sliding-64x21@pipe-a-hdmi-a-2.html

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

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

  * igt@kms_cursor_edge_walk@64x64-left-edge:
    - shard-rkl:          [PASS][202] -> [DMESG-WARN][203] ([i915#12964]) +42 other tests dmesg-warn
   [202]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-7/igt@kms_cursor_edge_walk@64x64-left-edge.html
   [203]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-4/igt@kms_cursor_edge_walk@64x64-left-edge.html

  * igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic:
    - shard-dg2-9:        NOTRUN -> [SKIP][204] ([i915#13046] / [i915#5354]) +3 other tests skip
   [204]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic:
    - shard-dg2:          NOTRUN -> [SKIP][205] ([i915#4103] / [i915#4213]) +1 other test skip
   [205]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-7/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html
    - shard-dg1:          NOTRUN -> [SKIP][206] ([i915#4103] / [i915#4213])
   [206]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-14/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][207] ([i915#4103])
   [207]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
    - shard-tglu:         NOTRUN -> [SKIP][208] ([i915#4103]) +1 other test skip
   [208]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-7/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html

  * igt@kms_cursor_legacy@basic-flip-after-cursor-atomic:
    - shard-rkl:          [PASS][209] -> [SKIP][210] ([i915#11190] / [i915#14544]) +1 other test skip
   [209]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-5/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html
   [210]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html

  * igt@kms_cursor_legacy@basic-flip-before-cursor-varying-size:
    - shard-glk10:        NOTRUN -> [SKIP][211] ([i915#11190]) +1 other test skip
   [211]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-glk10/igt@kms_cursor_legacy@basic-flip-before-cursor-varying-size.html

  * igt@kms_cursor_legacy@cursorb-vs-flipa-legacy:
    - shard-mtlp:         NOTRUN -> [SKIP][212] ([i915#9809]) +2 other tests skip
   [212]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-8/igt@kms_cursor_legacy@cursorb-vs-flipa-legacy.html

  * igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size:
    - shard-dg2:          NOTRUN -> [SKIP][213] ([i915#13046] / [i915#5354]) +4 other tests skip
   [213]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-3/igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size.html

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

  * igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot:
    - shard-dg2:          NOTRUN -> [SKIP][215] ([i915#9067])
   [215]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-2/igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size:
    - shard-dg2-9:        NOTRUN -> [SKIP][216] ([i915#4103] / [i915#4213])
   [216]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html

  * igt@kms_dirtyfb@drrs-dirtyfb-ioctl:
    - shard-dg2:          NOTRUN -> [SKIP][217] ([i915#9833])
   [217]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-4/igt@kms_dirtyfb@drrs-dirtyfb-ioctl.html
    - shard-dg1:          NOTRUN -> [SKIP][218] ([i915#9723])
   [218]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-19/igt@kms_dirtyfb@drrs-dirtyfb-ioctl.html

  * igt@kms_dp_link_training@uhbr-sst:
    - shard-dg2-9:        NOTRUN -> [SKIP][219] ([i915#13748])
   [219]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_dp_link_training@uhbr-sst.html

  * igt@kms_dp_linktrain_fallback@dsc-fallback:
    - shard-dg2:          NOTRUN -> [SKIP][220] ([i915#13707])
   [220]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-4/igt@kms_dp_linktrain_fallback@dsc-fallback.html
    - shard-rkl:          NOTRUN -> [SKIP][221] ([i915#13707])
   [221]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-4/igt@kms_dp_linktrain_fallback@dsc-fallback.html
    - shard-dg1:          NOTRUN -> [SKIP][222] ([i915#13707])
   [222]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-17/igt@kms_dp_linktrain_fallback@dsc-fallback.html
    - shard-tglu:         NOTRUN -> [SKIP][223] ([i915#13707])
   [223]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-7/igt@kms_dp_linktrain_fallback@dsc-fallback.html
    - shard-mtlp:         NOTRUN -> [SKIP][224] ([i915#13707]) +1 other test skip
   [224]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-7/igt@kms_dp_linktrain_fallback@dsc-fallback.html

  * igt@kms_draw_crc@draw-method-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][225] ([i915#8812])
   [225]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-8/igt@kms_draw_crc@draw-method-mmap-gtt.html

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

  * igt@kms_dsc@dsc-with-formats:
    - shard-dg2-9:        NOTRUN -> [SKIP][227] ([i915#3555] / [i915#3840]) +1 other test skip
   [227]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_dsc@dsc-with-formats.html

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

  * igt@kms_fbcon_fbt@psr:
    - shard-dg2:          NOTRUN -> [SKIP][230] ([i915#3469])
   [230]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-8/igt@kms_fbcon_fbt@psr.html

  * igt@kms_feature_discovery@chamelium:
    - shard-dg2:          NOTRUN -> [SKIP][231] ([i915#4854])
   [231]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-11/igt@kms_feature_discovery@chamelium.html

  * igt@kms_feature_discovery@display-3x:
    - shard-dg2:          NOTRUN -> [SKIP][232] ([i915#1839]) +2 other tests skip
   [232]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-4/igt@kms_feature_discovery@display-3x.html
    - shard-rkl:          NOTRUN -> [SKIP][233] ([i915#14544] / [i915#1839])
   [233]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_feature_discovery@display-3x.html
    - shard-dg1:          NOTRUN -> [SKIP][234] ([i915#1839]) +1 other test skip
   [234]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-19/igt@kms_feature_discovery@display-3x.html
    - shard-tglu:         NOTRUN -> [SKIP][235] ([i915#1839]) +1 other test skip
   [235]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-2/igt@kms_feature_discovery@display-3x.html
    - shard-mtlp:         NOTRUN -> [SKIP][236] ([i915#1839])
   [236]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-6/igt@kms_feature_discovery@display-3x.html

  * igt@kms_feature_discovery@psr2:
    - shard-dg2:          NOTRUN -> [SKIP][237] ([i915#658])
   [237]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-8/igt@kms_feature_discovery@psr2.html

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

  * igt@kms_flip@2x-flip-vs-dpms-on-nop-interruptible:
    - shard-mtlp:         NOTRUN -> [SKIP][239] ([i915#9934])
   [239]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-3/igt@kms_flip@2x-flip-vs-dpms-on-nop-interruptible.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible:
    - shard-mtlp:         NOTRUN -> [SKIP][240] ([i915#3637] / [i915#9934]) +4 other tests skip
   [240]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-8/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html

  * igt@kms_flip@2x-flip-vs-fences-interruptible:
    - shard-dg2:          NOTRUN -> [SKIP][241] ([i915#8381]) +1 other test skip
   [241]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-3/igt@kms_flip@2x-flip-vs-fences-interruptible.html
    - shard-dg1:          NOTRUN -> [SKIP][242] ([i915#8381])
   [242]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-15/igt@kms_flip@2x-flip-vs-fences-interruptible.html

  * igt@kms_flip@2x-flip-vs-panning:
    - shard-rkl:          NOTRUN -> [SKIP][243] ([i915#9934]) +5 other tests skip
   [243]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-4/igt@kms_flip@2x-flip-vs-panning.html
    - shard-tglu-1:       NOTRUN -> [SKIP][244] ([i915#3637] / [i915#9934]) +2 other tests skip
   [244]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-1/igt@kms_flip@2x-flip-vs-panning.html

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

  * igt@kms_flip@2x-flip-vs-suspend:
    - shard-glk:          NOTRUN -> [INCOMPLETE][246] ([i915#12745] / [i915#4839])
   [246]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-glk2/igt@kms_flip@2x-flip-vs-suspend.html

  * igt@kms_flip@2x-flip-vs-suspend@ab-hdmi-a1-hdmi-a2:
    - shard-glk:          NOTRUN -> [INCOMPLETE][247] ([i915#4839])
   [247]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-glk2/igt@kms_flip@2x-flip-vs-suspend@ab-hdmi-a1-hdmi-a2.html

  * igt@kms_flip@2x-flip-vs-wf_vblank:
    - shard-dg1:          NOTRUN -> [SKIP][248] ([i915#9934]) +1 other test skip
   [248]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-14/igt@kms_flip@2x-flip-vs-wf_vblank.html

  * igt@kms_flip@2x-modeset-vs-vblank-race:
    - shard-dg2:          NOTRUN -> [SKIP][249] ([i915#9934]) +6 other tests skip
   [249]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-2/igt@kms_flip@2x-modeset-vs-vblank-race.html

  * igt@kms_flip@2x-plain-flip-interruptible:
    - shard-rkl:          NOTRUN -> [SKIP][250] ([i915#14544] / [i915#9934])
   [250]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_flip@2x-plain-flip-interruptible.html

  * igt@kms_flip@dpms-off-confusion-interruptible:
    - shard-rkl:          [PASS][251] -> [SKIP][252] ([i915#14544] / [i915#3637]) +10 other tests skip
   [251]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-8/igt@kms_flip@dpms-off-confusion-interruptible.html
   [252]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_flip@dpms-off-confusion-interruptible.html

  * igt@kms_flip@flip-vs-dpms-on-nop:
    - shard-rkl:          [PASS][253] -> [SKIP][254] ([i915#14544] / [i915#14553])
   [253]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-2/igt@kms_flip@flip-vs-dpms-on-nop.html
   [254]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_flip@flip-vs-dpms-on-nop.html

  * igt@kms_flip@flip-vs-fences-interruptible:
    - shard-mtlp:         NOTRUN -> [SKIP][255] ([i915#8381])
   [255]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-6/igt@kms_flip@flip-vs-fences-interruptible.html

  * igt@kms_flip@plain-flip-fb-recreate:
    - shard-rkl:          NOTRUN -> [SKIP][256] ([i915#14544] / [i915#3637])
   [256]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_flip@plain-flip-fb-recreate.html

  * igt@kms_flip@plain-flip-fb-recreate-interruptible:
    - shard-dg2:          [PASS][257] -> [FAIL][258] ([i915#10826])
   [257]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-4/igt@kms_flip@plain-flip-fb-recreate-interruptible.html
   [258]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-5/igt@kms_flip@plain-flip-fb-recreate-interruptible.html

  * igt@kms_flip@plain-flip-fb-recreate-interruptible@a-hdmi-a3:
    - shard-dg2:          NOTRUN -> [FAIL][259] ([i915#10826])
   [259]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-5/igt@kms_flip@plain-flip-fb-recreate-interruptible@a-hdmi-a3.html

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

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

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

  * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling:
    - shard-tglu:         NOTRUN -> [SKIP][263] ([i915#2672] / [i915#3555]) +1 other test skip
   [263]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-5/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling.html
    - shard-mtlp:         NOTRUN -> [SKIP][264] ([i915#2672] / [i915#3555] / [i915#8813]) +4 other tests skip
   [264]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-3/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling@pipe-a-default-mode:
    - shard-mtlp:         NOTRUN -> [SKIP][265] ([i915#2672] / [i915#8813])
   [265]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-3/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling@pipe-a-default-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling@pipe-a-valid-mode:
    - shard-dg1:          NOTRUN -> [SKIP][266] ([i915#2587] / [i915#2672]) +1 other test skip
   [266]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-15/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling:
    - shard-dg2-9:        NOTRUN -> [SKIP][267] ([i915#2672] / [i915#3555])
   [267]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling@pipe-a-valid-mode:
    - shard-rkl:          NOTRUN -> [SKIP][268] ([i915#2672]) +6 other tests skip
   [268]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling@pipe-a-valid-mode.html
    - shard-dg2-9:        NOTRUN -> [SKIP][269] ([i915#2672]) +1 other test skip
   [269]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling@pipe-a-valid-mode.html

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

  * igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling:
    - shard-tglu:         NOTRUN -> [SKIP][271] ([i915#2587] / [i915#2672] / [i915#3555])
   [271]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-6/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling@pipe-a-valid-mode:
    - shard-tglu:         NOTRUN -> [SKIP][272] ([i915#2587] / [i915#2672]) +2 other tests skip
   [272]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-6/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling@pipe-a-valid-mode.html

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

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

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling:
    - shard-rkl:          [PASS][275] -> [SKIP][276] ([i915#14544] / [i915#3555]) +2 other tests skip
   [275]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-2/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling.html
   [276]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling.html

  * igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-render:
    - shard-rkl:          NOTRUN -> [SKIP][277] ([i915#14544] / [i915#1849] / [i915#5354]) +7 other tests skip
   [277]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-shrfb-pgflip-blt:
    - shard-tglu-1:       NOTRUN -> [SKIP][278] +21 other tests skip
   [278]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-1/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-shrfb-pgflip-blt.html

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

  * igt@kms_frontbuffer_tracking@fbc-rgb101010-draw-mmap-gtt:
    - shard-dg1:          NOTRUN -> [SKIP][280] ([i915#8708]) +6 other tests skip
   [280]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-13/igt@kms_frontbuffer_tracking@fbc-rgb101010-draw-mmap-gtt.html
    - shard-mtlp:         NOTRUN -> [SKIP][281] ([i915#8708]) +4 other tests skip
   [281]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-3/igt@kms_frontbuffer_tracking@fbc-rgb101010-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbc-shrfb-scaledprimary:
    - shard-rkl:          [PASS][282] -> [SKIP][283] ([i915#14544] / [i915#1849] / [i915#5354]) +7 other tests skip
   [282]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-2/igt@kms_frontbuffer_tracking@fbc-shrfb-scaledprimary.html
   [283]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-shrfb-scaledprimary.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-pwrite:
    - shard-glk10:        NOTRUN -> [SKIP][284] +342 other tests skip
   [284]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-glk10/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-pri-indfb-multidraw:
    - shard-rkl:          NOTRUN -> [SKIP][285] ([i915#3023]) +6 other tests skip
   [285]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@kms_frontbuffer_tracking@fbcpsr-1p-pri-indfb-multidraw.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-draw-mmap-cpu:
    - shard-dg2:          NOTRUN -> [SKIP][286] ([i915#3458]) +14 other tests skip
   [286]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-10/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-mmap-wc:
    - shard-mtlp:         NOTRUN -> [SKIP][287] ([i915#1825]) +15 other tests skip
   [287]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-1/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-pwrite:
    - shard-dg1:          NOTRUN -> [SKIP][288] +16 other tests skip
   [288]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-14/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-shrfb-draw-mmap-gtt:
    - shard-dg2-9:        NOTRUN -> [SKIP][289] ([i915#8708]) +8 other tests skip
   [289]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-shrfb-draw-mmap-gtt.html

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

  * igt@kms_frontbuffer_tracking@fbcpsr-farfromfence-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][291] ([i915#8708]) +17 other tests skip
   [291]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-8/igt@kms_frontbuffer_tracking@fbcpsr-farfromfence-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-tiling-y:
    - shard-dg2:          NOTRUN -> [SKIP][292] ([i915#10055])
   [292]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-2/igt@kms_frontbuffer_tracking@fbcpsr-tiling-y.html

  * igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-shrfb-draw-render:
    - shard-dg2-9:        NOTRUN -> [SKIP][293] ([i915#3458]) +11 other tests skip
   [293]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-shrfb-draw-render.html

  * igt@kms_frontbuffer_tracking@psr-1p-pri-indfb-multidraw:
    - shard-glk:          NOTRUN -> [SKIP][294] +296 other tests skip
   [294]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-glk2/igt@kms_frontbuffer_tracking@psr-1p-pri-indfb-multidraw.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-pri-indfb-draw-mmap-wc:
    - shard-rkl:          NOTRUN -> [SKIP][295] ([i915#1825]) +13 other tests skip
   [295]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_frontbuffer_tracking@psr-2p-primscrn-pri-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-onoff:
    - shard-dg2-9:        NOTRUN -> [SKIP][296] ([i915#5354]) +21 other tests skip
   [296]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@psr-rgb565-draw-render:
    - shard-dg1:          NOTRUN -> [SKIP][297] ([i915#3458]) +7 other tests skip
   [297]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-19/igt@kms_frontbuffer_tracking@psr-rgb565-draw-render.html

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

  * igt@kms_hdr@bpc-switch-suspend:
    - shard-dg2-9:        NOTRUN -> [SKIP][299] ([i915#3555] / [i915#8228])
   [299]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_hdr@bpc-switch-suspend.html

  * igt@kms_hdr@static-swap:
    - shard-tglu:         NOTRUN -> [SKIP][300] ([i915#3555] / [i915#8228])
   [300]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-6/igt@kms_hdr@static-swap.html

  * igt@kms_hdr@static-toggle-suspend:
    - shard-rkl:          NOTRUN -> [SKIP][301] ([i915#3555] / [i915#8228])
   [301]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_hdr@static-toggle-suspend.html

  * igt@kms_invalid_mode@zero-vdisplay:
    - shard-rkl:          [PASS][302] -> [SKIP][303] ([i915#14544] / [i915#3555] / [i915#8826])
   [302]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-8/igt@kms_invalid_mode@zero-vdisplay.html
   [303]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_invalid_mode@zero-vdisplay.html

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

  * igt@kms_joiner@basic-force-ultra-joiner:
    - shard-dg2:          NOTRUN -> [SKIP][305] ([i915#10656]) +1 other test skip
   [305]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-7/igt@kms_joiner@basic-force-ultra-joiner.html

  * igt@kms_joiner@invalid-modeset-ultra-joiner:
    - shard-tglu:         NOTRUN -> [SKIP][306] ([i915#12339])
   [306]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-6/igt@kms_joiner@invalid-modeset-ultra-joiner.html

  * igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner:
    - shard-tglu-1:       NOTRUN -> [SKIP][307] ([i915#13522])
   [307]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-1/igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner.html
    - shard-mtlp:         NOTRUN -> [SKIP][308] ([i915#13522])
   [308]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-5/igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner.html
    - shard-dg2-9:        NOTRUN -> [SKIP][309] ([i915#13522])
   [309]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner.html

  * igt@kms_lease@lease-invalid-plane:
    - shard-rkl:          [PASS][310] -> [SKIP][311] ([i915#14544]) +42 other tests skip
   [310]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-3/igt@kms_lease@lease-invalid-plane.html
   [311]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_lease@lease-invalid-plane.html

  * igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
    - shard-dg2-9:        NOTRUN -> [SKIP][312] ([i915#4816])
   [312]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html

  * igt@kms_pipe_b_c_ivb@from-pipe-c-to-b-with-3-lanes:
    - shard-dg2:          NOTRUN -> [SKIP][313] +12 other tests skip
   [313]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-4/igt@kms_pipe_b_c_ivb@from-pipe-c-to-b-with-3-lanes.html

  * igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence:
    - shard-glk11:        NOTRUN -> [SKIP][314] ([i915#11190]) +1 other test skip
   [314]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-glk11/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html

  * igt@kms_pipe_crc_basic@suspend-read-crc:
    - shard-rkl:          [PASS][315] -> [INCOMPLETE][316] ([i915#13476]) +1 other test incomplete
   [315]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-5/igt@kms_pipe_crc_basic@suspend-read-crc.html
   [316]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-3/igt@kms_pipe_crc_basic@suspend-read-crc.html
    - shard-glk:          NOTRUN -> [INCOMPLETE][317] ([i915#12756] / [i915#13409] / [i915#13476])
   [317]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-glk9/igt@kms_pipe_crc_basic@suspend-read-crc.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-hdmi-a-2:
    - shard-glk:          NOTRUN -> [INCOMPLETE][318] ([i915#13409] / [i915#13476])
   [318]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-glk9/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-hdmi-a-2.html

  * igt@kms_plane@planar-pixel-format-settings:
    - shard-rkl:          [PASS][319] -> [SKIP][320] ([i915#14544] / [i915#9581])
   [319]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-5/igt@kms_plane@planar-pixel-format-settings.html
   [320]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_plane@planar-pixel-format-settings.html

  * igt@kms_plane_alpha_blend@alpha-7efc:
    - shard-rkl:          [PASS][321] -> [SKIP][322] ([i915#14544] / [i915#7294])
   [321]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-8/igt@kms_plane_alpha_blend@alpha-7efc.html
   [322]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_plane_alpha_blend@alpha-7efc.html

  * igt@kms_plane_multiple@2x-tiling-x:
    - shard-tglu:         NOTRUN -> [SKIP][323] ([i915#13958])
   [323]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-6/igt@kms_plane_multiple@2x-tiling-x.html

  * igt@kms_plane_multiple@2x-tiling-yf:
    - shard-dg1:          NOTRUN -> [SKIP][324] ([i915#13958])
   [324]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-15/igt@kms_plane_multiple@2x-tiling-yf.html
    - shard-dg2:          NOTRUN -> [SKIP][325] ([i915#13958])
   [325]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-3/igt@kms_plane_multiple@2x-tiling-yf.html

  * igt@kms_plane_multiple@tiling-4:
    - shard-tglu:         NOTRUN -> [SKIP][326] ([i915#14259])
   [326]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-3/igt@kms_plane_multiple@tiling-4.html

  * igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b:
    - shard-dg1:          NOTRUN -> [SKIP][327] ([i915#12247]) +4 other tests skip
   [327]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-16/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b.html

  * igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats:
    - shard-rkl:          [PASS][328] -> [SKIP][329] ([i915#14544] / [i915#3555] / [i915#8152])
   [328]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-5/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats.html
   [329]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats.html

  * igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-a:
    - shard-rkl:          [PASS][330] -> [SKIP][331] ([i915#12247] / [i915#14544]) +4 other tests skip
   [330]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-5/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-a.html
   [331]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-a.html

  * igt@kms_plane_scaling@plane-upscale-factor-0-25-with-modifiers:
    - shard-rkl:          [PASS][332] -> [SKIP][333] ([i915#14544] / [i915#8152])
   [332]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-2/igt@kms_plane_scaling@plane-upscale-factor-0-25-with-modifiers.html
   [333]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_plane_scaling@plane-upscale-factor-0-25-with-modifiers.html

  * igt@kms_plane_scaling@plane-upscale-factor-0-25-with-modifiers@pipe-b:
    - shard-rkl:          [PASS][334] -> [SKIP][335] ([i915#12247] / [i915#14544] / [i915#8152]) +7 other tests skip
   [334]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-2/igt@kms_plane_scaling@plane-upscale-factor-0-25-with-modifiers@pipe-b.html
   [335]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_plane_scaling@plane-upscale-factor-0-25-with-modifiers@pipe-b.html

  * igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-75:
    - shard-glk11:        NOTRUN -> [SKIP][336] +349 other tests skip
   [336]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-glk11/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-75.html

  * igt@kms_pm_backlight@fade:
    - shard-dg1:          NOTRUN -> [SKIP][337] ([i915#5354])
   [337]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-18/igt@kms_pm_backlight@fade.html

  * igt@kms_pm_backlight@fade-with-dpms:
    - shard-rkl:          NOTRUN -> [SKIP][338] ([i915#5354])
   [338]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@kms_pm_backlight@fade-with-dpms.html
    - shard-tglu-1:       NOTRUN -> [SKIP][339] ([i915#9812])
   [339]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-1/igt@kms_pm_backlight@fade-with-dpms.html

  * igt@kms_pm_dc@dc5-dpms-negative:
    - shard-rkl:          [PASS][340] -> [SKIP][341] ([i915#13441] / [i915#14544])
   [340]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-7/igt@kms_pm_dc@dc5-dpms-negative.html
   [341]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_pm_dc@dc5-dpms-negative.html

  * igt@kms_pm_dc@dc5-retention-flops:
    - shard-rkl:          NOTRUN -> [SKIP][342] ([i915#3828])
   [342]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-4/igt@kms_pm_dc@dc5-retention-flops.html
    - shard-tglu:         NOTRUN -> [SKIP][343] ([i915#3828])
   [343]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-9/igt@kms_pm_dc@dc5-retention-flops.html

  * igt@kms_pm_dc@dc9-dpms:
    - shard-rkl:          NOTRUN -> [SKIP][344] ([i915#4281])
   [344]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@kms_pm_dc@dc9-dpms.html

  * igt@kms_pm_lpsp@screens-disabled:
    - shard-dg1:          NOTRUN -> [SKIP][345] ([i915#8430])
   [345]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-18/igt@kms_pm_lpsp@screens-disabled.html

  * igt@kms_pm_rpm@cursor:
    - shard-dg1:          NOTRUN -> [SKIP][346] ([i915#4077]) +5 other tests skip
   [346]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-18/igt@kms_pm_rpm@cursor.html
    - shard-mtlp:         NOTRUN -> [SKIP][347] ([i915#4077]) +8 other tests skip
   [347]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-2/igt@kms_pm_rpm@cursor.html

  * igt@kms_pm_rpm@dpms-lpsp:
    - shard-rkl:          [PASS][348] -> [SKIP][349] ([i915#9519]) +1 other test skip
   [348]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-4/igt@kms_pm_rpm@dpms-lpsp.html
   [349]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_pm_rpm@dpms-lpsp.html

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

  * igt@kms_pm_rpm@modeset-lpsp-stress:
    - shard-rkl:          [PASS][351] -> [SKIP][352] ([i915#12916])
   [351]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-4/igt@kms_pm_rpm@modeset-lpsp-stress.html
   [352]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@kms_pm_rpm@modeset-lpsp-stress.html

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

  * igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
    - shard-dg2:          [PASS][354] -> [SKIP][355] ([i915#9519])
   [354]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-11/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html
   [355]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-4/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html

  * igt@kms_prime@basic-crc-hybrid:
    - shard-dg2:          NOTRUN -> [SKIP][356] ([i915#6524] / [i915#6805])
   [356]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-5/igt@kms_prime@basic-crc-hybrid.html

  * igt@kms_prime@basic-crc-vgem:
    - shard-dg2-9:        NOTRUN -> [SKIP][357] ([i915#6524] / [i915#6805]) +1 other test skip
   [357]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_prime@basic-crc-vgem.html

  * igt@kms_properties@plane-properties-atomic:
    - shard-rkl:          [PASS][358] -> [SKIP][359] ([i915#11521] / [i915#14544])
   [358]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-2/igt@kms_properties@plane-properties-atomic.html
   [359]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_properties@plane-properties-atomic.html

  * igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-fully-sf:
    - shard-dg1:          NOTRUN -> [SKIP][360] ([i915#11520]) +1 other test skip
   [360]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-17/igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-fully-sf.html

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

  * igt@kms_psr2_sf@fbc-pr-overlay-primary-update-sf-dmg-area:
    - shard-mtlp:         NOTRUN -> [SKIP][362] ([i915#12316]) +1 other test skip
   [362]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-3/igt@kms_psr2_sf@fbc-pr-overlay-primary-update-sf-dmg-area.html

  * igt@kms_psr2_sf@fbc-pr-primary-plane-update-sf-dmg-area:
    - shard-dg2:          NOTRUN -> [SKIP][363] ([i915#11520]) +9 other tests skip
   [363]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-11/igt@kms_psr2_sf@fbc-pr-primary-plane-update-sf-dmg-area.html

  * igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf:
    - shard-rkl:          NOTRUN -> [SKIP][364] ([i915#11520] / [i915#14544]) +1 other test skip
   [364]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf.html

  * igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf:
    - shard-dg2-9:        NOTRUN -> [SKIP][365] ([i915#11520]) +5 other tests skip
   [365]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf.html

  * igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-sf-dmg-area:
    - shard-glk11:        NOTRUN -> [SKIP][366] ([i915#11520]) +9 other tests skip
   [366]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-glk11/igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-fully-sf:
    - shard-tglu:         NOTRUN -> [SKIP][367] ([i915#11520]) +5 other tests skip
   [367]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-3/igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-fully-sf.html
    - shard-rkl:          NOTRUN -> [SKIP][368] ([i915#11520]) +1 other test skip
   [368]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr2_sf@pr-primary-plane-update-sf-dmg-area-big-fb:
    - shard-glk10:        NOTRUN -> [SKIP][369] ([i915#11520]) +9 other tests skip
   [369]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-glk10/igt@kms_psr2_sf@pr-primary-plane-update-sf-dmg-area-big-fb.html

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

  * igt@kms_psr2_su@page_flip-p010:
    - shard-dg2:          NOTRUN -> [SKIP][371] ([i915#9683])
   [371]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-11/igt@kms_psr2_su@page_flip-p010.html

  * igt@kms_psr2_su@page_flip-xrgb8888:
    - shard-tglu:         NOTRUN -> [SKIP][372] ([i915#9683])
   [372]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-10/igt@kms_psr2_su@page_flip-xrgb8888.html

  * igt@kms_psr@fbc-pr-sprite-mmap-gtt:
    - shard-rkl:          NOTRUN -> [SKIP][373] ([i915#1072] / [i915#9732]) +8 other tests skip
   [373]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-7/igt@kms_psr@fbc-pr-sprite-mmap-gtt.html
    - shard-dg1:          NOTRUN -> [SKIP][374] ([i915#1072] / [i915#9732]) +9 other tests skip
   [374]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-16/igt@kms_psr@fbc-pr-sprite-mmap-gtt.html

  * igt@kms_psr@fbc-psr-cursor-blt@edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][375] ([i915#9688]) +11 other tests skip
   [375]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-2/igt@kms_psr@fbc-psr-cursor-blt@edp-1.html

  * igt@kms_psr@fbc-psr-primary-page-flip:
    - shard-dg2:          NOTRUN -> [SKIP][376] ([i915#1072] / [i915#9732]) +23 other tests skip
   [376]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-8/igt@kms_psr@fbc-psr-primary-page-flip.html

  * igt@kms_psr@pr-sprite-mmap-cpu:
    - shard-tglu:         NOTRUN -> [SKIP][377] ([i915#9732]) +14 other tests skip
   [377]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-8/igt@kms_psr@pr-sprite-mmap-cpu.html

  * igt@kms_psr@psr-primary-mmap-cpu:
    - shard-dg2-9:        NOTRUN -> [SKIP][378] ([i915#1072] / [i915#9732]) +14 other tests skip
   [378]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_psr@psr-primary-mmap-cpu.html

  * igt@kms_psr@psr2-sprite-mmap-gtt:
    - shard-tglu-1:       NOTRUN -> [SKIP][379] ([i915#9732]) +5 other tests skip
   [379]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-1/igt@kms_psr@psr2-sprite-mmap-gtt.html

  * igt@kms_psr@psr2-sprite-plane-move:
    - shard-rkl:          NOTRUN -> [SKIP][380] ([i915#1072] / [i915#14544] / [i915#9732])
   [380]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_psr@psr2-sprite-plane-move.html

  * igt@kms_psr_stress_test@invalidate-primary-flip-overlay:
    - shard-tglu:         NOTRUN -> [SKIP][381] ([i915#9685])
   [381]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-7/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html

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

  * igt@kms_rotation_crc@exhaust-fences:
    - shard-dg1:          NOTRUN -> [SKIP][383] ([i915#4884])
   [383]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-14/igt@kms_rotation_crc@exhaust-fences.html

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

  * igt@kms_rotation_crc@primary-rotation-270:
    - shard-dg2:          NOTRUN -> [SKIP][385] ([i915#12755])
   [385]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-11/igt@kms_rotation_crc@primary-rotation-270.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270:
    - shard-dg2:          NOTRUN -> [SKIP][386] ([i915#12755] / [i915#5190])
   [386]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-7/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html

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

  * igt@kms_setmode@clone-exclusive-crtc:
    - shard-rkl:          NOTRUN -> [SKIP][388] ([i915#14544] / [i915#3555])
   [388]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_setmode@clone-exclusive-crtc.html

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-tglu:         NOTRUN -> [SKIP][389] ([i915#8623])
   [389]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-3/igt@kms_tiled_display@basic-test-pattern.html

  * igt@kms_vblank@ts-continuation-dpms-suspend:
    - shard-rkl:          [PASS][390] -> [INCOMPLETE][391] ([i915#12276]) +1 other test incomplete
   [390]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-8/igt@kms_vblank@ts-continuation-dpms-suspend.html
   [391]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-3/igt@kms_vblank@ts-continuation-dpms-suspend.html

  * igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-hdmi-a-2:
    - shard-glk:          NOTRUN -> [INCOMPLETE][392] ([i915#12276]) +1 other test incomplete
   [392]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-glk1/igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-hdmi-a-2.html

  * igt@kms_vrr@flip-basic:
    - shard-tglu:         NOTRUN -> [SKIP][393] ([i915#3555]) +2 other tests skip
   [393]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-2/igt@kms_vrr@flip-basic.html

  * igt@kms_vrr@flip-suspend:
    - shard-dg2-9:        NOTRUN -> [SKIP][394] ([i915#3555]) +1 other test skip
   [394]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@kms_vrr@flip-suspend.html

  * igt@kms_vrr@max-min:
    - shard-mtlp:         NOTRUN -> [SKIP][395] ([i915#8808] / [i915#9906]) +1 other test skip
   [395]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-2/igt@kms_vrr@max-min.html

  * igt@kms_vrr@negative-basic:
    - shard-tglu:         NOTRUN -> [SKIP][396] ([i915#3555] / [i915#9906])
   [396]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-7/igt@kms_vrr@negative-basic.html

  * igt@kms_vrr@seamless-rr-switch-drrs:
    - shard-dg2:          NOTRUN -> [SKIP][397] ([i915#9906])
   [397]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-5/igt@kms_vrr@seamless-rr-switch-drrs.html
    - shard-rkl:          NOTRUN -> [SKIP][398] ([i915#9906])
   [398]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-7/igt@kms_vrr@seamless-rr-switch-drrs.html
    - shard-dg1:          NOTRUN -> [SKIP][399] ([i915#9906])
   [399]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-16/igt@kms_vrr@seamless-rr-switch-drrs.html
    - shard-tglu:         NOTRUN -> [SKIP][400] ([i915#9906])
   [400]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-5/igt@kms_vrr@seamless-rr-switch-drrs.html

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

  * igt@kms_writeback@writeback-check-output:
    - shard-glk:          NOTRUN -> [SKIP][402] ([i915#2437])
   [402]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-glk1/igt@kms_writeback@writeback-check-output.html
    - shard-dg2:          NOTRUN -> [SKIP][403] ([i915#2437]) +1 other test skip
   [403]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-2/igt@kms_writeback@writeback-check-output.html

  * igt@kms_writeback@writeback-invalid-parameters:
    - shard-dg1:          NOTRUN -> [SKIP][404] ([i915#2437])
   [404]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-17/igt@kms_writeback@writeback-invalid-parameters.html
    - shard-tglu:         NOTRUN -> [SKIP][405] ([i915#2437])
   [405]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-7/igt@kms_writeback@writeback-invalid-parameters.html
    - shard-mtlp:         NOTRUN -> [SKIP][406] ([i915#2437])
   [406]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-7/igt@kms_writeback@writeback-invalid-parameters.html
    - shard-rkl:          NOTRUN -> [SKIP][407] ([i915#2437])
   [407]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-4/igt@kms_writeback@writeback-invalid-parameters.html

  * igt@perf@gen8-unprivileged-single-ctx-counters:
    - shard-mtlp:         NOTRUN -> [SKIP][408] +13 other tests skip
   [408]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-7/igt@perf@gen8-unprivileged-single-ctx-counters.html
    - shard-dg2:          NOTRUN -> [SKIP][409] ([i915#2436])
   [409]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-2/igt@perf@gen8-unprivileged-single-ctx-counters.html
    - shard-rkl:          NOTRUN -> [SKIP][410] ([i915#2436])
   [410]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@perf@gen8-unprivileged-single-ctx-counters.html

  * igt@perf@global-sseu-config-invalid:
    - shard-mtlp:         NOTRUN -> [SKIP][411] ([i915#7387])
   [411]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-6/igt@perf@global-sseu-config-invalid.html

  * igt@perf_pmu@busy-idle-check-all:
    - shard-dg2:          [PASS][412] -> [FAIL][413] ([i915#4349]) +2 other tests fail
   [412]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-11/igt@perf_pmu@busy-idle-check-all.html
   [413]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-1/igt@perf_pmu@busy-idle-check-all.html

  * igt@perf_pmu@busy-idle-check-all@ccs0:
    - shard-mtlp:         [PASS][414] -> [FAIL][415] ([i915#4349]) +6 other tests fail
   [414]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-mtlp-8/igt@perf_pmu@busy-idle-check-all@ccs0.html
   [415]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-8/igt@perf_pmu@busy-idle-check-all@ccs0.html

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

  * igt@perf_pmu@module-unload:
    - shard-rkl:          NOTRUN -> [FAIL][417] ([i915#14433])
   [417]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@perf_pmu@module-unload.html
    - shard-tglu:         NOTRUN -> [FAIL][418] ([i915#14433])
   [418]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-7/igt@perf_pmu@module-unload.html

  * igt@perf_pmu@rc6@other-idle-gt0:
    - shard-dg2-9:        NOTRUN -> [SKIP][419] ([i915#8516])
   [419]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@perf_pmu@rc6@other-idle-gt0.html
    - shard-tglu-1:       NOTRUN -> [SKIP][420] ([i915#8516])
   [420]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-1/igt@perf_pmu@rc6@other-idle-gt0.html

  * igt@prime_busy@hang:
    - shard-rkl:          [PASS][421] -> [DMESG-WARN][422] ([i915#12917] / [i915#12964]) +1 other test dmesg-warn
   [421]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-7/igt@prime_busy@hang.html
   [422]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@prime_busy@hang.html

  * igt@prime_vgem@basic-fence-flip:
    - shard-rkl:          [PASS][423] -> [SKIP][424] ([i915#14544] / [i915#3708])
   [423]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-5/igt@prime_vgem@basic-fence-flip.html
   [424]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@prime_vgem@basic-fence-flip.html

  * igt@prime_vgem@basic-fence-read:
    - shard-dg2:          NOTRUN -> [SKIP][425] ([i915#3291] / [i915#3708]) +2 other tests skip
   [425]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-5/igt@prime_vgem@basic-fence-read.html

  * igt@prime_vgem@basic-gtt:
    - shard-dg2-9:        NOTRUN -> [SKIP][426] ([i915#3708] / [i915#4077]) +1 other test skip
   [426]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@prime_vgem@basic-gtt.html

  * igt@prime_vgem@fence-read-hang:
    - shard-rkl:          NOTRUN -> [SKIP][427] ([i915#3708])
   [427]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-3/igt@prime_vgem@fence-read-hang.html

  * igt@prime_vgem@fence-write-hang:
    - shard-dg2-9:        NOTRUN -> [SKIP][428] ([i915#3708])
   [428]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-9/igt@prime_vgem@fence-write-hang.html

  * igt@sriov_basic@enable-vfs-autoprobe-off:
    - shard-dg2:          NOTRUN -> [SKIP][429] ([i915#9917]) +1 other test skip
   [429]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-7/igt@sriov_basic@enable-vfs-autoprobe-off.html
    - shard-dg1:          NOTRUN -> [SKIP][430] ([i915#9917])
   [430]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-14/igt@sriov_basic@enable-vfs-autoprobe-off.html

  * igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all:
    - shard-tglu:         NOTRUN -> [FAIL][431] ([i915#12910])
   [431]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-3/igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all.html
    - shard-rkl:          NOTRUN -> [SKIP][432] ([i915#9917])
   [432]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all.html

  
#### Possible fixes ####

  * igt@fbdev@pan:
    - shard-rkl:          [SKIP][433] ([i915#14544] / [i915#2582]) -> [PASS][434]
   [433]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@fbdev@pan.html
   [434]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-4/igt@fbdev@pan.html

  * igt@gem_ccs@suspend-resume:
    - shard-dg2:          [INCOMPLETE][435] ([i915#13356]) -> [PASS][436]
   [435]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-4/igt@gem_ccs@suspend-resume.html
   [436]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-11/igt@gem_ccs@suspend-resume.html

  * igt@gem_ccs@suspend-resume@tile4-compressed-compfmt0-lmem0-lmem0:
    - shard-dg2:          [INCOMPLETE][437] ([i915#12392] / [i915#13356]) -> [PASS][438]
   [437]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-4/igt@gem_ccs@suspend-resume@tile4-compressed-compfmt0-lmem0-lmem0.html
   [438]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-11/igt@gem_ccs@suspend-resume@tile4-compressed-compfmt0-lmem0-lmem0.html

  * igt@gem_exec_gttfill@basic:
    - shard-rkl:          [DMESG-WARN][439] ([i915#12917] / [i915#12964]) -> [PASS][440] +1 other test pass
   [439]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@gem_exec_gttfill@basic.html
   [440]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@gem_exec_gttfill@basic.html

  * igt@gem_exec_schedule@in-order@vcs0:
    - shard-mtlp:         [DMESG-WARN][441] ([i915#13562]) -> [PASS][442] +2 other tests pass
   [441]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-mtlp-7/igt@gem_exec_schedule@in-order@vcs0.html
   [442]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-2/igt@gem_exec_schedule@in-order@vcs0.html

  * igt@gem_pxp@regular-baseline-src-copy-readible:
    - shard-rkl:          [TIMEOUT][443] ([i915#12964]) -> [PASS][444]
   [443]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-5/igt@gem_pxp@regular-baseline-src-copy-readible.html
   [444]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@gem_pxp@regular-baseline-src-copy-readible.html

  * igt@gem_pxp@verify-pxp-stale-ctx-execution:
    - shard-rkl:          [SKIP][445] ([i915#14544] / [i915#4270]) -> [PASS][446]
   [445]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@gem_pxp@verify-pxp-stale-ctx-execution.html
   [446]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@gem_pxp@verify-pxp-stale-ctx-execution.html

  * igt@i915_module_load@load:
    - shard-dg2:          ([PASS][447], [PASS][448], [PASS][449], [PASS][450], [PASS][451], [PASS][452], [DMESG-WARN][453], [PASS][454], [PASS][455], [PASS][456], [PASS][457], [PASS][458], [PASS][459], [PASS][460], [PASS][461], [PASS][462], [PASS][463], [PASS][464], [PASS][465], [PASS][466], [PASS][467]) ([i915#14559]) -> ([PASS][468], [PASS][469], [PASS][470], [PASS][471], [PASS][472], [PASS][473], [PASS][474], [PASS][475], [PASS][476], [PASS][477], [PASS][478], [PASS][479], [PASS][480], [PASS][481], [PASS][482], [PASS][483], [PASS][484], [PASS][485], [PASS][486], [PASS][487], [PASS][488], [PASS][489])
   [447]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-10/igt@i915_module_load@load.html
   [448]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-10/igt@i915_module_load@load.html
   [449]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-11/igt@i915_module_load@load.html
   [450]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-11/igt@i915_module_load@load.html
   [451]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-1/igt@i915_module_load@load.html
   [452]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-1/igt@i915_module_load@load.html
   [453]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-2/igt@i915_module_load@load.html
   [454]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-2/igt@i915_module_load@load.html
   [455]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-3/igt@i915_module_load@load.html
   [456]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-3/igt@i915_module_load@load.html
   [457]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-4/igt@i915_module_load@load.html
   [458]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-4/igt@i915_module_load@load.html
   [459]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-5/igt@i915_module_load@load.html
   [460]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-5/igt@i915_module_load@load.html
   [461]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-6/igt@i915_module_load@load.html
   [462]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-6/igt@i915_module_load@load.html
   [463]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-7/igt@i915_module_load@load.html
   [464]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-7/igt@i915_module_load@load.html
   [465]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-8/igt@i915_module_load@load.html
   [466]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-8/igt@i915_module_load@load.html
   [467]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-8/igt@i915_module_load@load.html
   [468]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-10/igt@i915_module_load@load.html
   [469]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-10/igt@i915_module_load@load.html
   [470]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-11/igt@i915_module_load@load.html
   [471]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-11/igt@i915_module_load@load.html
   [472]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-1/igt@i915_module_load@load.html
   [473]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-1/igt@i915_module_load@load.html
   [474]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-2/igt@i915_module_load@load.html
   [475]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-2/igt@i915_module_load@load.html
   [476]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-2/igt@i915_module_load@load.html
   [477]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-3/igt@i915_module_load@load.html
   [478]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-3/igt@i915_module_load@load.html
   [479]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-4/igt@i915_module_load@load.html
   [480]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-4/igt@i915_module_load@load.html
   [481]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-5/igt@i915_module_load@load.html
   [482]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-5/igt@i915_module_load@load.html
   [483]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-6/igt@i915_module_load@load.html
   [484]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-6/igt@i915_module_load@load.html
   [485]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-7/igt@i915_module_load@load.html
   [486]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-7/igt@i915_module_load@load.html
   [487]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-7/igt@i915_module_load@load.html
   [488]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-8/igt@i915_module_load@load.html
   [489]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-8/igt@i915_module_load@load.html

  * igt@i915_module_load@reload-no-display:
    - shard-dg1:          [DMESG-WARN][490] ([i915#13029] / [i915#14545]) -> [PASS][491]
   [490]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg1-13/igt@i915_module_load@reload-no-display.html
   [491]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-17/igt@i915_module_load@reload-no-display.html

  * igt@i915_pm_rps@reset:
    - shard-snb:          [INCOMPLETE][492] ([i915#13729] / [i915#13821]) -> [PASS][493]
   [492]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-snb7/igt@i915_pm_rps@reset.html
   [493]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-snb4/igt@i915_pm_rps@reset.html

  * igt@i915_selftest@live@workarounds:
    - shard-dg2:          [DMESG-FAIL][494] ([i915#12061]) -> [PASS][495] +1 other test pass
   [494]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-11/igt@i915_selftest@live@workarounds.html
   [495]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-8/igt@i915_selftest@live@workarounds.html
    - shard-mtlp:         [DMESG-FAIL][496] ([i915#12061]) -> [PASS][497] +1 other test pass
   [496]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-mtlp-6/igt@i915_selftest@live@workarounds.html
   [497]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-1/igt@i915_selftest@live@workarounds.html

  * igt@i915_selftest@mock:
    - shard-dg2:          [DMESG-WARN][498] ([i915#14545]) -> [PASS][499]
   [498]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-11/igt@i915_selftest@mock.html
   [499]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-1/igt@i915_selftest@mock.html

  * igt@i915_suspend@sysfs-reader:
    - shard-rkl:          [INCOMPLETE][500] ([i915#4817]) -> [PASS][501]
   [500]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-3/igt@i915_suspend@sysfs-reader.html
   [501]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@i915_suspend@sysfs-reader.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-a-hdmi-a-1:
    - shard-glk:          [INCOMPLETE][502] ([i915#12796]) -> [PASS][503]
   [502]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-glk9/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-a-hdmi-a-1.html
   [503]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-glk6/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-a-hdmi-a-1.html

  * igt@kms_color@ctm-0-25:
    - shard-rkl:          [SKIP][504] ([i915#12655] / [i915#14544]) -> [PASS][505]
   [504]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_color@ctm-0-25.html
   [505]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@kms_color@ctm-0-25.html

  * igt@kms_cursor_crc@cursor-onscreen-256x85:
    - shard-tglu:         [FAIL][506] ([i915#13566]) -> [PASS][507] +1 other test pass
   [506]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-tglu-10/igt@kms_cursor_crc@cursor-onscreen-256x85.html
   [507]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-tglu-10/igt@kms_cursor_crc@cursor-onscreen-256x85.html

  * igt@kms_cursor_legacy@basic-flip-before-cursor-atomic:
    - shard-rkl:          [SKIP][508] ([i915#11190] / [i915#14544]) -> [PASS][509] +1 other test pass
   [508]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_cursor_legacy@basic-flip-before-cursor-atomic.html
   [509]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_cursor_legacy@basic-flip-before-cursor-atomic.html

  * igt@kms_draw_crc@draw-method-mmap-gtt:
    - shard-rkl:          [SKIP][510] ([i915#14544]) -> [PASS][511] +45 other tests pass
   [510]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_draw_crc@draw-method-mmap-gtt.html
   [511]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@kms_draw_crc@draw-method-mmap-gtt.html

  * igt@kms_flip@2x-flip-vs-suspend-interruptible:
    - shard-snb:          [TIMEOUT][512] ([i915#14033] / [i915#14350]) -> [PASS][513]
   [512]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-snb6/igt@kms_flip@2x-flip-vs-suspend-interruptible.html
   [513]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-snb7/igt@kms_flip@2x-flip-vs-suspend-interruptible.html

  * igt@kms_flip@2x-flip-vs-suspend-interruptible@ab-vga1-hdmi-a1:
    - shard-snb:          [TIMEOUT][514] ([i915#14033]) -> [PASS][515]
   [514]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-snb6/igt@kms_flip@2x-flip-vs-suspend-interruptible@ab-vga1-hdmi-a1.html
   [515]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-snb7/igt@kms_flip@2x-flip-vs-suspend-interruptible@ab-vga1-hdmi-a1.html

  * igt@kms_flip@basic-flip-vs-wf_vblank:
    - shard-rkl:          [DMESG-WARN][516] ([i915#12964]) -> [PASS][517] +39 other tests pass
   [516]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-5/igt@kms_flip@basic-flip-vs-wf_vblank.html
   [517]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@kms_flip@basic-flip-vs-wf_vblank.html

  * igt@kms_flip@blocking-absolute-wf_vblank@a-edp1:
    - shard-mtlp:         [ABORT][518] ([i915#13562]) -> [PASS][519] +3 other tests pass
   [518]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-mtlp-1/igt@kms_flip@blocking-absolute-wf_vblank@a-edp1.html
   [519]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-6/igt@kms_flip@blocking-absolute-wf_vblank@a-edp1.html

  * igt@kms_flip@plain-flip-interruptible:
    - shard-rkl:          [SKIP][520] ([i915#14544] / [i915#3637]) -> [PASS][521] +8 other tests pass
   [520]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_flip@plain-flip-interruptible.html
   [521]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@kms_flip@plain-flip-interruptible.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-64bpp-ytile-upscaling:
    - shard-rkl:          [SKIP][522] ([i915#14544] / [i915#3555]) -> [PASS][523] +2 other tests pass
   [522]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-64bpp-ytile-upscaling.html
   [523]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-64bpp-ytile-upscaling.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-gtt:
    - shard-rkl:          [SKIP][524] ([i915#14544] / [i915#1849] / [i915#5354]) -> [PASS][525] +6 other tests pass
   [524]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-gtt.html
   [525]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-gtt.html

  * igt@kms_invalid_mode@bad-htotal:
    - shard-rkl:          [SKIP][526] ([i915#14544] / [i915#3555] / [i915#8826]) -> [PASS][527] +2 other tests pass
   [526]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_invalid_mode@bad-htotal.html
   [527]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_invalid_mode@bad-htotal.html

  * igt@kms_invalid_mode@overflow-vrefresh:
    - shard-rkl:          [SKIP][528] ([i915#14544] / [i915#8826]) -> [PASS][529]
   [528]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_invalid_mode@overflow-vrefresh.html
   [529]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-4/igt@kms_invalid_mode@overflow-vrefresh.html

  * igt@kms_plane_alpha_blend@constant-alpha-max:
    - shard-rkl:          [SKIP][530] ([i915#14544] / [i915#7294]) -> [PASS][531]
   [530]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_plane_alpha_blend@constant-alpha-max.html
   [531]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-4/igt@kms_plane_alpha_blend@constant-alpha-max.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-75-with-pixel-format:
    - shard-rkl:          [SKIP][532] ([i915#14544] / [i915#8152]) -> [PASS][533]
   [532]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_plane_scaling@plane-downscale-factor-0-75-with-pixel-format.html
   [533]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@kms_plane_scaling@plane-downscale-factor-0-75-with-pixel-format.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-75-with-pixel-format@pipe-b:
    - shard-rkl:          [SKIP][534] ([i915#12247] / [i915#14544] / [i915#8152]) -> [PASS][535] +4 other tests pass
   [534]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_plane_scaling@plane-downscale-factor-0-75-with-pixel-format@pipe-b.html
   [535]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@kms_plane_scaling@plane-downscale-factor-0-75-with-pixel-format@pipe-b.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-75:
    - shard-rkl:          [SKIP][536] ([i915#12247] / [i915#14544] / [i915#3555] / [i915#6953] / [i915#8152]) -> [PASS][537]
   [536]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_plane_scaling@planes-downscale-factor-0-75.html
   [537]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@kms_plane_scaling@planes-downscale-factor-0-75.html

  * igt@kms_plane_scaling@planes-scaler-unity-scaling:
    - shard-rkl:          [SKIP][538] ([i915#14544] / [i915#3555] / [i915#8152]) -> [PASS][539]
   [538]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_plane_scaling@planes-scaler-unity-scaling.html
   [539]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@kms_plane_scaling@planes-scaler-unity-scaling.html

  * igt@kms_plane_scaling@planes-scaler-unity-scaling@pipe-a:
    - shard-rkl:          [SKIP][540] ([i915#12247] / [i915#14544]) -> [PASS][541] +3 other tests pass
   [540]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_plane_scaling@planes-scaler-unity-scaling@pipe-a.html
   [541]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@kms_plane_scaling@planes-scaler-unity-scaling@pipe-a.html

  * igt@kms_pm_rpm@modeset-lpsp-stress-no-wait:
    - shard-dg2:          [SKIP][542] ([i915#9519]) -> [PASS][543]
   [542]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-2/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html
   [543]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-4/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html
    - shard-rkl:          [SKIP][544] ([i915#9519]) -> [PASS][545] +1 other test pass
   [544]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-8/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html
   [545]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-4/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html

  * igt@kms_pm_rpm@modeset-non-lpsp:
    - shard-rkl:          [SKIP][546] ([i915#14544] / [i915#9519]) -> [PASS][547]
   [546]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_pm_rpm@modeset-non-lpsp.html
   [547]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_pm_rpm@modeset-non-lpsp.html

  * igt@kms_prime@basic-crc-vgem:
    - shard-rkl:          [SKIP][548] ([i915#14544] / [i915#6524]) -> [PASS][549]
   [548]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_prime@basic-crc-vgem.html
   [549]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@kms_prime@basic-crc-vgem.html

  * igt@kms_properties@crtc-properties-atomic:
    - shard-rkl:          [SKIP][550] ([i915#11521] / [i915#14544]) -> [PASS][551]
   [550]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_properties@crtc-properties-atomic.html
   [551]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@kms_properties@crtc-properties-atomic.html

  * igt@kms_vblank@ts-continuation-suspend:
    - shard-rkl:          [INCOMPLETE][552] ([i915#12276]) -> [PASS][553]
   [552]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-3/igt@kms_vblank@ts-continuation-suspend.html
   [553]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@kms_vblank@ts-continuation-suspend.html

  * igt@kms_vrr@negative-basic:
    - shard-mtlp:         [FAIL][554] ([i915#10393]) -> [PASS][555] +1 other test pass
   [554]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-mtlp-6/igt@kms_vrr@negative-basic.html
   [555]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-7/igt@kms_vrr@negative-basic.html

  * igt@perf_pmu@most-busy-idle-check-all:
    - shard-rkl:          [FAIL][556] ([i915#4349]) -> [PASS][557] +1 other test pass
   [556]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-5/igt@perf_pmu@most-busy-idle-check-all.html
   [557]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@perf_pmu@most-busy-idle-check-all.html

  
#### Warnings ####

  * igt@api_intel_bb@blit-reloc-keep-cache:
    - shard-rkl:          [SKIP][558] ([i915#8411]) -> [SKIP][559] ([i915#14544] / [i915#8411]) +1 other test skip
   [558]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-8/igt@api_intel_bb@blit-reloc-keep-cache.html
   [559]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@api_intel_bb@blit-reloc-keep-cache.html

  * igt@api_intel_bb@crc32:
    - shard-rkl:          [SKIP][560] ([i915#14544] / [i915#6230]) -> [SKIP][561] ([i915#6230])
   [560]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@api_intel_bb@crc32.html
   [561]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@api_intel_bb@crc32.html

  * igt@api_intel_bb@object-reloc-keep-cache:
    - shard-rkl:          [SKIP][562] ([i915#14544] / [i915#8411]) -> [SKIP][563] ([i915#8411])
   [562]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@api_intel_bb@object-reloc-keep-cache.html
   [563]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@api_intel_bb@object-reloc-keep-cache.html

  * igt@device_reset@unbind-cold-reset-rebind:
    - shard-rkl:          [SKIP][564] ([i915#11078] / [i915#14544]) -> [SKIP][565] ([i915#11078])
   [564]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@device_reset@unbind-cold-reset-rebind.html
   [565]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@device_reset@unbind-cold-reset-rebind.html

  * igt@gem_basic@multigpu-create-close:
    - shard-rkl:          [SKIP][566] ([i915#14544] / [i915#7697]) -> [SKIP][567] ([i915#7697]) +1 other test skip
   [566]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@gem_basic@multigpu-create-close.html
   [567]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@gem_basic@multigpu-create-close.html

  * igt@gem_ccs@block-multicopy-inplace:
    - shard-rkl:          [SKIP][568] ([i915#3555] / [i915#9323]) -> [SKIP][569] ([i915#14544] / [i915#3555] / [i915#9323])
   [568]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-7/igt@gem_ccs@block-multicopy-inplace.html
   [569]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@gem_ccs@block-multicopy-inplace.html

  * igt@gem_ccs@ctrl-surf-copy:
    - shard-rkl:          [SKIP][570] ([i915#14544] / [i915#3555] / [i915#9323]) -> [SKIP][571] ([i915#3555] / [i915#9323])
   [570]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@gem_ccs@ctrl-surf-copy.html
   [571]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-3/igt@gem_ccs@ctrl-surf-copy.html

  * igt@gem_ccs@ctrl-surf-copy-new-ctx:
    - shard-rkl:          [SKIP][572] ([i915#9323]) -> [SKIP][573] ([i915#14544] / [i915#9323])
   [572]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-2/igt@gem_ccs@ctrl-surf-copy-new-ctx.html
   [573]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@gem_ccs@ctrl-surf-copy-new-ctx.html

  * igt@gem_ccs@suspend-resume:
    - shard-rkl:          [SKIP][574] ([i915#14544] / [i915#9323]) -> [SKIP][575] ([i915#9323])
   [574]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@gem_ccs@suspend-resume.html
   [575]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-3/igt@gem_ccs@suspend-resume.html

  * igt@gem_create@create-ext-set-pat:
    - shard-rkl:          [SKIP][576] ([i915#8562]) -> [SKIP][577] ([i915#14544] / [i915#8562])
   [576]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-5/igt@gem_create@create-ext-set-pat.html
   [577]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@gem_create@create-ext-set-pat.html

  * igt@gem_exec_balancer@parallel-balancer:
    - shard-rkl:          [SKIP][578] ([i915#14544] / [i915#4525]) -> [SKIP][579] ([i915#4525]) +2 other tests skip
   [578]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@gem_exec_balancer@parallel-balancer.html
   [579]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@gem_exec_balancer@parallel-balancer.html

  * igt@gem_exec_reloc@basic-gtt-wc:
    - shard-rkl:          [SKIP][580] ([i915#14544] / [i915#3281]) -> [SKIP][581] ([i915#3281]) +4 other tests skip
   [580]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@gem_exec_reloc@basic-gtt-wc.html
   [581]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-7/igt@gem_exec_reloc@basic-gtt-wc.html

  * igt@gem_exec_reloc@basic-wc-gtt:
    - shard-rkl:          [SKIP][582] ([i915#3281]) -> [SKIP][583] ([i915#14544] / [i915#3281]) +3 other tests skip
   [582]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-4/igt@gem_exec_reloc@basic-wc-gtt.html
   [583]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@gem_exec_reloc@basic-wc-gtt.html

  * igt@gem_huc_copy@huc-copy:
    - shard-rkl:          [SKIP][584] ([i915#14544] / [i915#2190]) -> [SKIP][585] ([i915#2190])
   [584]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@gem_huc_copy@huc-copy.html
   [585]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@parallel-random-engines:
    - shard-rkl:          [SKIP][586] ([i915#14544] / [i915#4613]) -> [SKIP][587] ([i915#4613]) +1 other test skip
   [586]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@gem_lmem_swapping@parallel-random-engines.html
   [587]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-4/igt@gem_lmem_swapping@parallel-random-engines.html

  * igt@gem_lmem_swapping@parallel-random-verify-ccs:
    - shard-rkl:          [SKIP][588] ([i915#4613]) -> [SKIP][589] ([i915#14544] / [i915#4613]) +2 other tests skip
   [588]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-2/igt@gem_lmem_swapping@parallel-random-verify-ccs.html
   [589]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@gem_lmem_swapping@parallel-random-verify-ccs.html

  * igt@gem_media_vme:
    - shard-rkl:          [SKIP][590] ([i915#14544] / [i915#284]) -> [SKIP][591] ([i915#284])
   [590]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@gem_media_vme.html
   [591]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@gem_media_vme.html

  * igt@gem_partial_pwrite_pread@writes-after-reads:
    - shard-rkl:          [SKIP][592] ([i915#3282]) -> [SKIP][593] ([i915#14544] / [i915#3282]) +3 other tests skip
   [592]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-5/igt@gem_partial_pwrite_pread@writes-after-reads.html
   [593]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@gem_partial_pwrite_pread@writes-after-reads.html

  * igt@gem_partial_pwrite_pread@writes-after-reads-uncached:
    - shard-rkl:          [SKIP][594] ([i915#14544] / [i915#3282]) -> [SKIP][595] ([i915#3282]) +5 other tests skip
   [594]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@gem_partial_pwrite_pread@writes-after-reads-uncached.html
   [595]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@gem_partial_pwrite_pread@writes-after-reads-uncached.html

  * igt@gem_pxp@protected-raw-src-copy-not-readible:
    - shard-rkl:          [SKIP][596] ([i915#14544] / [i915#4270]) -> [TIMEOUT][597] ([i915#12917] / [i915#12964]) +1 other test timeout
   [596]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@gem_pxp@protected-raw-src-copy-not-readible.html
   [597]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@gem_pxp@protected-raw-src-copy-not-readible.html

  * igt@gem_userptr_blits@dmabuf-unsync:
    - shard-rkl:          [SKIP][598] ([i915#14544] / [i915#3297]) -> [SKIP][599] ([i915#3297]) +2 other tests skip
   [598]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@gem_userptr_blits@dmabuf-unsync.html
   [599]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@gem_userptr_blits@dmabuf-unsync.html

  * igt@gem_userptr_blits@unsync-unmap-after-close:
    - shard-rkl:          [SKIP][600] ([i915#3297]) -> [SKIP][601] ([i915#14544] / [i915#3297])
   [600]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-5/igt@gem_userptr_blits@unsync-unmap-after-close.html
   [601]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@gem_userptr_blits@unsync-unmap-after-close.html

  * igt@gen9_exec_parse@allowed-single:
    - shard-rkl:          [SKIP][602] ([i915#2527]) -> [SKIP][603] ([i915#14544] / [i915#2527]) +4 other tests skip
   [602]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-8/igt@gen9_exec_parse@allowed-single.html
   [603]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@gen9_exec_parse@allowed-single.html

  * igt@gen9_exec_parse@shadow-peek:
    - shard-rkl:          [SKIP][604] ([i915#14544] / [i915#2527]) -> [SKIP][605] ([i915#2527]) +2 other tests skip
   [604]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@gen9_exec_parse@shadow-peek.html
   [605]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@gen9_exec_parse@shadow-peek.html

  * igt@i915_pm_freq_api@freq-reset:
    - shard-rkl:          [SKIP][606] ([i915#8399]) -> [SKIP][607] ([i915#14544] / [i915#8399])
   [606]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-2/igt@i915_pm_freq_api@freq-reset.html
   [607]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@i915_pm_freq_api@freq-reset.html

  * igt@i915_query@hwconfig_table:
    - shard-rkl:          [SKIP][608] ([i915#6245]) -> [SKIP][609] ([i915#14544] / [i915#6245])
   [608]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-2/igt@i915_query@hwconfig_table.html
   [609]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@i915_query@hwconfig_table.html

  * igt@intel_hwmon@hwmon-write:
    - shard-rkl:          [SKIP][610] ([i915#7707]) -> [SKIP][611] ([i915#14544] / [i915#7707])
   [610]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-8/igt@intel_hwmon@hwmon-write.html
   [611]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@intel_hwmon@hwmon-write.html

  * igt@kms_big_fb@4-tiled-addfb:
    - shard-rkl:          [SKIP][612] ([i915#14544]) -> [SKIP][613] ([i915#5286]) +1 other test skip
   [612]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_big_fb@4-tiled-addfb.html
   [613]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-7/igt@kms_big_fb@4-tiled-addfb.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip:
    - shard-rkl:          [SKIP][614] ([i915#5286]) -> [SKIP][615] ([i915#14544]) +4 other tests skip
   [614]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-2/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip.html
   [615]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip.html

  * igt@kms_big_fb@linear-64bpp-rotate-90:
    - shard-rkl:          [SKIP][616] ([i915#14544]) -> [SKIP][617] ([i915#3638]) +5 other tests skip
   [616]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_big_fb@linear-64bpp-rotate-90.html
   [617]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_big_fb@linear-64bpp-rotate-90.html

  * igt@kms_big_fb@linear-8bpp-rotate-270:
    - shard-rkl:          [SKIP][618] ([i915#3638]) -> [SKIP][619] ([i915#14544]) +1 other test skip
   [618]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-3/igt@kms_big_fb@linear-8bpp-rotate-270.html
   [619]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_big_fb@linear-8bpp-rotate-270.html

  * igt@kms_ccs@bad-pixel-format-4-tiled-mtl-mc-ccs:
    - shard-rkl:          [SKIP][620] ([i915#14098] / [i915#6095]) -> [SKIP][621] ([i915#14544]) +11 other tests skip
   [620]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-7/igt@kms_ccs@bad-pixel-format-4-tiled-mtl-mc-ccs.html
   [621]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_ccs@bad-pixel-format-4-tiled-mtl-mc-ccs.html

  * igt@kms_ccs@bad-pixel-format-y-tiled-gen12-mc-ccs:
    - shard-rkl:          [SKIP][622] ([i915#14544]) -> [SKIP][623] ([i915#14098] / [i915#6095]) +12 other tests skip
   [622]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_ccs@bad-pixel-format-y-tiled-gen12-mc-ccs.html
   [623]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-7/igt@kms_ccs@bad-pixel-format-y-tiled-gen12-mc-ccs.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs:
    - shard-rkl:          [SKIP][624] ([i915#12313]) -> [SKIP][625] ([i915#14544]) +3 other tests skip
   [624]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-2/igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs.html
   [625]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs@pipe-b-hdmi-a-2:
    - shard-rkl:          [SKIP][626] ([i915#6095]) -> [SKIP][627] ([i915#14098] / [i915#6095]) +3 other tests skip
   [626]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-8/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs@pipe-b-hdmi-a-2.html
   [627]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs@pipe-b-hdmi-a-2.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs:
    - shard-rkl:          [SKIP][628] ([i915#14544]) -> [SKIP][629] ([i915#12313])
   [628]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs.html
   [629]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-4/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs.html

  * igt@kms_chamelium_hpd@dp-hpd-enable-disable-mode:
    - shard-rkl:          [SKIP][630] ([i915#11151] / [i915#7828]) -> [SKIP][631] ([i915#11151] / [i915#14544] / [i915#7828]) +10 other tests skip
   [630]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-7/igt@kms_chamelium_hpd@dp-hpd-enable-disable-mode.html
   [631]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_chamelium_hpd@dp-hpd-enable-disable-mode.html

  * igt@kms_chamelium_hpd@vga-hpd-for-each-pipe:
    - shard-rkl:          [SKIP][632] ([i915#11151] / [i915#14544] / [i915#7828]) -> [SKIP][633] ([i915#11151] / [i915#7828]) +9 other tests skip
   [632]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_chamelium_hpd@vga-hpd-for-each-pipe.html
   [633]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_chamelium_hpd@vga-hpd-for-each-pipe.html

  * igt@kms_color@deep-color:
    - shard-rkl:          [SKIP][634] ([i915#12655] / [i915#14544] / [i915#3555]) -> [SKIP][635] ([i915#12655] / [i915#3555])
   [634]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_color@deep-color.html
   [635]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_color@deep-color.html

  * igt@kms_content_protection@dp-mst-lic-type-1:
    - shard-rkl:          [SKIP][636] ([i915#3116]) -> [SKIP][637] ([i915#14544]) +1 other test skip
   [636]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-4/igt@kms_content_protection@dp-mst-lic-type-1.html
   [637]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_content_protection@dp-mst-lic-type-1.html

  * igt@kms_content_protection@dp-mst-type-1:
    - shard-rkl:          [SKIP][638] ([i915#14544]) -> [SKIP][639] ([i915#3116])
   [638]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_content_protection@dp-mst-type-1.html
   [639]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_content_protection@dp-mst-type-1.html

  * igt@kms_content_protection@mei-interface:
    - shard-rkl:          [SKIP][640] ([i915#14544]) -> [SKIP][641] ([i915#9424])
   [640]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_content_protection@mei-interface.html
   [641]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@kms_content_protection@mei-interface.html
    - shard-dg1:          [SKIP][642] ([i915#9433]) -> [SKIP][643] ([i915#9424])
   [642]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg1-13/igt@kms_content_protection@mei-interface.html
   [643]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-18/igt@kms_content_protection@mei-interface.html

  * igt@kms_cursor_crc@cursor-offscreen-512x170:
    - shard-rkl:          [SKIP][644] ([i915#13049]) -> [SKIP][645] ([i915#14544])
   [644]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-7/igt@kms_cursor_crc@cursor-offscreen-512x170.html
   [645]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_cursor_crc@cursor-offscreen-512x170.html

  * igt@kms_cursor_crc@cursor-random-128x42:
    - shard-rkl:          [FAIL][646] ([i915#13566]) -> [SKIP][647] ([i915#14544]) +1 other test skip
   [646]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-4/igt@kms_cursor_crc@cursor-random-128x42.html
   [647]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_cursor_crc@cursor-random-128x42.html

  * igt@kms_cursor_crc@cursor-rapid-movement-32x10:
    - shard-rkl:          [SKIP][648] ([i915#14544]) -> [SKIP][649] ([i915#3555]) +6 other tests skip
   [648]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_cursor_crc@cursor-rapid-movement-32x10.html
   [649]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@kms_cursor_crc@cursor-rapid-movement-32x10.html

  * igt@kms_cursor_crc@cursor-sliding-32x10:
    - shard-rkl:          [SKIP][650] ([i915#3555]) -> [SKIP][651] ([i915#14544]) +3 other tests skip
   [650]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-7/igt@kms_cursor_crc@cursor-sliding-32x10.html
   [651]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_cursor_crc@cursor-sliding-32x10.html

  * igt@kms_cursor_crc@cursor-sliding-64x21:
    - shard-rkl:          [SKIP][652] ([i915#14544]) -> [FAIL][653] ([i915#13566]) +1 other test fail
   [652]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_cursor_crc@cursor-sliding-64x21.html
   [653]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_cursor_crc@cursor-sliding-64x21.html

  * igt@kms_cursor_edge_walk@256x256-top-edge:
    - shard-rkl:          [DMESG-WARN][654] ([i915#12964]) -> [SKIP][655] ([i915#14544]) +2 other tests skip
   [654]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-4/igt@kms_cursor_edge_walk@256x256-top-edge.html
   [655]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_cursor_edge_walk@256x256-top-edge.html

  * igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy:
    - shard-rkl:          [SKIP][656] ([i915#14544]) -> [SKIP][657] +15 other tests skip
   [656]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html
   [657]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html

  * igt@kms_cursor_legacy@cursorb-vs-flipa-legacy:
    - shard-rkl:          [SKIP][658] -> [SKIP][659] ([i915#14544]) +18 other tests skip
   [658]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-8/igt@kms_cursor_legacy@cursorb-vs-flipa-legacy.html
   [659]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_cursor_legacy@cursorb-vs-flipa-legacy.html

  * igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot:
    - shard-rkl:          [SKIP][660] ([i915#14544]) -> [SKIP][661] ([i915#9067])
   [660]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot.html
   [661]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions:
    - shard-rkl:          [SKIP][662] ([i915#4103]) -> [SKIP][663] ([i915#14544])
   [662]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-8/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html
   [663]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html

  * igt@kms_display_modes@extended-mode-basic:
    - shard-rkl:          [SKIP][664] ([i915#13691]) -> [SKIP][665] ([i915#14544])
   [664]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-4/igt@kms_display_modes@extended-mode-basic.html
   [665]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_display_modes@extended-mode-basic.html

  * igt@kms_dp_link_training@non-uhbr-sst:
    - shard-rkl:          [SKIP][666] ([i915#13749]) -> [SKIP][667] ([i915#14544])
   [666]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-2/igt@kms_dp_link_training@non-uhbr-sst.html
   [667]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_dp_link_training@non-uhbr-sst.html

  * igt@kms_dp_linktrain_fallback@dp-fallback:
    - shard-rkl:          [SKIP][668] ([i915#13707]) -> [SKIP][669] ([i915#14544])
   [668]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-8/igt@kms_dp_linktrain_fallback@dp-fallback.html
   [669]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_dp_linktrain_fallback@dp-fallback.html

  * igt@kms_dsc@dsc-fractional-bpp:
    - shard-rkl:          [SKIP][670] ([i915#14544]) -> [SKIP][671] ([i915#3840])
   [670]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_dsc@dsc-fractional-bpp.html
   [671]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-7/igt@kms_dsc@dsc-fractional-bpp.html

  * igt@kms_dsc@dsc-with-bpc-formats:
    - shard-rkl:          [SKIP][672] ([i915#14544]) -> [SKIP][673] ([i915#3555] / [i915#3840])
   [672]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_dsc@dsc-with-bpc-formats.html
   [673]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@kms_dsc@dsc-with-bpc-formats.html

  * igt@kms_fbcon_fbt@psr:
    - shard-rkl:          [SKIP][674] ([i915#14544] / [i915#3955]) -> [SKIP][675] ([i915#3955])
   [674]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_fbcon_fbt@psr.html
   [675]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@kms_fbcon_fbt@psr.html

  * igt@kms_feature_discovery@display-4x:
    - shard-rkl:          [SKIP][676] ([i915#14544] / [i915#1839]) -> [SKIP][677] ([i915#1839])
   [676]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_feature_discovery@display-4x.html
   [677]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-7/igt@kms_feature_discovery@display-4x.html

  * igt@kms_feature_discovery@dp-mst:
    - shard-rkl:          [SKIP][678] ([i915#14544] / [i915#9337]) -> [SKIP][679] ([i915#9337])
   [678]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_feature_discovery@dp-mst.html
   [679]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@kms_feature_discovery@dp-mst.html

  * igt@kms_feature_discovery@psr2:
    - shard-rkl:          [SKIP][680] ([i915#14544] / [i915#658]) -> [SKIP][681] ([i915#658])
   [680]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_feature_discovery@psr2.html
   [681]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@kms_feature_discovery@psr2.html

  * igt@kms_flip@2x-flip-vs-dpms:
    - shard-rkl:          [SKIP][682] ([i915#14544] / [i915#9934]) -> [SKIP][683] ([i915#9934]) +6 other tests skip
   [682]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_flip@2x-flip-vs-dpms.html
   [683]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-7/igt@kms_flip@2x-flip-vs-dpms.html

  * igt@kms_flip@2x-flip-vs-panning-vs-hang:
    - shard-rkl:          [SKIP][684] ([i915#9934]) -> [SKIP][685] ([i915#14544] / [i915#9934]) +5 other tests skip
   [684]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-5/igt@kms_flip@2x-flip-vs-panning-vs-hang.html
   [685]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_flip@2x-flip-vs-panning-vs-hang.html

  * igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling:
    - shard-rkl:          [SKIP][686] ([i915#2672] / [i915#3555]) -> [SKIP][687] ([i915#14544] / [i915#3555]) +4 other tests skip
   [686]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-2/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling.html
   [687]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling:
    - shard-rkl:          [SKIP][688] ([i915#14544] / [i915#3555]) -> [SKIP][689] ([i915#2672] / [i915#3555]) +3 other tests skip
   [688]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling.html
   [689]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling.html

  * igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-pwrite:
    - shard-rkl:          [SKIP][690] ([i915#14544] / [i915#1849] / [i915#5354]) -> [DMESG-WARN][691] ([i915#12964])
   [690]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-pwrite.html
   [691]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbc-2p-shrfb-fliptrack-mmap-gtt:
    - shard-rkl:          [SKIP][692] -> [SKIP][693] ([i915#14544] / [i915#1849] / [i915#5354])
   [692]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-4/igt@kms_frontbuffer_tracking@fbc-2p-shrfb-fliptrack-mmap-gtt.html
   [693]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-2p-shrfb-fliptrack-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbc-tiling-4:
    - shard-rkl:          [SKIP][694] ([i915#14544] / [i915#1849] / [i915#5354]) -> [SKIP][695] ([i915#5439]) +1 other test skip
   [694]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-tiling-4.html
   [695]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-4/igt@kms_frontbuffer_tracking@fbc-tiling-4.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-move:
    - shard-rkl:          [SKIP][696] ([i915#14544] / [i915#1849] / [i915#5354]) -> [SKIP][697] ([i915#3023]) +16 other tests skip
   [696]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-move.html
   [697]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-move.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt:
    - shard-rkl:          [SKIP][698] ([i915#14544] / [i915#1849] / [i915#5354]) -> [SKIP][699] ([i915#1825]) +36 other tests skip
   [698]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt.html
   [699]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-3/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-move:
    - shard-dg2:          [SKIP][700] ([i915#3458]) -> [SKIP][701] ([i915#10433] / [i915#3458]) +2 other tests skip
   [700]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg2-8/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-move.html
   [701]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg2-4/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-move.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-draw-mmap-wc:
    - shard-rkl:          [SKIP][702] ([i915#1825]) -> [SKIP][703] ([i915#14544] / [i915#1849] / [i915#5354]) +28 other tests skip
   [702]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-2/igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-draw-mmap-wc.html
   [703]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psr-rgb101010-draw-render:
    - shard-dg1:          [SKIP][704] ([i915#3458] / [i915#4423]) -> [SKIP][705] ([i915#3458])
   [704]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-dg1-17/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-render.html
   [705]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-dg1-15/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-render.html

  * igt@kms_frontbuffer_tracking@psr-suspend:
    - shard-rkl:          [SKIP][706] ([i915#3023]) -> [SKIP][707] ([i915#14544] / [i915#1849] / [i915#5354]) +16 other tests skip
   [706]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-8/igt@kms_frontbuffer_tracking@psr-suspend.html
   [707]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-suspend.html

  * igt@kms_hdr@brightness-with-hdr:
    - shard-mtlp:         [SKIP][708] ([i915#1187] / [i915#12713]) -> [SKIP][709] ([i915#12713])
   [708]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-mtlp-1/igt@kms_hdr@brightness-with-hdr.html
   [709]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-mtlp-2/igt@kms_hdr@brightness-with-hdr.html

  * igt@kms_hdr@static-swap:
    - shard-rkl:          [SKIP][710] ([i915#3555] / [i915#8228]) -> [SKIP][711] ([i915#14544])
   [710]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-4/igt@kms_hdr@static-swap.html
   [711]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_hdr@static-swap.html

  * igt@kms_joiner@basic-force-ultra-joiner:
    - shard-rkl:          [SKIP][712] ([i915#12394]) -> [SKIP][713] ([i915#12394] / [i915#14544])
   [712]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-5/igt@kms_joiner@basic-force-ultra-joiner.html
   [713]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_joiner@basic-force-ultra-joiner.html

  * igt@kms_joiner@basic-ultra-joiner:
    - shard-rkl:          [SKIP][714] ([i915#12339]) -> [SKIP][715] ([i915#12339] / [i915#14544])
   [714]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-4/igt@kms_joiner@basic-ultra-joiner.html
   [715]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_joiner@basic-ultra-joiner.html

  * igt@kms_joiner@invalid-modeset-force-big-joiner:
    - shard-rkl:          [SKIP][716] ([i915#12388]) -> [SKIP][717] ([i915#12388] / [i915#14544])
   [716]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-7/igt@kms_joiner@invalid-modeset-force-big-joiner.html
   [717]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_joiner@invalid-modeset-force-big-joiner.html

  * igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
    - shard-rkl:          [SKIP][718] ([i915#1839] / [i915#4816]) -> [SKIP][719] ([i915#4070] / [i915#4816])
   [718]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-8/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html
   [719]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html

  * igt@kms_panel_fitting@atomic-fastset:
    - shard-rkl:          [SKIP][720] ([i915#14544]) -> [SKIP][721] ([i915#6301])
   [720]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_panel_fitting@atomic-fastset.html
   [721]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-4/igt@kms_panel_fitting@atomic-fastset.html

  * igt@kms_plane_multiple@2x-tiling-4:
    - shard-rkl:          [SKIP][722] ([i915#14544]) -> [SKIP][723] ([i915#13958]) +1 other test skip
   [722]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_plane_multiple@2x-tiling-4.html
   [723]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_plane_multiple@2x-tiling-4.html

  * igt@kms_plane_multiple@2x-tiling-x:
    - shard-rkl:          [SKIP][724] ([i915#13958]) -> [SKIP][725] ([i915#14544])
   [724]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-4/igt@kms_plane_multiple@2x-tiling-x.html
   [725]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_plane_multiple@2x-tiling-x.html

  * igt@kms_plane_multiple@tiling-yf:
    - shard-rkl:          [SKIP][726] ([i915#14259]) -> [SKIP][727] ([i915#14544]) +1 other test skip
   [726]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-4/igt@kms_plane_multiple@tiling-yf.html
   [727]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_plane_multiple@tiling-yf.html

  * igt@kms_plane_scaling@plane-upscale-20x20-with-rotation@pipe-a:
    - shard-rkl:          [SKIP][728] ([i915#12247] / [i915#14544]) -> [SKIP][729] ([i915#12247]) +1 other test skip
   [728]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_plane_scaling@plane-upscale-20x20-with-rotation@pipe-a.html
   [729]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@kms_plane_scaling@plane-upscale-20x20-with-rotation@pipe-a.html

  * igt@kms_plane_scaling@plane-upscale-20x20-with-rotation@pipe-b:
    - shard-rkl:          [SKIP][730] ([i915#12247] / [i915#14544] / [i915#8152]) -> [SKIP][731] ([i915#12247]) +3 other tests skip
   [730]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_plane_scaling@plane-upscale-20x20-with-rotation@pipe-b.html
   [731]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@kms_plane_scaling@plane-upscale-20x20-with-rotation@pipe-b.html

  * igt@kms_pm_backlight@bad-brightness:
    - shard-rkl:          [SKIP][732] ([i915#5354]) -> [SKIP][733] ([i915#14544] / [i915#5354]) +1 other test skip
   [732]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-8/igt@kms_pm_backlight@bad-brightness.html
   [733]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_pm_backlight@bad-brightness.html

  * igt@kms_pm_backlight@brightness-with-dpms:
    - shard-rkl:          [SKIP][734] ([i915#12343]) -> [SKIP][735] ([i915#12343] / [i915#14544])
   [734]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-5/igt@kms_pm_backlight@brightness-with-dpms.html
   [735]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_pm_backlight@brightness-with-dpms.html

  * igt@kms_pm_backlight@fade:
    - shard-rkl:          [SKIP][736] ([i915#14544] / [i915#5354]) -> [SKIP][737] ([i915#5354])
   [736]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_pm_backlight@fade.html
   [737]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_pm_backlight@fade.html

  * igt@kms_pm_dc@dc6-psr:
    - shard-rkl:          [SKIP][738] ([i915#14544] / [i915#9685]) -> [SKIP][739] ([i915#9685])
   [738]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_pm_dc@dc6-psr.html
   [739]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_pm_dc@dc6-psr.html

  * igt@kms_pm_rpm@modeset-lpsp:
    - shard-rkl:          [SKIP][740] ([i915#9519]) -> [DMESG-WARN][741] ([i915#12964])
   [740]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-5/igt@kms_pm_rpm@modeset-lpsp.html
   [741]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-4/igt@kms_pm_rpm@modeset-lpsp.html

  * igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
    - shard-rkl:          [SKIP][742] ([i915#9519]) -> [SKIP][743] ([i915#14544] / [i915#9519])
   [742]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-4/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html
   [743]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html

  * igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-fully-sf:
    - shard-rkl:          [SKIP][744] ([i915#11520] / [i915#14544]) -> [SKIP][745] ([i915#11520]) +6 other tests skip
   [744]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-fully-sf.html
   [745]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-4/igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf:
    - shard-rkl:          [SKIP][746] ([i915#11520]) -> [SKIP][747] ([i915#11520] / [i915#14544]) +5 other tests skip
   [746]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-8/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf.html
   [747]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf.html

  * igt@kms_psr2_su@frontbuffer-xrgb8888:
    - shard-rkl:          [SKIP][748] ([i915#9683]) -> [SKIP][749] ([i915#14544] / [i915#9683])
   [748]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-2/igt@kms_psr2_su@frontbuffer-xrgb8888.html
   [749]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_psr2_su@frontbuffer-xrgb8888.html

  * igt@kms_psr@pr-cursor-plane-onoff:
    - shard-rkl:          [SKIP][750] ([i915#1072] / [i915#9732]) -> [SKIP][751] ([i915#1072] / [i915#14544] / [i915#9732]) +18 other tests skip
   [750]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-7/igt@kms_psr@pr-cursor-plane-onoff.html
   [751]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_psr@pr-cursor-plane-onoff.html

  * igt@kms_psr@psr2-cursor-mmap-gtt:
    - shard-rkl:          [SKIP][752] ([i915#1072] / [i915#14544] / [i915#9732]) -> [SKIP][753] ([i915#1072] / [i915#9732]) +17 other tests skip
   [752]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_psr@psr2-cursor-mmap-gtt.html
   [753]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-3/igt@kms_psr@psr2-cursor-mmap-gtt.html

  * igt@kms_psr_stress_test@flip-primary-invalidate-overlay:
    - shard-rkl:          [SKIP][754] ([i915#9685]) -> [SKIP][755] ([i915#14544] / [i915#9685])
   [754]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-8/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html
   [755]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html

  * igt@kms_rotation_crc@multiplane-rotation-cropping-top:
    - shard-rkl:          [SKIP][756] ([i915#14544]) -> [DMESG-WARN][757] ([i915#12964])
   [756]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_rotation_crc@multiplane-rotation-cropping-top.html
   [757]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-5/igt@kms_rotation_crc@multiplane-rotation-cropping-top.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
    - shard-rkl:          [SKIP][758] ([i915#5289]) -> [SKIP][759] ([i915#14544])
   [758]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-4/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html
   [759]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270:
    - shard-rkl:          [SKIP][760] ([i915#14544]) -> [SKIP][761] ([i915#5289])
   [760]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html
   [761]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-4/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html

  * igt@kms_setmode@invalid-clone-exclusive-crtc:
    - shard-rkl:          [SKIP][762] ([i915#3555]) -> [SKIP][763] ([i915#14544] / [i915#3555])
   [762]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-4/igt@kms_setmode@invalid-clone-exclusive-crtc.html
   [763]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@kms_setmode@invalid-clone-exclusive-crtc.html

  * igt@kms_writeback@writeback-check-output:
    - shard-rkl:          [SKIP][764] ([i915#14544] / [i915#2437]) -> [SKIP][765] ([i915#2437])
   [764]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@kms_writeback@writeback-check-output.html
   [765]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@kms_writeback@writeback-check-output.html

  * igt@perf@mi-rpc:
    - shard-rkl:          [SKIP][766] ([i915#14544] / [i915#2434]) -> [SKIP][767] ([i915#2434])
   [766]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@perf@mi-rpc.html
   [767]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-8/igt@perf@mi-rpc.html

  * igt@perf@per-context-mode-unprivileged:
    - shard-rkl:          [SKIP][768] ([i915#14544] / [i915#2435]) -> [SKIP][769] ([i915#2435])
   [768]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@perf@per-context-mode-unprivileged.html
   [769]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-2/igt@perf@per-context-mode-unprivileged.html

  * igt@prime_vgem@basic-fence-read:
    - shard-rkl:          [SKIP][770] ([i915#14544] / [i915#3291] / [i915#3708]) -> [SKIP][771] ([i915#3291] / [i915#3708])
   [770]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@prime_vgem@basic-fence-read.html
   [771]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-7/igt@prime_vgem@basic-fence-read.html

  * igt@prime_vgem@coherency-gtt:
    - shard-rkl:          [SKIP][772] ([i915#14544] / [i915#3708]) -> [SKIP][773] ([i915#3708])
   [772]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-6/igt@prime_vgem@coherency-gtt.html
   [773]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-7/igt@prime_vgem@coherency-gtt.html

  * igt@prime_vgem@fence-flip-hang:
    - shard-rkl:          [SKIP][774] ([i915#3708]) -> [SKIP][775] ([i915#14544] / [i915#3708])
   [774]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-2/igt@prime_vgem@fence-flip-hang.html
   [775]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@prime_vgem@fence-flip-hang.html

  * igt@sriov_basic@enable-vfs-autoprobe-on:
    - shard-rkl:          [SKIP][776] ([i915#9917]) -> [SKIP][777] ([i915#14544] / [i915#9917])
   [776]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8488/shard-rkl-5/igt@sriov_basic@enable-vfs-autoprobe-on.html
   [777]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_13558/shard-rkl-6/igt@sriov_basic@enable-vfs-autoprobe-on.html

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

  [i915#10055]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10055
  [i915#10307]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10307
  [i915#10393]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10393
  [i915#10433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10433
  [i915#10434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10434
  [i915#10656]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10656
  [i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
  [i915#10826]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10826
  [i915#1099]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1099
  [i915#11078]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11078
  [i915#11151]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11151
  [i915#11190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11190
  [i915#11520]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11520
  [i915#11521]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11521
  [i915#11527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11527
  [i915#11681]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11681
  [i915#11713]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11713
  [i915#1187]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1187
  [i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
  [i915#12193]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12193
  [i915#12247]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12247
  [i915#12276]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12276
  [i915#12313]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12313
  [i915#12316]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12316
  [i915#12339]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12339
  [i915#12343]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12343
  [i915#12353]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12353
  [i915#12358]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12358
  [i915#12388]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12388
  [i915#12392]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12392
  [i915#12394]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12394
  [i915#12549]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12549
  [i915#12655]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12655
  [i915#12713]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12713
  [i915#12745]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12745
  [i915#12755]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12755
  [i915#12756]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12756
  [i915#12796]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12796
  [i915#12910]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12910
  [i915#12916]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12916
  [i915#12917]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12917
  [i915#12964]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12964
  [i915#13029]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13029
  [i915#13046]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13046
  [i915#13049]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13049
  [i915#13356]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13356
  [i915#13398]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13398
  [i915#13409]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13409
  [i915#13441]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13441
  [i915#13476]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13476
  [i915#13522]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13522
  [i915#13562]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13562
  [i915#13566]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13566
  [i915#13691]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13691
  [i915#13707]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13707
  [i915#13729]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13729
  [i915#13748]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13748
  [i915#13749]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13749
  [i915#13783]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13783
  [i915#13786]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13786
  [i915#13821]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13821
  [i915#13958]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13958
  [i915#14024]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14024
  [i915#14033]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14033
  [i915#14073]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14073
  [i915#14098]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14098
  [i915#14118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14118
  [i915#14123]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14123
  [i915#14152]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14152
  [i915#14259]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14259
  [i915#14350]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14350
  [i915#14433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14433
  [i915#14544]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14544
  [i915#14545]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14545
  [i915#14553]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14553
  [i915#14559]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14559
  [i915#14702]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14702
  [i915#14712]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14712
  [i915#14756]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14756
  [i915#1769]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1769
  [i915#1825]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1825
  [i915#1839]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1839
  [i915#1849]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1849
  [i915#2190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2190
  [i915#2346]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2346
  [i915#2434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2434
  [i915#2435]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2435
  [i915#2436]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2436
  [i915#2437]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2437
  [i915#2527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2527
  [i915#2582]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2582
  [i915#2587]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2587
  [i915#2658]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2658
  [i915#2672]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2672
  [i915#280]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/280
  [i915#284]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/284
  [i915#2856]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2856
  [i915#3023]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3023
  [i915#3116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3116
  [i915#3281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3281
  [i915#3282]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3282
  [i915#3291]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3291
  [i915#3297]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3297
  [i915#3299]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3299
  [i915#3458]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3458
  [i915#3469]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3469
  [i915#3539]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3539
  [i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555
  [i915#3637]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3637
  [i915#3638]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3638
  [i915#3708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3708
  [i915#3742]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3742
  [i915#3828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3828
  [i915#3840]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3840
  [i915#3955]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3955
  [i915#4036]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4036
  [i915#4070]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4070
  [i915#4077]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4077
  [i915#4079]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4079
  [i915#4083]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4083
  [i915#4103]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4103
  [i915#4212]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4212
  [i915#4213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4213
  [i915#4215]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4215
  [i915#4270]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4270
  [i915#4281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4281
  [i915#4349]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4349
  [i915#4387]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4387
  [i915#4423]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4423
  [i915#4525]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4525
  [i915#4538]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4538
  [i915#4565]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4565
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
  [i915#4771]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4771
  [i915#4812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4812
  [i915#4816]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4816
  [i915#4817]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4817
  [i915#4839]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4839
  [i915#4852]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4852
  [i915#4854]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4854
  [i915#4860]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4860
  [i915#4880]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4880
  [i915#4884]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4884
  [i915#4885]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4885
  [i915#5190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5190
  [i915#5286]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5286
  [i915#5289]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5289
  [i915#5354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5354
  [i915#5439]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5439
  [i915#5566]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5566
  [i915#5784]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5784
  [i915#6095]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6095
  [i915#6187]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6187
  [i915#6188]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6188
  [i915#6230]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6230
  [i915#6245]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6245
  [i915#6301]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6301
  [i915#6334]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6334
  [i915#6335]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6335
  [i915#6524]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6524
  [i915#658]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/658
  [i915#6805]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6805
  [i915#6806]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6806
  [i915#6944]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6944
  [i915#6953]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6953
  [i915#7116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7116
  [i915#7118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7118
  [i915#7294]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7294
  [i915#7387]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7387
  [i915#7582]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7582
  [i915#7697]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7697
  [i915#7707]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7707
  [i915#7828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7828
  [i915#7882]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7882
  [i915#8152]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8152
  [i915#8213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8213
  [i915#8228]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8228
  [i915#8381]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8381
  [i915#8399]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8399
  [i915#8411]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8411
  [i915#8428]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8428
  [i915#8430]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8430
  [i915#8516]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8516
  [i915#8555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8555
  [i915#8562]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8562
  [i915#8623]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8623
  [i915#8708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8708
  [i915#8808]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8808
  [i915#8812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8812
  [i915#8813]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8813
  [i915#8814]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8814
  [i915#8826]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8826
  [i915#9053]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9053
  [i915#9067]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9067
  [i915#9323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9323
  [i915#9337]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9337
  [i915#9424]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9424
  [i915#9433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9433
  [i915#9519]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9519
  [i915#9581]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9581
  [i915#9683]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9683
  [i915#9685]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9685
  [i915#9688]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9688
  [i915#9723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9723
  [i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732
  [i915#9809]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9809
  [i915#9812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9812
  [i915#9833]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9833
  [i915#9906]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9906
  [i915#9917]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9917
  [i915#9934]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9934


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

  * CI: CI-20190529 -> None
  * IGT: IGT_8488 -> IGTPW_13558

  CI-20190529: 20190529
  CI_DRM_16964: 8463eb0394270c7f78c091aa5f5c7af0abf6fdf8 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_13558: 8c6c9e1fc13f086db69fb38214552dc243eb6dd4 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  IGT_8488: c4a9bee161f4bb74cbbf81c73b24c416ecf93976 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git

== Logs ==

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

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

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

* Re: [PATCH i-g-t v4 01/41] lib/drmtest: Add VKMS as a known driver type
  2025-08-07  7:45 ` [PATCH i-g-t v4 01/41] lib/drmtest: Add VKMS as a known driver type José Expósito
@ 2025-08-12 15:33   ` Kamil Konieczny
  0 siblings, 0 replies; 52+ messages in thread
From: Kamil Konieczny @ 2025-08-12 15:33 UTC (permalink / raw)
  To: José Expósito
  Cc: igt-dev, louis.chauvet, zbigniew.kempczynski, karthik.b.s,
	Jim Shargo, Marius Vlad

Hi José,
On 2025-08-07 at 09:45:10 +0200, José Expósito wrote:
> As we are going to add VKMS specific tests, allow to check if it is
> available.
> 
> Co-developed-by: Jim Shargo <jshargo@chromium.org>
> Signed-off-by: Jim Shargo <jshargo@chromium.org>
> Co-developed-by: Marius Vlad <marius.vlad@collabora.com>
> Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
> Signed-off-by: José Expósito <jose.exposito89@gmail.com>

Reviewed-by: Kamil Konieczny <kamil.konieczny@linux.intel.com>

> ---
>  lib/drmtest.c | 21 +++++++++++++++++++++
>  lib/drmtest.h |  6 +++++-
>  2 files changed, 26 insertions(+), 1 deletion(-)
> 
> diff --git a/lib/drmtest.c b/lib/drmtest.c
> index 436b6de78..943ea8dbe 100644
> --- a/lib/drmtest.c
> +++ b/lib/drmtest.c
> @@ -223,6 +223,7 @@ static const struct module {
>  	{ DRIVER_V3D, "v3d" },
>  	{ DRIVER_VC4, "vc4" },
>  	{ DRIVER_VGEM, "vgem" },
> +	{ DRIVER_VKMS, "vkms" },
>  	{ DRIVER_VMWGFX, "vmwgfx" },
>  	{ DRIVER_XE, "xe" },
>  	{}
> @@ -295,6 +296,8 @@ static const char *chipset_to_str(int chipset)
>  		return "xe";
>  	case DRIVER_VMWGFX:
>  		return "vmwgfx";
> +	case DRIVER_VKMS:
> +		return "vkms";
>  	case DRIVER_ANY:
>  		return "any";
>  	default:
> @@ -971,3 +974,21 @@ void igt_require_xe(int fd)
>  {
>  	igt_require(is_xe_device(fd));
>  }
> +
> +void igt_require_vkms(void)
> +{
> +	/*
> +	 * Since VKMS can create and destroy virtual drivers at will, instead
> +	 * look to make sure the driver is installed.
> +	 */
> +	struct stat s = {};
> +	int ret;
> +	const char *vkms_module_dir = "/sys/module/vkms";
> +
> +	ret = stat(vkms_module_dir, &s);
> +
> +	igt_require_f(ret == 0, "VKMS stat of %s returned %d (%s)\n",
> +		      vkms_module_dir, ret, strerror(ret));
> +	igt_require_f(S_ISDIR(s.st_mode),
> +		      "VKMS stat of %s was not a directory\n", vkms_module_dir);
> +}
> diff --git a/lib/drmtest.h b/lib/drmtest.h
> index 27e5a18e2..a9542dde2 100644
> --- a/lib/drmtest.h
> +++ b/lib/drmtest.h
> @@ -55,14 +55,17 @@ int __get_drm_device_name(int fd, char *name, int name_size);
>  #define DRIVER_MSM	(1 << 6)
>  #define DRIVER_XE	(1 << 7)
>  #define DRIVER_VMWGFX   (1 << 8)
> +#define DRIVER_VKMS	(1 << 9)
>  
>  /*
>   * Exclude DRVER_VGEM from DRIVER_ANY since if you run on a system
>   * with vgem as well as a supported driver, you can end up with a
>   * near-100% skip rate if you don't explicitly specify the device,
>   * depending on device-load ordering.
> + *
> + * Exclude VKMS to prefer hardware drivers.
>   */
> -#define DRIVER_ANY 	~(DRIVER_VGEM)
> +#define DRIVER_ANY	~(DRIVER_VGEM | DRIVER_VKMS)
>  
>  /*
>   * Compile friendly enum for i915/xe.
> @@ -135,6 +138,7 @@ void igt_require_i915(int fd);
>  void igt_require_nouveau(int fd);
>  void igt_require_vc4(int fd);
>  void igt_require_xe(int fd);
> +void igt_require_vkms(void);
>  
>  bool is_amdgpu_device(int fd);
>  bool is_i915_device(int fd);
> -- 
> 2.50.1
> 

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

* Re: [PATCH i-g-t v4 02/41] lib/vkms: Add minimal VKMS library and test device default files
  2025-08-07  7:45 ` [PATCH i-g-t v4 02/41] lib/vkms: Add minimal VKMS library and test device default files José Expósito
@ 2025-08-13 13:28   ` Kamil Konieczny
  2025-08-14 10:52     ` José Expósito
  0 siblings, 1 reply; 52+ messages in thread
From: Kamil Konieczny @ 2025-08-13 13:28 UTC (permalink / raw)
  To: José Expósito
  Cc: igt-dev, louis.chauvet, zbigniew.kempczynski, karthik.b.s,
	Jim Shargo, Marius Vlad

Hi José,
On 2025-08-07 at 09:45:11 +0200, José Expósito wrote:
> Create a library containing helpers for creating VKMS devices and
> configuring them dynamically using configfs.
> For the moment, add the minimal number of helpers to be able to start
> testing VKMS's configfs support: Create device, destroy device and
> destroy all devices.
> 
> Also, include the simplest possible test using those helpers (checking
> the device's default files) and the scaffolding required to generate
> the documentation.
> 
> Co-developed-by: Jim Shargo <jshargo@chromium.org>
> Signed-off-by: Jim Shargo <jshargo@chromium.org>
> Co-developed-by: Marius Vlad <marius.vlad@collabora.com>
> Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
> Signed-off-by: José Expósito <jose.exposito89@gmail.com>
> ---
>  lib/igt_vkms.c             | 206 +++++++++++++++++++++++++++++++++++++
>  lib/igt_vkms.h             |  27 +++++
>  lib/meson.build            |   1 +
>  meson.build                |   8 ++
>  tests/meson.build          |   2 +
>  tests/vkms/meson.build     |  13 +++
>  tests/vkms/vkms_configfs.c | 131 +++++++++++++++++++++++

I checked changes as they are only minimal, imho you could keep
Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>

Also, you removed changes from testplan and docs building so
for build/meson changes
Reviewed-by: Kamil Konieczny <kamil.konieczny@linux.intel.com>

Btw checkpatch suggests even one more const 
static const char * array should probably be static const char * const
but you could fix that later.

Regards,
Kamil

>  7 files changed, 388 insertions(+)
>  create mode 100644 lib/igt_vkms.c
>  create mode 100644 lib/igt_vkms.h
>  create mode 100644 tests/vkms/meson.build
>  create mode 100644 tests/vkms/vkms_configfs.c
> 
> diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
> new file mode 100644
> index 000000000..03931d2e4
> --- /dev/null
> +++ b/lib/igt_vkms.c
> @@ -0,0 +1,206 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright © 2023 Google LLC.
> + * Copyright © 2023 Collabora, Ltd.
> + * Copyright © 2024-2025 Red Hat, Inc.
> + */
> +
> +#include <dirent.h>
> +#include <errno.h>
> +#include <ftw.h>
> +#include <limits.h>
> +#include <string.h>
> +#include <sys/stat.h>
> +
> +#include "igt.h"
> +#include "igt_vkms.h"
> +
> +#define VKMS_ROOT_DIR_NAME		"vkms"
> +
> +/**
> + * SECTION:igt_vkms
> + * @short_description: Helpers to create and configure VKMS devices
> + * @title: VKMS
> + * @include: igt_vkms.h
> + *
> + * Helpers for creating VKMS devices and configuring them dynamically.
> + *
> + * First, create a VKMS device, next, add pipeline items (planes, CRTCs,
> + * encoders, CRTCs and connectors) compose the pipeline by attaching each item
> + * using the _attach_ functions and finally, enable the VKMS device.
> + */
> +
> +static const char *mount_vkms_configfs(void)
> +{
> +	static char vkms_root_path[PATH_MAX];
> +	const char *configfs_path;
> +	int ret;
> +
> +	configfs_path = igt_configfs_mount();
> +	igt_assert_f(configfs_path, "Error mounting configfs");
> +
> +	ret = snprintf(vkms_root_path, sizeof(vkms_root_path), "%s/%s",
> +		       configfs_path, VKMS_ROOT_DIR_NAME);
> +	igt_assert(ret >= 0 && ret < sizeof(vkms_root_path));
> +
> +	return vkms_root_path;
> +}
> +
> +/**
> + * igt_require_vkms_configfs:
> + *
> + * Require that VKMS supports configfs configuration.
> + */
> +void igt_require_vkms_configfs(void)
> +{
> +	const char *vkms_root_path;
> +	DIR *dir;
> +
> +	vkms_root_path = mount_vkms_configfs();
> +
> +	dir = opendir(vkms_root_path);
> +	igt_require(dir);
> +	if (dir)
> +		closedir(dir);
> +}
> +
> +/**
> + * igt_vkms_device_create:
> + * @name: VKMS device name
> + *
> + * Create a directory in the ConfigFS VKMS root directory, where the entire
> + * pipeline will be configured.
> + */
> +igt_vkms_t *igt_vkms_device_create(const char *name)
> +{
> +	igt_vkms_t *dev;
> +	const char *vkms_root_path;
> +	size_t path_len;
> +	DIR *dir;
> +	int ret;
> +
> +	dev = calloc(1, sizeof(*dev));
> +
> +	vkms_root_path = mount_vkms_configfs();
> +
> +	path_len = strlen(vkms_root_path) + strlen(name) + 2;
> +	dev->path = malloc(path_len);
> +	ret = snprintf(dev->path, path_len, "%s/%s", vkms_root_path, name);
> +	igt_assert(ret >= 0 && ret < path_len);
> +
> +	dir = opendir(dev->path);
> +	if (dir) {
> +		igt_debug("Device at path %s already exists\n", dev->path);
> +		closedir(dir);
> +	} else {
> +		ret = mkdir(dev->path, 0777);
> +		if (ret != 0) {
> +			free(dev->path);
> +			free(dev);
> +			dev = NULL;
> +		}
> +	}
> +
> +	return dev;
> +}
> +
> +static int detach_pipeline_items(const char *path, const struct stat *info,
> +				 const int typeflag, struct FTW *pathinfo)
> +{
> +	/*
> +	 * Level 4 are the links in the possible_* directories:
> +	 * vkms/<dev>/<pipeline items>/<pipeline item>/<possible_*>/<links>
> +	 */
> +	if (pathinfo->level == 4 && typeflag == FTW_SL) {
> +		igt_debug("Detaching pipeline item %s\n", path);
> +		return unlink(path);
> +	}
> +
> +	/* Ignore the other files, they are removed by remove_pipeline_items */
> +	return 0;
> +}
> +
> +static int remove_pipeline_items(const char *path, const struct stat *info,
> +				 const int typeflag, struct FTW *pathinfo)
> +{
> +	/* Level 0 is the device root directory: vkms/<dev> */
> +	if (pathinfo->level == 0) {
> +		igt_debug("Removing pipeline item %s\n", path);
> +		return rmdir(path);
> +	}
> +
> +	/*
> +	 * Level 2 directories are the pipeline items:
> +	 * vkms/<dev>/<pipeline items>/<pipeline item>
> +	 */
> +	if (pathinfo->level == 2 && typeflag == FTW_DP) {
> +		igt_debug("Removing pipeline item %s\n", path);
> +		return rmdir(path);
> +	}
> +
> +	/* Ignore the other files, they are removed by VKMS */
> +	return 0;
> +}
> +
> +static int remove_device_dir(igt_vkms_t *dev)
> +{
> +	int ret;
> +
> +	ret = nftw(dev->path, detach_pipeline_items, 64, FTW_DEPTH | FTW_PHYS);
> +	if (ret)
> +		return ret;
> +
> +	ret = nftw(dev->path, remove_pipeline_items, 64, FTW_DEPTH | FTW_PHYS);
> +	return ret;
> +}
> +
> +/**
> + * igt_vkms_device_destroy:
> + * @dev: Device to destroy
> + *
> + * Remove and free the VKMS device.
> + */
> +void igt_vkms_device_destroy(igt_vkms_t *dev)
> +{
> +	int ret;
> +
> +	igt_assert(dev);
> +
> +	ret = remove_device_dir(dev);
> +	igt_assert_f(ret == 0,
> +		     "Unable to rmdir device directory '%s'. Got errno=%d (%s)\n",
> +		     dev->path, errno, strerror(errno));
> +
> +	free(dev->path);
> +	free(dev);
> +}
> +
> +/**
> + * igt_vkms_destroy_all_devices:
> + *
> + * Remove all VKMS devices created via configfs.
> + */
> +void igt_vkms_destroy_all_devices(void)
> +{
> +	igt_vkms_t *dev;
> +	const char *vkms_root_path;
> +	DIR *dir;
> +	struct dirent *ent;
> +
> +	vkms_root_path = mount_vkms_configfs();
> +	dir = opendir(vkms_root_path);
> +	igt_assert_f(dir, "VKMS configfs directory not available at '%s'. "
> +		     "Got errno=%d (%s)\n", vkms_root_path, errno,
> +		     strerror(errno));
> +
> +	while ((ent = readdir(dir)) != NULL) {
> +		if (strcmp(ent->d_name, ".") == 0 ||
> +		    strcmp(ent->d_name, "..") == 0)
> +			continue;
> +
> +		dev = igt_vkms_device_create(ent->d_name);
> +		igt_vkms_device_destroy(dev);
> +	}
> +
> +	closedir(dir);
> +}
> diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
> new file mode 100644
> index 000000000..95d7a53cd
> --- /dev/null
> +++ b/lib/igt_vkms.h
> @@ -0,0 +1,27 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2023 Google LLC.
> + * Copyright © 2023 Collabora, Ltd.
> + * Copyright © 2024-2025 Red Hat, Inc.
> + */
> +
> +#ifndef __IGT_VKMS_H__
> +#define __IGT_VKMS_H__
> +
> +/**
> + * igt_vkms_t:
> + * @path: VKMS root directory inside configfs mounted directory
> + *
> + * A struct representing a VKMS device.
> + */
> +typedef struct igt_vkms {
> +	char *path;
> +} igt_vkms_t;
> +
> +void igt_require_vkms_configfs(void);
> +
> +igt_vkms_t *igt_vkms_device_create(const char *name);
> +void igt_vkms_device_destroy(igt_vkms_t *dev);
> +void igt_vkms_destroy_all_devices(void);
> +
> +#endif /* __IGT_VKMS_H__ */
> diff --git a/lib/meson.build b/lib/meson.build
> index 2eaca42a4..62ba7f262 100644
> --- a/lib/meson.build
> +++ b/lib/meson.build
> @@ -50,6 +50,7 @@ lib_sources = [
>  	'igt_types.c',
>  	'igt_vec.c',
>  	'igt_vgem.c',
> +	'igt_vkms.c',
>  	'igt_x86.c',
>  	'instdone.c',
>  	'intel_allocator.c',
> diff --git a/meson.build b/meson.build
> index aeed3b1d2..f7ae427b3 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -290,6 +290,7 @@ msmdir = join_paths(libexecdir, 'msm')
>  panfrostdir = join_paths(libexecdir, 'panfrost')
>  v3ddir = join_paths(libexecdir, 'v3d')
>  vc4dir = join_paths(libexecdir, 'vc4')
> +vkmsdir = join_paths(libexecdir, 'vkms')
>  vmwgfxdir = join_paths(libexecdir, 'vmwgfx')
>  mandir = get_option('mandir')
>  pkgconfigdir = join_paths(libdir, 'pkgconfig')
> @@ -352,6 +353,12 @@ if get_option('use_rpath')
>  	endforeach
>  	vc4_rpathdir = join_paths(vc4_rpathdir, libdir)
>  
> +	vkms_rpathdir = '$ORIGIN'
> +	foreach p : vkmsdir.split('/')
> +		vkms_rpathdir = join_paths(vkms_rpathdir, '..')
> +	endforeach
> +	vkms_rpathdir = join_paths(vkms_rpathdir, libdir)
> +
>  	vmwgfx_rpathdir = '$ORIGIN'
>  	foreach p : vmwgfxdir.split('/')
>  		vmwgfx_rpathdir = join_paths(vmwgfx_rpathdir, '..')
> @@ -365,6 +372,7 @@ else
>  	panfrost_rpathdir = ''
>  	v3d_rpathdir = ''
>  	vc4_rpathdir = ''
> +	vkms_rpathdir = ''
>  	vmwgfx_rpathdir = ''
>  endif
>  
> diff --git a/tests/meson.build b/tests/meson.build
> index 5c01c64e9..a7b9375ed 100644
> --- a/tests/meson.build
> +++ b/tests/meson.build
> @@ -490,6 +490,8 @@ subdir('v3d')
>  
>  subdir('vc4')
>  
> +subdir('vkms')
> +
>  subdir('vmwgfx')
>  
>  gen_testlist = find_program('generate_testlist.sh')
> diff --git a/tests/vkms/meson.build b/tests/vkms/meson.build
> new file mode 100644
> index 000000000..e55ba32ba
> --- /dev/null
> +++ b/tests/vkms/meson.build
> @@ -0,0 +1,13 @@
> +vkms_progs = [
> +	'vkms_configfs',
> +]
> +vkms_deps = test_deps
> +
> +foreach prog : vkms_progs
> +	test_executables += executable(prog, prog + '.c',
> +				       dependencies : vkms_deps,
> +				       install_dir : vkmsdir,
> +				       install_rpath : vkms_rpathdir,
> +				       install : true)
> +	test_list += join_paths('vkms', prog)
> +endforeach
> diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
> new file mode 100644
> index 000000000..f659a7a22
> --- /dev/null
> +++ b/tests/vkms/vkms_configfs.c
> @@ -0,0 +1,131 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright © 2023 Google LLC.
> + * Copyright © 2023 Collabora, Ltd.
> + * Copyright © 2024-2025 Red Hat, Inc.
> + */
> +
> +/**
> + * TEST: Tests for VKMS configfs support.
> + * Category: Display
> + * Mega feature: General Display Features
> + * Sub-category: uapi
> + * Functionality: vkms,configfs
> + * Test category: functionality test
> + */
> +
> +#include <dirent.h>
> +#include <limits.h>
> +#include <string.h>
> +#include <sys/stat.h>
> +
> +#include "drmtest.h"
> +#include "igt.h"
> +#include "igt_vkms.h"
> +
> +static void assert_default_files(const char *path,
> +				 const char **files, size_t n_files,
> +				 const char **dirs, size_t n_dirs)
> +{
> +	DIR *dir;
> +	struct dirent *ent;
> +	int total = 0;
> +	int ret;
> +
> +	/* Check that the number of files/directories matches the expected */
> +	dir = opendir(path);
> +	igt_assert(dir);
> +	while ((ent = readdir(dir)) != NULL) {
> +		if (strcmp(ent->d_name, ".") == 0 ||
> +		    strcmp(ent->d_name, "..") == 0)
> +			continue;
> +
> +		total++;
> +	}
> +	igt_assert_eq(total, n_dirs + n_files);
> +	closedir(dir);
> +
> +	/* Check that the files/directories are present */
> +	for (int i = 0; i < n_files; i++) {
> +		char file_path[PATH_MAX];
> +		struct stat buf;
> +
> +		ret = snprintf(file_path, sizeof(file_path), "%s/%s", path,
> +			       files[i]);
> +		igt_assert(ret >= 0 && ret < sizeof(file_path));
> +
> +		igt_assert_f(stat(file_path, &buf) == 0,
> +			     "File %s does not exists\n", file_path);
> +	}
> +
> +	for (int i = 0; i < n_dirs; i++) {
> +		char dir_path[PATH_MAX];
> +
> +		ret = snprintf(dir_path, sizeof(dir_path), "%s/%s", path,
> +			       dirs[i]);
> +		igt_assert(ret >= 0 && ret < sizeof(dir_path));
> +
> +		dir = opendir(dir_path);
> +		igt_assert_f(dir, "Directory %s does not exists\n", dir_path);
> +		closedir(dir);
> +	}
> +}
> +
> +/**
> + * SUBTEST: device-default-files
> + * Description: Test that creating a VKMS device creates the default files and
> + *              directories.
> + */
> +
> +static void test_device_default_files(void)
> +{
> +	igt_vkms_t *dev;
> +
> +	static const char *files[] = {
> +		"enabled",
> +	};
> +
> +	static const char *dirs[] = {
> +		"planes",
> +		"crtcs",
> +		"encoders",
> +		"connectors",
> +	};
> +
> +	dev = igt_vkms_device_create(__func__);
> +	igt_assert(dev);
> +
> +	assert_default_files(dev->path,
> +			     files, ARRAY_SIZE(files),
> +			     dirs, ARRAY_SIZE(dirs));
> +
> +	igt_vkms_device_destroy(dev);
> +}
> +
> +igt_main
> +{
> +	struct {
> +		const char *name;
> +		void (*fn)(void);
> +	} tests[] = {
> +		{ "device-default-files", test_device_default_files },
> +	};
> +
> +	igt_fixture {
> +		drm_load_module(DRIVER_VKMS);
> +		igt_require_vkms();
> +		igt_require_vkms_configfs();
> +		igt_vkms_destroy_all_devices();
> +	}
> +
> +	for (int i = 0; i < ARRAY_SIZE(tests); i++) {
> +		igt_subtest(tests[i].name)
> +			tests[i].fn();
> +	}
> +
> +	igt_fixture {
> +		igt_require_vkms();
> +		igt_require_vkms_configfs();
> +		igt_vkms_destroy_all_devices();
> +	}
> +}
> -- 
> 2.50.1
> 

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

* Re: [PATCH i-g-t v4 05/41] lib/vkms: Test plane default files
  2025-08-07  7:45 ` [PATCH i-g-t v4 05/41] lib/vkms: Test plane default files José Expósito
@ 2025-08-13 13:38   ` Kamil Konieczny
  0 siblings, 0 replies; 52+ messages in thread
From: Kamil Konieczny @ 2025-08-13 13:38 UTC (permalink / raw)
  To: José Expósito
  Cc: igt-dev, louis.chauvet, zbigniew.kempczynski, karthik.b.s

Hi José,
On 2025-08-07 at 09:45:14 +0200, José Expósito wrote:
> Add a helper to create a plane and a test checking that the default
> files and directories are created.
> 
> Signed-off-by: José Expósito <jose.exposito89@gmail.com>

As Louis was ok with keeping 'pipeline' name so imho you could keep
Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>

Btw change into const could be done later. This will leave
only 16/41 for review.

Regards,
Kamil

> ---
>  lib/igt_vkms.c             | 76 ++++++++++++++++++++++++++++++++++++++
>  lib/igt_vkms.h             |  4 ++
>  tests/vkms/vkms_configfs.c | 33 +++++++++++++++++
>  3 files changed, 113 insertions(+)
> 
> diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
> index 7d3575ca0..7c789ea0d 100644
> --- a/lib/igt_vkms.c
> +++ b/lib/igt_vkms.c
> @@ -23,6 +23,13 @@
>  #define VKMS_ROOT_DIR_NAME		"vkms"
>  #define VKMS_FILE_ENABLED		"enabled"
>  
> +enum vkms_pipeline_item {
> +	VKMS_PIPELINE_ITEM_PLANE,
> +	VKMS_PIPELINE_ITEM_CRTC,
> +	VKMS_PIPELINE_ITEM_ENCODER,
> +	VKMS_PIPELINE_ITEM_CONNECTOR,
> +};
> +
>  /**
>   * SECTION:igt_vkms
>   * @short_description: Helpers to create and configure VKMS devices
> @@ -96,6 +103,48 @@ static void write_bool(const char *path, bool value)
>  	write_int(path, value ? 1 : 0);
>  }
>  
> +static const char *get_pipeline_item_dir_name(enum vkms_pipeline_item item)
> +{
> +	switch (item) {
> +	case VKMS_PIPELINE_ITEM_PLANE:
> +		return "planes";
> +	case VKMS_PIPELINE_ITEM_CRTC:
> +		return "crtcs";
> +	case VKMS_PIPELINE_ITEM_ENCODER:
> +		return "encoders";
> +	case VKMS_PIPELINE_ITEM_CONNECTOR:
> +		return "connectors";
> +	}
> +
> +	igt_assert(!"Cannot be reached: Unknown VKMS pipeline item type");
> +}
> +
> +static void get_pipeline_item_path(igt_vkms_t *dev,
> +				   enum vkms_pipeline_item item,
> +				   const char *name, char *path, size_t len)
> +{
> +	const char *item_dir_name;
> +	int ret;
> +
> +	item_dir_name = get_pipeline_item_dir_name(item);
> +	ret = snprintf(path, len, "%s/%s/%s", dev->path, item_dir_name, name);
> +	igt_assert(ret >= 0 && ret < len);
> +}
> +
> +static void add_pipeline_item(igt_vkms_t *dev, enum vkms_pipeline_item item,
> +			      const char *name)
> +{
> +	char path[PATH_MAX];
> +	int ret;
> +
> +	get_pipeline_item_path(dev, item, name, path, sizeof(path));
> +
> +	ret = mkdir(path, 0777);
> +	igt_assert_f(ret == 0,
> +		     "Unable to mkdir directory '%s'. Got errno=%d (%s)\n",
> +		     path, errno, strerror(errno));
> +}
> +
>  /**
>   * igt_require_vkms_configfs:
>   *
> @@ -130,6 +179,21 @@ void igt_vkms_get_device_enabled_path(igt_vkms_t *dev, char *path, size_t len)
>  	igt_assert(ret >= 0 && ret < len);
>  }
>  
> +/**
> + * igt_vkms_get_plane_path:
> + * @dev: Device containing the plane
> + * @name: Plane name
> + * @path: Output path
> + * @len: Maximum @path length
> + *
> + * Returns the plane path.
> + */
> +void igt_vkms_get_plane_path(igt_vkms_t *dev, const char *name, char *path,
> +			     size_t len)
> +{
> +	get_pipeline_item_path(dev, VKMS_PIPELINE_ITEM_PLANE, name, path, len);
> +}
> +
>  /**
>   * igt_vkms_device_create:
>   * @name: VKMS device name
> @@ -302,3 +366,15 @@ void igt_vkms_device_set_enabled(igt_vkms_t *dev, bool enabled)
>  
>  	write_bool(path, enabled);
>  }
> +
> +/**
> + * igt_vkms_device_add_plane:
> + * @dev: Device to add the plane to
> + * @name: Plane name
> + *
> + * Add a new plane to the VKMS device.
> + */
> +void igt_vkms_device_add_plane(igt_vkms_t *dev, const char *name)
> +{
> +	add_pipeline_item(dev, VKMS_PIPELINE_ITEM_PLANE, name);
> +}
> diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
> index 8b3595b00..3bda3196d 100644
> --- a/lib/igt_vkms.h
> +++ b/lib/igt_vkms.h
> @@ -23,6 +23,8 @@ typedef struct igt_vkms {
>  void igt_require_vkms_configfs(void);
>  
>  void igt_vkms_get_device_enabled_path(igt_vkms_t *dev, char *path, size_t len);
> +void igt_vkms_get_plane_path(igt_vkms_t *dev, const char *name, char *path,
> +			     size_t len);
>  
>  igt_vkms_t *igt_vkms_device_create(const char *name);
>  void igt_vkms_device_destroy(igt_vkms_t *dev);
> @@ -31,4 +33,6 @@ void igt_vkms_destroy_all_devices(void);
>  bool igt_vkms_device_is_enabled(igt_vkms_t *dev);
>  void igt_vkms_device_set_enabled(igt_vkms_t *dev, bool enabled);
>  
> +void igt_vkms_device_add_plane(igt_vkms_t *dev, const char *name);
> +
>  #endif /* __IGT_VKMS_H__ */
> diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
> index d38791ccf..fa429d28f 100644
> --- a/tests/vkms/vkms_configfs.c
> +++ b/tests/vkms/vkms_configfs.c
> @@ -178,6 +178,38 @@ static void test_device_wrong_values(void)
>  	igt_vkms_device_destroy(dev);
>  }
>  
> +/**
> + * SUBTEST: plane-default-files
> + * Description: Test that creating a plane creates the default files and
> + *              directories.
> + */
> +
> +static void test_plane_default_files(void)
> +{
> +	igt_vkms_t *dev;
> +	char path[PATH_MAX];
> +
> +	static const char *files[] = {
> +		"type",
> +	};
> +
> +	static const char *dirs[] = {
> +		"possible_crtcs",
> +	};
> +
> +	dev = igt_vkms_device_create(__func__);
> +	igt_assert(dev);
> +
> +	igt_vkms_device_add_plane(dev, "plane0");
> +	igt_vkms_get_plane_path(dev, "plane0", path, sizeof(path));
> +
> +	assert_default_files(path,
> +			     files, ARRAY_SIZE(files),
> +			     dirs, ARRAY_SIZE(dirs));
> +
> +	igt_vkms_device_destroy(dev);
> +}
> +
>  igt_main
>  {
>  	struct {
> @@ -187,6 +219,7 @@ igt_main
>  		{ "device-default-files", test_device_default_files },
>  		{ "device-default-values", test_device_default_values },
>  		{ "device-wrong-values", test_device_wrong_values },
> +		{ "plane-default-files", test_plane_default_files },
>  	};
>  
>  	igt_fixture {
> -- 
> 2.50.1
> 

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

* Re: [PATCH i-g-t v4 02/41] lib/vkms: Add minimal VKMS library and test device default files
  2025-08-13 13:28   ` Kamil Konieczny
@ 2025-08-14 10:52     ` José Expósito
  2025-08-28 10:49       ` Kamil Konieczny
  0 siblings, 1 reply; 52+ messages in thread
From: José Expósito @ 2025-08-14 10:52 UTC (permalink / raw)
  To: Kamil Konieczny
  Cc: igt-dev, louis.chauvet, zbigniew.kempczynski, karthik.b.s,
	Jim Shargo, Marius Vlad

Hi Kamil,

On Wed, Aug 13, 2025 at 03:28:26PM +0200, Kamil Konieczny wrote:
> Hi José,
> On 2025-08-07 at 09:45:11 +0200, José Expósito wrote:
> > Create a library containing helpers for creating VKMS devices and
> > configuring them dynamically using configfs.
> > For the moment, add the minimal number of helpers to be able to start
> > testing VKMS's configfs support: Create device, destroy device and
> > destroy all devices.
> > 
> > Also, include the simplest possible test using those helpers (checking
> > the device's default files) and the scaffolding required to generate
> > the documentation.
> > 
> > Co-developed-by: Jim Shargo <jshargo@chromium.org>
> > Signed-off-by: Jim Shargo <jshargo@chromium.org>
> > Co-developed-by: Marius Vlad <marius.vlad@collabora.com>
> > Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
> > Signed-off-by: José Expósito <jose.exposito89@gmail.com>
> > ---
> >  lib/igt_vkms.c             | 206 +++++++++++++++++++++++++++++++++++++
> >  lib/igt_vkms.h             |  27 +++++
> >  lib/meson.build            |   1 +
> >  meson.build                |   8 ++
> >  tests/meson.build          |   2 +
> >  tests/vkms/meson.build     |  13 +++
> >  tests/vkms/vkms_configfs.c | 131 +++++++++++++++++++++++
> 
> I checked changes as they are only minimal, imho you could keep
> Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
> 
> Also, you removed changes from testplan and docs building so
> for build/meson changes
> Reviewed-by: Kamil Konieczny <kamil.konieczny@linux.intel.com>
> 
> Btw checkpatch suggests even one more const 
> static const char * array should probably be static const char * const
> but you could fix that later.

Thanks a lot for your reviews. Almost all patches are reviewed now.
Let's see if the DRM series get merged soon and we can merge this
one as well :)

About the additional const, I noticed it, but then ARRAY_SIZE() would
trigger a warning about that extra const, so I decided to ignore
checkpatch and avoid unnecessary refactors.

Thanks,
Jose

> Regards,
> Kamil
> 
> >  7 files changed, 388 insertions(+)
> >  create mode 100644 lib/igt_vkms.c
> >  create mode 100644 lib/igt_vkms.h
> >  create mode 100644 tests/vkms/meson.build
> >  create mode 100644 tests/vkms/vkms_configfs.c
> > 
> > diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
> > new file mode 100644
> > index 000000000..03931d2e4
> > --- /dev/null
> > +++ b/lib/igt_vkms.c
> > @@ -0,0 +1,206 @@
> > +// SPDX-License-Identifier: MIT
> > +/*
> > + * Copyright © 2023 Google LLC.
> > + * Copyright © 2023 Collabora, Ltd.
> > + * Copyright © 2024-2025 Red Hat, Inc.
> > + */
> > +
> > +#include <dirent.h>
> > +#include <errno.h>
> > +#include <ftw.h>
> > +#include <limits.h>
> > +#include <string.h>
> > +#include <sys/stat.h>
> > +
> > +#include "igt.h"
> > +#include "igt_vkms.h"
> > +
> > +#define VKMS_ROOT_DIR_NAME		"vkms"
> > +
> > +/**
> > + * SECTION:igt_vkms
> > + * @short_description: Helpers to create and configure VKMS devices
> > + * @title: VKMS
> > + * @include: igt_vkms.h
> > + *
> > + * Helpers for creating VKMS devices and configuring them dynamically.
> > + *
> > + * First, create a VKMS device, next, add pipeline items (planes, CRTCs,
> > + * encoders, CRTCs and connectors) compose the pipeline by attaching each item
> > + * using the _attach_ functions and finally, enable the VKMS device.
> > + */
> > +
> > +static const char *mount_vkms_configfs(void)
> > +{
> > +	static char vkms_root_path[PATH_MAX];
> > +	const char *configfs_path;
> > +	int ret;
> > +
> > +	configfs_path = igt_configfs_mount();
> > +	igt_assert_f(configfs_path, "Error mounting configfs");
> > +
> > +	ret = snprintf(vkms_root_path, sizeof(vkms_root_path), "%s/%s",
> > +		       configfs_path, VKMS_ROOT_DIR_NAME);
> > +	igt_assert(ret >= 0 && ret < sizeof(vkms_root_path));
> > +
> > +	return vkms_root_path;
> > +}
> > +
> > +/**
> > + * igt_require_vkms_configfs:
> > + *
> > + * Require that VKMS supports configfs configuration.
> > + */
> > +void igt_require_vkms_configfs(void)
> > +{
> > +	const char *vkms_root_path;
> > +	DIR *dir;
> > +
> > +	vkms_root_path = mount_vkms_configfs();
> > +
> > +	dir = opendir(vkms_root_path);
> > +	igt_require(dir);
> > +	if (dir)
> > +		closedir(dir);
> > +}
> > +
> > +/**
> > + * igt_vkms_device_create:
> > + * @name: VKMS device name
> > + *
> > + * Create a directory in the ConfigFS VKMS root directory, where the entire
> > + * pipeline will be configured.
> > + */
> > +igt_vkms_t *igt_vkms_device_create(const char *name)
> > +{
> > +	igt_vkms_t *dev;
> > +	const char *vkms_root_path;
> > +	size_t path_len;
> > +	DIR *dir;
> > +	int ret;
> > +
> > +	dev = calloc(1, sizeof(*dev));
> > +
> > +	vkms_root_path = mount_vkms_configfs();
> > +
> > +	path_len = strlen(vkms_root_path) + strlen(name) + 2;
> > +	dev->path = malloc(path_len);
> > +	ret = snprintf(dev->path, path_len, "%s/%s", vkms_root_path, name);
> > +	igt_assert(ret >= 0 && ret < path_len);
> > +
> > +	dir = opendir(dev->path);
> > +	if (dir) {
> > +		igt_debug("Device at path %s already exists\n", dev->path);
> > +		closedir(dir);
> > +	} else {
> > +		ret = mkdir(dev->path, 0777);
> > +		if (ret != 0) {
> > +			free(dev->path);
> > +			free(dev);
> > +			dev = NULL;
> > +		}
> > +	}
> > +
> > +	return dev;
> > +}
> > +
> > +static int detach_pipeline_items(const char *path, const struct stat *info,
> > +				 const int typeflag, struct FTW *pathinfo)
> > +{
> > +	/*
> > +	 * Level 4 are the links in the possible_* directories:
> > +	 * vkms/<dev>/<pipeline items>/<pipeline item>/<possible_*>/<links>
> > +	 */
> > +	if (pathinfo->level == 4 && typeflag == FTW_SL) {
> > +		igt_debug("Detaching pipeline item %s\n", path);
> > +		return unlink(path);
> > +	}
> > +
> > +	/* Ignore the other files, they are removed by remove_pipeline_items */
> > +	return 0;
> > +}
> > +
> > +static int remove_pipeline_items(const char *path, const struct stat *info,
> > +				 const int typeflag, struct FTW *pathinfo)
> > +{
> > +	/* Level 0 is the device root directory: vkms/<dev> */
> > +	if (pathinfo->level == 0) {
> > +		igt_debug("Removing pipeline item %s\n", path);
> > +		return rmdir(path);
> > +	}
> > +
> > +	/*
> > +	 * Level 2 directories are the pipeline items:
> > +	 * vkms/<dev>/<pipeline items>/<pipeline item>
> > +	 */
> > +	if (pathinfo->level == 2 && typeflag == FTW_DP) {
> > +		igt_debug("Removing pipeline item %s\n", path);
> > +		return rmdir(path);
> > +	}
> > +
> > +	/* Ignore the other files, they are removed by VKMS */
> > +	return 0;
> > +}
> > +
> > +static int remove_device_dir(igt_vkms_t *dev)
> > +{
> > +	int ret;
> > +
> > +	ret = nftw(dev->path, detach_pipeline_items, 64, FTW_DEPTH | FTW_PHYS);
> > +	if (ret)
> > +		return ret;
> > +
> > +	ret = nftw(dev->path, remove_pipeline_items, 64, FTW_DEPTH | FTW_PHYS);
> > +	return ret;
> > +}
> > +
> > +/**
> > + * igt_vkms_device_destroy:
> > + * @dev: Device to destroy
> > + *
> > + * Remove and free the VKMS device.
> > + */
> > +void igt_vkms_device_destroy(igt_vkms_t *dev)
> > +{
> > +	int ret;
> > +
> > +	igt_assert(dev);
> > +
> > +	ret = remove_device_dir(dev);
> > +	igt_assert_f(ret == 0,
> > +		     "Unable to rmdir device directory '%s'. Got errno=%d (%s)\n",
> > +		     dev->path, errno, strerror(errno));
> > +
> > +	free(dev->path);
> > +	free(dev);
> > +}
> > +
> > +/**
> > + * igt_vkms_destroy_all_devices:
> > + *
> > + * Remove all VKMS devices created via configfs.
> > + */
> > +void igt_vkms_destroy_all_devices(void)
> > +{
> > +	igt_vkms_t *dev;
> > +	const char *vkms_root_path;
> > +	DIR *dir;
> > +	struct dirent *ent;
> > +
> > +	vkms_root_path = mount_vkms_configfs();
> > +	dir = opendir(vkms_root_path);
> > +	igt_assert_f(dir, "VKMS configfs directory not available at '%s'. "
> > +		     "Got errno=%d (%s)\n", vkms_root_path, errno,
> > +		     strerror(errno));
> > +
> > +	while ((ent = readdir(dir)) != NULL) {
> > +		if (strcmp(ent->d_name, ".") == 0 ||
> > +		    strcmp(ent->d_name, "..") == 0)
> > +			continue;
> > +
> > +		dev = igt_vkms_device_create(ent->d_name);
> > +		igt_vkms_device_destroy(dev);
> > +	}
> > +
> > +	closedir(dir);
> > +}
> > diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
> > new file mode 100644
> > index 000000000..95d7a53cd
> > --- /dev/null
> > +++ b/lib/igt_vkms.h
> > @@ -0,0 +1,27 @@
> > +/* SPDX-License-Identifier: MIT */
> > +/*
> > + * Copyright © 2023 Google LLC.
> > + * Copyright © 2023 Collabora, Ltd.
> > + * Copyright © 2024-2025 Red Hat, Inc.
> > + */
> > +
> > +#ifndef __IGT_VKMS_H__
> > +#define __IGT_VKMS_H__
> > +
> > +/**
> > + * igt_vkms_t:
> > + * @path: VKMS root directory inside configfs mounted directory
> > + *
> > + * A struct representing a VKMS device.
> > + */
> > +typedef struct igt_vkms {
> > +	char *path;
> > +} igt_vkms_t;
> > +
> > +void igt_require_vkms_configfs(void);
> > +
> > +igt_vkms_t *igt_vkms_device_create(const char *name);
> > +void igt_vkms_device_destroy(igt_vkms_t *dev);
> > +void igt_vkms_destroy_all_devices(void);
> > +
> > +#endif /* __IGT_VKMS_H__ */
> > diff --git a/lib/meson.build b/lib/meson.build
> > index 2eaca42a4..62ba7f262 100644
> > --- a/lib/meson.build
> > +++ b/lib/meson.build
> > @@ -50,6 +50,7 @@ lib_sources = [
> >  	'igt_types.c',
> >  	'igt_vec.c',
> >  	'igt_vgem.c',
> > +	'igt_vkms.c',
> >  	'igt_x86.c',
> >  	'instdone.c',
> >  	'intel_allocator.c',
> > diff --git a/meson.build b/meson.build
> > index aeed3b1d2..f7ae427b3 100644
> > --- a/meson.build
> > +++ b/meson.build
> > @@ -290,6 +290,7 @@ msmdir = join_paths(libexecdir, 'msm')
> >  panfrostdir = join_paths(libexecdir, 'panfrost')
> >  v3ddir = join_paths(libexecdir, 'v3d')
> >  vc4dir = join_paths(libexecdir, 'vc4')
> > +vkmsdir = join_paths(libexecdir, 'vkms')
> >  vmwgfxdir = join_paths(libexecdir, 'vmwgfx')
> >  mandir = get_option('mandir')
> >  pkgconfigdir = join_paths(libdir, 'pkgconfig')
> > @@ -352,6 +353,12 @@ if get_option('use_rpath')
> >  	endforeach
> >  	vc4_rpathdir = join_paths(vc4_rpathdir, libdir)
> >  
> > +	vkms_rpathdir = '$ORIGIN'
> > +	foreach p : vkmsdir.split('/')
> > +		vkms_rpathdir = join_paths(vkms_rpathdir, '..')
> > +	endforeach
> > +	vkms_rpathdir = join_paths(vkms_rpathdir, libdir)
> > +
> >  	vmwgfx_rpathdir = '$ORIGIN'
> >  	foreach p : vmwgfxdir.split('/')
> >  		vmwgfx_rpathdir = join_paths(vmwgfx_rpathdir, '..')
> > @@ -365,6 +372,7 @@ else
> >  	panfrost_rpathdir = ''
> >  	v3d_rpathdir = ''
> >  	vc4_rpathdir = ''
> > +	vkms_rpathdir = ''
> >  	vmwgfx_rpathdir = ''
> >  endif
> >  
> > diff --git a/tests/meson.build b/tests/meson.build
> > index 5c01c64e9..a7b9375ed 100644
> > --- a/tests/meson.build
> > +++ b/tests/meson.build
> > @@ -490,6 +490,8 @@ subdir('v3d')
> >  
> >  subdir('vc4')
> >  
> > +subdir('vkms')
> > +
> >  subdir('vmwgfx')
> >  
> >  gen_testlist = find_program('generate_testlist.sh')
> > diff --git a/tests/vkms/meson.build b/tests/vkms/meson.build
> > new file mode 100644
> > index 000000000..e55ba32ba
> > --- /dev/null
> > +++ b/tests/vkms/meson.build
> > @@ -0,0 +1,13 @@
> > +vkms_progs = [
> > +	'vkms_configfs',
> > +]
> > +vkms_deps = test_deps
> > +
> > +foreach prog : vkms_progs
> > +	test_executables += executable(prog, prog + '.c',
> > +				       dependencies : vkms_deps,
> > +				       install_dir : vkmsdir,
> > +				       install_rpath : vkms_rpathdir,
> > +				       install : true)
> > +	test_list += join_paths('vkms', prog)
> > +endforeach
> > diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
> > new file mode 100644
> > index 000000000..f659a7a22
> > --- /dev/null
> > +++ b/tests/vkms/vkms_configfs.c
> > @@ -0,0 +1,131 @@
> > +// SPDX-License-Identifier: MIT
> > +/*
> > + * Copyright © 2023 Google LLC.
> > + * Copyright © 2023 Collabora, Ltd.
> > + * Copyright © 2024-2025 Red Hat, Inc.
> > + */
> > +
> > +/**
> > + * TEST: Tests for VKMS configfs support.
> > + * Category: Display
> > + * Mega feature: General Display Features
> > + * Sub-category: uapi
> > + * Functionality: vkms,configfs
> > + * Test category: functionality test
> > + */
> > +
> > +#include <dirent.h>
> > +#include <limits.h>
> > +#include <string.h>
> > +#include <sys/stat.h>
> > +
> > +#include "drmtest.h"
> > +#include "igt.h"
> > +#include "igt_vkms.h"
> > +
> > +static void assert_default_files(const char *path,
> > +				 const char **files, size_t n_files,
> > +				 const char **dirs, size_t n_dirs)
> > +{
> > +	DIR *dir;
> > +	struct dirent *ent;
> > +	int total = 0;
> > +	int ret;
> > +
> > +	/* Check that the number of files/directories matches the expected */
> > +	dir = opendir(path);
> > +	igt_assert(dir);
> > +	while ((ent = readdir(dir)) != NULL) {
> > +		if (strcmp(ent->d_name, ".") == 0 ||
> > +		    strcmp(ent->d_name, "..") == 0)
> > +			continue;
> > +
> > +		total++;
> > +	}
> > +	igt_assert_eq(total, n_dirs + n_files);
> > +	closedir(dir);
> > +
> > +	/* Check that the files/directories are present */
> > +	for (int i = 0; i < n_files; i++) {
> > +		char file_path[PATH_MAX];
> > +		struct stat buf;
> > +
> > +		ret = snprintf(file_path, sizeof(file_path), "%s/%s", path,
> > +			       files[i]);
> > +		igt_assert(ret >= 0 && ret < sizeof(file_path));
> > +
> > +		igt_assert_f(stat(file_path, &buf) == 0,
> > +			     "File %s does not exists\n", file_path);
> > +	}
> > +
> > +	for (int i = 0; i < n_dirs; i++) {
> > +		char dir_path[PATH_MAX];
> > +
> > +		ret = snprintf(dir_path, sizeof(dir_path), "%s/%s", path,
> > +			       dirs[i]);
> > +		igt_assert(ret >= 0 && ret < sizeof(dir_path));
> > +
> > +		dir = opendir(dir_path);
> > +		igt_assert_f(dir, "Directory %s does not exists\n", dir_path);
> > +		closedir(dir);
> > +	}
> > +}
> > +
> > +/**
> > + * SUBTEST: device-default-files
> > + * Description: Test that creating a VKMS device creates the default files and
> > + *              directories.
> > + */
> > +
> > +static void test_device_default_files(void)
> > +{
> > +	igt_vkms_t *dev;
> > +
> > +	static const char *files[] = {
> > +		"enabled",
> > +	};
> > +
> > +	static const char *dirs[] = {
> > +		"planes",
> > +		"crtcs",
> > +		"encoders",
> > +		"connectors",
> > +	};
> > +
> > +	dev = igt_vkms_device_create(__func__);
> > +	igt_assert(dev);
> > +
> > +	assert_default_files(dev->path,
> > +			     files, ARRAY_SIZE(files),
> > +			     dirs, ARRAY_SIZE(dirs));
> > +
> > +	igt_vkms_device_destroy(dev);
> > +}
> > +
> > +igt_main
> > +{
> > +	struct {
> > +		const char *name;
> > +		void (*fn)(void);
> > +	} tests[] = {
> > +		{ "device-default-files", test_device_default_files },
> > +	};
> > +
> > +	igt_fixture {
> > +		drm_load_module(DRIVER_VKMS);
> > +		igt_require_vkms();
> > +		igt_require_vkms_configfs();
> > +		igt_vkms_destroy_all_devices();
> > +	}
> > +
> > +	for (int i = 0; i < ARRAY_SIZE(tests); i++) {
> > +		igt_subtest(tests[i].name)
> > +			tests[i].fn();
> > +	}
> > +
> > +	igt_fixture {
> > +		igt_require_vkms();
> > +		igt_require_vkms_configfs();
> > +		igt_vkms_destroy_all_devices();
> > +	}
> > +}
> > -- 
> > 2.50.1
> > 

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

* Re: [PATCH i-g-t v4 16/41] lib/vkms: Test connector invalid values
  2025-08-07  7:45 ` [PATCH i-g-t v4 16/41] lib/vkms: Test connector invalid values José Expósito
@ 2025-08-28 10:48   ` Kamil Konieczny
  0 siblings, 0 replies; 52+ messages in thread
From: Kamil Konieczny @ 2025-08-28 10:48 UTC (permalink / raw)
  To: José Expósito
  Cc: igt-dev, louis.chauvet, zbigniew.kempczynski, karthik.b.s

Hi José,
On 2025-08-07 at 09:45:25 +0200, José Expósito wrote:
> For a VKMS connector, it is only possible to set invalid values in the
> connector status.
> 
> Test that setting wrong values fails and that the connector is not
> accidentally changed.
> 
> Signed-off-by: José Expósito <jose.exposito89@gmail.com>
> ---
>  lib/igt_vkms.c             | 24 ++++++++++++++++++
>  lib/igt_vkms.h             |  2 ++
>  tests/vkms/vkms_configfs.c | 50 ++++++++++++++++++++++++++++++++++++++
>  3 files changed, 76 insertions(+)
> 
> diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
> index 5d9e13ed7..a86d5e05d 100644
> --- a/lib/igt_vkms.c
> +++ b/lib/igt_vkms.c
> @@ -613,3 +613,27 @@ int igt_vkms_connector_get_status(igt_vkms_t *dev, const char *name)
>  
>  	return read_int(path);
>  }
> +
> +/**
> + * igt_vkms_connector_set_status:
> + * @dev: Device the connector belongs to
> + * @name: Connector name
> + * @type: DRM_MODE_CONNECTED, DRM_MODE_DISCONNECTED or
> + * DRM_MODE_UNKNOWNCONNECTION
> + *
> + * Set a new status for the connector
> + */
> +void igt_vkms_connector_set_status(igt_vkms_t *dev, const char *name,
> +				   int status)
> +{
> +	char path[PATH_MAX];
> +
> +	if (status != DRM_MODE_CONNECTED &&
> +	    status != DRM_MODE_DISCONNECTED &&
> +	    status != DRM_MODE_UNKNOWNCONNECTION)
> +		igt_assert(!"Cannot be reached: Unknown connector status");
> +
> +	igt_vkms_get_connector_status_path(dev, name, path, sizeof(path));
> +
> +	write_int(path, status);
> +}
> diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
> index 13d7ed094..596990547 100644
> --- a/lib/igt_vkms.h
> +++ b/lib/igt_vkms.h
> @@ -58,5 +58,7 @@ void igt_vkms_device_add_encoder(igt_vkms_t *dev, const char *name);
>  
>  void igt_vkms_device_add_connector(igt_vkms_t *dev, const char *name);
>  int igt_vkms_connector_get_status(igt_vkms_t *dev, const char *name);
> +void igt_vkms_connector_set_status(igt_vkms_t *dev, const char *name,
> +				   int status);
>  
>  #endif /* __IGT_VKMS_H__ */
> diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
> index b3fafc069..987491373 100644
> --- a/tests/vkms/vkms_configfs.c
> +++ b/tests/vkms/vkms_configfs.c
> @@ -485,6 +485,55 @@ static void test_connector_default_values(void)
>  	igt_vkms_device_destroy(dev);
>  }
>  
> +/**
> + * SUBTEST: connector-wrong-values
> + * Description: Check that setting unexpected values doesn't work.
> + */
> +
> +static void test_connector_wrong_values(void)
> +{
> +	struct invalid_value invalid_status_values[] = {
> +		{ "", 0 },

Write of zero bytes will not reach your driver, see man 2 write.
With this line removed

Acked-by: Kamil Konieczny <kamil.konieczny@linux.intel.com>

PS. Louis - gentle ping on review this last patch.

> +		{ "\0", 1 },

btw imho 
		{ "", 1 },
is also valid.

> +		{ "-1", 2 },
> +		{ "0", 1 },
> +		{ "4", 1 },
> +		{ "connected", 10 },
> +	};
> +	igt_vkms_t *dev;
> +	char path[PATH_MAX];
> +	int fd;
> +	int ret;
> +
> +	/* Create a device with a disconnected connector */
> +	dev = igt_vkms_device_create(__func__);
> +	igt_assert(dev);
> +
> +	igt_vkms_device_add_connector(dev, "connector0");
> +	igt_vkms_connector_set_status(dev, "connector0", DRM_MODE_DISCONNECTED);
> +	igt_assert_eq(igt_vkms_connector_get_status(dev, "connector0"),
> +		      DRM_MODE_DISCONNECTED);
> +	igt_vkms_get_connector_status_path(dev, "connector0", path, sizeof(path));
> +
> +	/* Test invalid values for "status" */
> +	for (int i = 0; i < ARRAY_SIZE(invalid_status_values); i++) {
> +		struct invalid_value v = invalid_status_values[i];
> +
> +		fd = open(path, O_WRONLY);
> +		igt_assert_f(fd >= 0, "Error opening '%s'\n", path);
> +
> +		ret = write(fd, v.value, v.size);
> +		igt_assert(ret <= 0);

With zero-byte write removed this should be 'ret < 0'?

Regards,
Kamil

> +
> +		close(fd);
> +	}
> +
> +	igt_assert_eq(igt_vkms_connector_get_status(dev, "connector0"),
> +		      DRM_MODE_DISCONNECTED);
> +
> +	igt_vkms_device_destroy(dev);
> +}
> +
>  igt_main
>  {
>  	struct {
> @@ -505,6 +554,7 @@ igt_main
>  		{ "encoder-default-files", test_encoder_default_files },
>  		{ "connector-default-files", test_connector_default_files },
>  		{ "connector-default-values", test_connector_default_values },
> +		{ "connector-wrong-values", test_connector_wrong_values },
>  	};
>  
>  	igt_fixture {
> -- 
> 2.50.1
> 

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

* Re: [PATCH i-g-t v4 02/41] lib/vkms: Add minimal VKMS library and test device default files
  2025-08-14 10:52     ` José Expósito
@ 2025-08-28 10:49       ` Kamil Konieczny
  0 siblings, 0 replies; 52+ messages in thread
From: Kamil Konieczny @ 2025-08-28 10:49 UTC (permalink / raw)
  To: José Expósito
  Cc: igt-dev, louis.chauvet, zbigniew.kempczynski, karthik.b.s,
	Jim Shargo, Marius Vlad

Hi José,
On 2025-08-14 at 12:52:22 +0200, José Expósito wrote:
> Hi Kamil,
> 
> On Wed, Aug 13, 2025 at 03:28:26PM +0200, Kamil Konieczny wrote:
> > Hi José,
> > On 2025-08-07 at 09:45:11 +0200, José Expósito wrote:
> > > Create a library containing helpers for creating VKMS devices and
> > > configuring them dynamically using configfs.
> > > For the moment, add the minimal number of helpers to be able to start
> > > testing VKMS's configfs support: Create device, destroy device and
> > > destroy all devices.
> > > 
> > > Also, include the simplest possible test using those helpers (checking
> > > the device's default files) and the scaffolding required to generate
> > > the documentation.
> > > 
> > > Co-developed-by: Jim Shargo <jshargo@chromium.org>
> > > Signed-off-by: Jim Shargo <jshargo@chromium.org>
> > > Co-developed-by: Marius Vlad <marius.vlad@collabora.com>
> > > Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
> > > Signed-off-by: José Expósito <jose.exposito89@gmail.com>
> > > ---
> > >  lib/igt_vkms.c             | 206 +++++++++++++++++++++++++++++++++++++
> > >  lib/igt_vkms.h             |  27 +++++
> > >  lib/meson.build            |   1 +
> > >  meson.build                |   8 ++
> > >  tests/meson.build          |   2 +
> > >  tests/vkms/meson.build     |  13 +++
> > >  tests/vkms/vkms_configfs.c | 131 +++++++++++++++++++++++
> > 
> > I checked changes as they are only minimal, imho you could keep
> > Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
> > 
> > Also, you removed changes from testplan and docs building so
> > for build/meson changes
> > Reviewed-by: Kamil Konieczny <kamil.konieczny@linux.intel.com>
> > 
> > Btw checkpatch suggests even one more const 
> > static const char * array should probably be static const char * const
> > but you could fix that later.
> 
> Thanks a lot for your reviews. Almost all patches are reviewed now.
> Let's see if the DRM series get merged soon and we can merge this
> one as well :)
> 
> About the additional const, I noticed it, but then ARRAY_SIZE() would
> trigger a warning about that extra const, so I decided to ignore
> checkpatch and avoid unnecessary refactors.

Makes sense, thx for explanation.

Regards,
Kamil

> 
> Thanks,
> Jose
> 
> > Regards,
> > Kamil
> > 
> > >  7 files changed, 388 insertions(+)
> > >  create mode 100644 lib/igt_vkms.c
> > >  create mode 100644 lib/igt_vkms.h
> > >  create mode 100644 tests/vkms/meson.build
> > >  create mode 100644 tests/vkms/vkms_configfs.c
> > > 
> > > diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
> > > new file mode 100644
> > > index 000000000..03931d2e4
> > > --- /dev/null
> > > +++ b/lib/igt_vkms.c
> > > @@ -0,0 +1,206 @@
> > > +// SPDX-License-Identifier: MIT
> > > +/*
> > > + * Copyright © 2023 Google LLC.
> > > + * Copyright © 2023 Collabora, Ltd.
> > > + * Copyright © 2024-2025 Red Hat, Inc.
> > > + */
> > > +

[cut]


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

end of thread, other threads:[~2025-08-28 10:49 UTC | newest]

Thread overview: 52+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-07  7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 01/41] lib/drmtest: Add VKMS as a known driver type José Expósito
2025-08-12 15:33   ` Kamil Konieczny
2025-08-07  7:45 ` [PATCH i-g-t v4 02/41] lib/vkms: Add minimal VKMS library and test device default files José Expósito
2025-08-13 13:28   ` Kamil Konieczny
2025-08-14 10:52     ` José Expósito
2025-08-28 10:49       ` Kamil Konieczny
2025-08-07  7:45 ` [PATCH i-g-t v4 03/41] lib/vkms: Allow to enable/disable VKMS devices José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 04/41] tests/vkms_configfs: Test device invalid values José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 05/41] lib/vkms: Test plane default files José Expósito
2025-08-13 13:38   ` Kamil Konieczny
2025-08-07  7:45 ` [PATCH i-g-t v4 06/41] lib/vkms: Test plane default values José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 07/41] lib/vkms: Test plane invalid values José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 08/41] tests/vkms_configfs: Test plane valid values José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 09/41] lib/vkms: Test CRTC default files José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 10/41] lib/vkms: Test CRTC default values José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 11/41] lib/vkms: Test CRTC invalid values José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 12/41] tests/vkms_configfs: Test CRTC valid values José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 13/41] lib/vkms: Test encoder default files José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 14/41] lib/vkms: Test connector " José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 15/41] lib/vkms: Test connector default values José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 16/41] lib/vkms: Test connector invalid values José Expósito
2025-08-28 10:48   ` Kamil Konieczny
2025-08-07  7:45 ` [PATCH i-g-t v4 17/41] tests/vkms_configfs: Test connector valid values José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 18/41] lib/vkms: Test attaching planes to CRTCs José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 19/41] lib/vkms: Test attaching encoders " José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 20/41] lib/vkms: Test attaching connectors to encoders José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 21/41] lib/igt_device_scan: Allow to find device by sysname José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 22/41] tests/vkms_configfs: Test enablement without pipeline items José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 23/41] lib/vkms: Create VKMS device from static config José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 24/41] tests/vkms_configfs: Test adding too many planes José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 25/41] tests/vkms_configfs: Test not adding a primary plane José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 26/41] tests/vkms_configfs: Test adding multiple primary planes José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 27/41] tests/vkms_configfs: Test adding multiple cursor planes José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 28/41] tests/vkms_configfs: Test adding a plane without possible CRTCs José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 29/41] tests/vkms_configfs: Test enabling a device without CRTCs José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 30/41] tests/vkms_configfs: Test enabling a device with too many CRTCs José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 31/41] tests/vkms_configfs: Test enabling a device without encoders José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 32/41] tests/vkms_configfs: Test enabling a device with too many encoders José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 33/41] tests/vkms_configfs: Test adding an encoder without possible CRTCs José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 34/41] tests/vkms_configfs: Test adding a CRTC without encoders José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 35/41] tests/vkms_configfs: Test enabling a device without connectors José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 36/41] tests/vkms_configfs: Test enabling a device with too many connectors José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 37/41] lib/vkms: Test changing enabled device planes José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 38/41] lib/vkms: Test changing enabled device CRTCs José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 39/41] lib/vkms: Test changing enabled device encoders José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 40/41] lib/vkms: Test changing enabled device connectors José Expósito
2025-08-07  7:45 ` [PATCH i-g-t v4 41/41] tests/vkms_configfs: Test connector hot-plug José Expósito
2025-08-07  9:02 ` ✓ i915.CI.BAT: success for VKMS configfs tests (rev7) Patchwork
2025-08-07  9:16 ` ✓ Xe.CI.BAT: " Patchwork
2025-08-07 10:16 ` ✗ Xe.CI.Full: failure " Patchwork
2025-08-07 11:08 ` ✗ i915.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;
as well as URLs for NNTP newsgroup(s).