All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH i-g-t] lib/kunit: Read results from debugfs
@ 2024-03-27 11:22 Janusz Krzysztofik
  2024-03-27 12:34 ` ✓ Fi.CI.BAT: success for " Patchwork
                   ` (5 more replies)
  0 siblings, 6 replies; 12+ messages in thread
From: Janusz Krzysztofik @ 2024-03-27 11:22 UTC (permalink / raw)
  To: igt-dev
  Cc: intel-gfx, intel-xe, Kamil Konieczny, Mauro Carvalho Chehab,
	Jonathan Cavitt, Lucas De Marchi, Janusz Krzysztofik

KUnit can provide KTAP reports from test modules via debugfs files, one
per test suite.  Using that source of test results instead of extracting
them from dmesg, where they may be interleaved with other kernel messages,
seems more easy to handle and less error prone.  Switch to it.

If KUnit debugfs support is found not configured then fall back to legacy
processing path.

Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
---
 lib/igt_kmod.c | 143 ++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 105 insertions(+), 38 deletions(-)

diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
index 1ec9c8a602..a5b170ca9c 100644
--- a/lib/igt_kmod.c
+++ b/lib/igt_kmod.c
@@ -28,6 +28,7 @@
 #include <limits.h>
 #include <pthread.h>
 #include <signal.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <sys/stat.h>
@@ -39,6 +40,7 @@
 
 #include "igt_aux.h"
 #include "igt_core.h"
+#include "igt_debugfs.h"
 #include "igt_kmod.h"
 #include "igt_ktap.h"
 #include "igt_sysfs.h"
@@ -864,6 +866,31 @@ static int open_parameters(const char *module_name)
 	return open(path, O_RDONLY);
 }
 
+static DIR *kunit_debugfs_open(void)
+{
+	const char *debugfs_path = igt_debugfs_mount();
+	int debugfs_fd, kunit_fd;
+	DIR *kunit_dir;
+
+	if (igt_debug_on(!debugfs_path))
+		return NULL;
+
+	debugfs_fd = open(debugfs_path, O_DIRECTORY);
+	if (igt_debug_on(debugfs_fd < 0))
+		return NULL;
+
+	kunit_fd = openat(debugfs_fd, "kunit", O_DIRECTORY);
+	close(debugfs_fd);
+	if (igt_debug_on(kunit_fd < 0))
+		return NULL;
+
+	kunit_dir = fdopendir(kunit_fd);
+	if (igt_debug_on(!kunit_dir))
+		close(kunit_fd);
+
+	return kunit_dir;
+}
+
 static bool kunit_set_filtering(const char *filter_glob, const char *filter,
 				const char *filter_action)
 {
@@ -1071,23 +1098,48 @@ static void kunit_results_free(struct igt_list_head *results,
 	free(*suite_name);
 }
 
-static int kunit_get_results(struct igt_list_head *results, int kmsg_fd,
-			     struct igt_ktap_results **ktap)
+static int kunit_get_results(struct igt_list_head *results, int debugfs_fd,
+			     const char *suite, struct igt_ktap_results **ktap)
 {
-	int err;
+	FILE *results_stream;
+	int ret, results_fd;
+	char *buf = NULL;
+	size_t size = 0;
+	ssize_t len;
+
+	if (igt_debug_on((ret = openat(debugfs_fd, suite, O_DIRECTORY), ret < 0)))
+		return ret;
+
+	results_fd = openat(ret, "results", O_RDONLY);
+	close(ret);
+	if (igt_debug_on(results_fd < 0))
+		return results_fd;
+
+	results_stream = fdopen(results_fd, "r");
+	if (igt_debug_on(!results_stream)) {
+		close(results_fd);
+		return -errno;
+	}
 
 	*ktap = igt_ktap_alloc(results);
-	if (igt_debug_on(!*ktap))
-		return -ENOMEM;
+	if (igt_debug_on(!*ktap)) {
+		ret = -ENOMEM;
+		goto out_fclose;
+	}
+
+	while (len = getline(&buf, &size, results_stream), len > 0) {
+		ret = igt_ktap_parse(buf, *ktap);
+		if (ret != -EINPROGRESS)
+			break;
+	}
 
-	do
-		igt_debug_on((err = kunit_kmsg_result_get(results, NULL, kmsg_fd, *ktap),
-			      err && err != -EINPROGRESS));
-	while (err == -EINPROGRESS);
+	free(buf);
 
 	igt_ktap_free(ktap);
+out_fclose:
+	fclose(results_stream);
 
-	return err;
+	return ret;
 }
 
 static void __igt_kunit_legacy(struct igt_ktest *tst,
@@ -1101,7 +1153,13 @@ static void __igt_kunit_legacy(struct igt_ktest *tst,
 	pthread_mutexattr_t attr;
 	IGT_LIST_HEAD(results);
 	unsigned long taints;
-	int ret;
+	int flags, ret;
+
+	igt_skip_on_f(tst->kmsg < 0, "Could not open /dev/kmsg\n");
+
+	igt_skip_on((flags = fcntl(tst->kmsg, F_GETFL, 0), flags < 0));
+	igt_skip_on_f(fcntl(tst->kmsg, F_SETFL, flags & ~O_NONBLOCK) == -1,
+		      "Could not set /dev/kmsg to blocking mode\n");
 
 	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
 
@@ -1224,30 +1282,20 @@ static void __igt_kunit_legacy(struct igt_ktest *tst,
 	igt_skip_on_f(ret, "KTAP parser failed\n");
 }
 
-static void kunit_get_tests_timeout(int signal)
-{
-	igt_skip("Timed out while trying to extract a list of KUnit test cases from /dev/kmsg\n");
-}
-
 static bool kunit_get_tests(struct igt_list_head *tests,
 			    struct igt_ktest *tst,
 			    const char *suite,
 			    const char *opts,
+			    DIR *debugfs_dir,
 			    struct igt_ktap_results **ktap)
 {
-	struct sigaction sigalrm = { .sa_handler = kunit_get_tests_timeout, },
-			 *saved;
 	struct igt_ktap_result *r, *rn;
+	struct dirent *subdir;
 	unsigned long taints;
-	int flags, err;
-
-	igt_skip_on_f(tst->kmsg < 0, "Could not open /dev/kmsg\n");
+	int debugfs_fd;
 
-	igt_skip_on((flags = fcntl(tst->kmsg, F_GETFL, 0), flags < 0));
-	igt_skip_on_f(fcntl(tst->kmsg, F_SETFL, flags & ~O_NONBLOCK) == -1,
-		      "Could not set /dev/kmsg to blocking mode\n");
-
-	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
+	if (igt_debug_on(!debugfs_dir))
+		return false;
 
 	/*
 	 * To get a list of test cases provided by a kunit test module, ask the
@@ -1260,19 +1308,32 @@ static bool kunit_get_tests(struct igt_list_head *tests,
 	if (igt_debug_on(!kunit_set_filtering(suite, "module=none", "skip")))
 		return false;
 
+	if (!suite) {
+		seekdir(debugfs_dir, 2);	/* directory itself and its parent */
+		errno = 0;
+		igt_skip_on_f(readdir(debugfs_dir) || errno,
+			      "Require empty KUnit debugfs directory\n");
+		rewinddir(debugfs_dir);
+	}
+
 	igt_skip_on(modprobe(tst->kmod, opts));
 	igt_skip_on(igt_kernel_tainted(&taints));
 
-	igt_skip_on(sigaction(SIGALRM, &sigalrm, saved));
-	alarm(10);
+	debugfs_fd = dirfd(debugfs_dir);
+	if (suite) {
+		igt_skip_on(kunit_get_results(tests, debugfs_fd, suite, ktap));
 
-	err = kunit_get_results(tests, tst->kmsg, ktap);
+	} else while (subdir = readdir(debugfs_dir), subdir) {
+		if (!(subdir->d_type & DT_DIR))
+			continue;
 
-	alarm(0);
-	igt_debug_on(sigaction(SIGALRM, saved, NULL));
+		if (!strcmp(subdir->d_name, ".") || !strcmp(subdir->d_name, ".."))
+			continue;
 
-	igt_skip_on_f(err,
-		      "KTAP parser failed while getting a list of test cases\n");
+		igt_warn_on_f(kunit_get_results(tests, debugfs_fd, subdir->d_name, ktap),
+			      "parsing KTAP report from test suite \"%s\" failed\n",
+			      subdir->d_name);
+	}
 
 	igt_list_for_each_entry_safe(r, rn, tests, link)
 		igt_require_f(r->code == IGT_EXIT_SKIP,
@@ -1287,6 +1348,7 @@ static void __igt_kunit(struct igt_ktest *tst,
 			const char *subtest,
 			const char *suite,
 			const char *opts,
+			int debugfs_fd,
 			struct igt_list_head *tests,
 			struct igt_ktap_results **ktap)
 {
@@ -1307,8 +1369,6 @@ static void __igt_kunit(struct igt_ktest *tst,
 
 			igt_skip_on(igt_kernel_tainted(&taints));
 
-			igt_fail_on(lseek(tst->kmsg, 0, SEEK_END) == -1 && errno);
-
 			igt_assert_lt(snprintf(glob, sizeof(glob), "%s.%s",
 					       t->suite_name, t->case_name),
 				      sizeof(glob));
@@ -1317,7 +1377,8 @@ static void __igt_kunit(struct igt_ktest *tst,
 			igt_assert_eq(modprobe(tst->kmod, opts), 0);
 			igt_assert_eq(igt_kernel_tainted(&taints), 0);
 
-			igt_assert_eq(kunit_get_results(&results, tst->kmsg, ktap), 0);
+			igt_assert_eq(kunit_get_results(&results, debugfs_fd,
+							t->suite_name, ktap), 0);
 
 			for (i = 0; i < 2; i++) {
 				kunit_result_free(&r, &suite_name, &case_name);
@@ -1388,6 +1449,7 @@ void igt_kunit(const char *module_name, const char *suite, const char *opts)
 	struct igt_ktest tst = { .kmsg = -1, };
 	struct igt_ktap_results *ktap = NULL;
 	const char *subtest = suite;
+	DIR *debugfs_dir = NULL;
 	IGT_LIST_HEAD(tests);
 
 	/*
@@ -1435,10 +1497,12 @@ void igt_kunit(const char *module_name, const char *suite, const char *opts)
 		 *	 LTS kernels not capable of using KUnit filters for
 		 *	 listing test cases in KTAP format, with igt_require.
 		 */
-		if (!kunit_get_tests(&tests, &tst, suite, opts, &ktap))
+		debugfs_dir = kunit_debugfs_open();
+		if (!kunit_get_tests(&tests, &tst, suite, opts, debugfs_dir, &ktap))
 			__igt_kunit_legacy(&tst, subtest, opts);
 		else
-			__igt_kunit(&tst, subtest, suite, opts, &tests, &ktap);
+			__igt_kunit(&tst, subtest, suite, opts,
+				    dirfd(debugfs_dir), &tests, &ktap);
 	}
 
 	igt_fixture {
@@ -1448,6 +1512,9 @@ void igt_kunit(const char *module_name, const char *suite, const char *opts)
 
 		kunit_results_free(&tests, &suite_name, &case_name);
 
+		if (debugfs_dir)
+			closedir(debugfs_dir);
+
 		igt_ktest_end(&tst);
 	}
 
-- 
2.44.0


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

* ✓ Fi.CI.BAT: success for lib/kunit: Read results from debugfs
  2024-03-27 11:22 [PATCH i-g-t] lib/kunit: Read results from debugfs Janusz Krzysztofik
@ 2024-03-27 12:34 ` Patchwork
  2024-03-27 12:51 ` ✓ CI.xeBAT: " Patchwork
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2024-03-27 12:34 UTC (permalink / raw)
  To: Janusz Krzysztofik; +Cc: igt-dev

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

== Series Details ==

Series: lib/kunit: Read results from debugfs
URL   : https://patchwork.freedesktop.org/series/131686/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_14491 -> IGTPW_10929
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (39 -> 35)
------------------------------

  Additional (1): bat-atsm-1 
  Missing    (5): bat-dg1-7 fi-snb-2520m fi-glk-j4005 fi-bsw-nick bat-mtlp-8 

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

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

### IGT changes ###

#### Issues hit ####

  * igt@debugfs_test@basic-hwmon:
    - bat-jsl-1:          NOTRUN -> [SKIP][1] ([i915#9318])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/bat-jsl-1/igt@debugfs_test@basic-hwmon.html

  * igt@gem_huc_copy@huc-copy:
    - fi-cfl-8109u:       NOTRUN -> [SKIP][2] ([i915#2190])
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/fi-cfl-8109u/igt@gem_huc_copy@huc-copy.html
    - bat-jsl-1:          NOTRUN -> [SKIP][3] ([i915#2190])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/bat-jsl-1/igt@gem_huc_copy@huc-copy.html
    - bat-atsm-1:         NOTRUN -> [FAIL][4] ([i915#10563])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/bat-atsm-1/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@verify-random:
    - fi-cfl-8109u:       NOTRUN -> [SKIP][5] ([i915#4613]) +3 other tests skip
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/fi-cfl-8109u/igt@gem_lmem_swapping@verify-random.html
    - bat-jsl-1:          NOTRUN -> [SKIP][6] ([i915#4613]) +3 other tests skip
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/bat-jsl-1/igt@gem_lmem_swapping@verify-random.html

  * igt@gem_mmap@basic:
    - bat-atsm-1:         NOTRUN -> [SKIP][7] ([i915#4083])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/bat-atsm-1/igt@gem_mmap@basic.html

  * igt@gem_tiled_pread_basic:
    - bat-atsm-1:         NOTRUN -> [SKIP][8] ([i915#4079]) +1 other test skip
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/bat-atsm-1/igt@gem_tiled_pread_basic.html

  * igt@i915_pm_rps@basic-api:
    - bat-atsm-1:         NOTRUN -> [SKIP][9] ([i915#6621])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/bat-atsm-1/igt@i915_pm_rps@basic-api.html

  * igt@i915_selftest@live@gem:
    - bat-atsm-1:         NOTRUN -> [ABORT][10] ([i915#10564])
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/bat-atsm-1/igt@i915_selftest@live@gem.html

  * igt@i915_selftest@live@mman:
    - bat-dg2-8:          [PASS][11] -> [ABORT][12] ([i915#10366])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/bat-dg2-8/igt@i915_selftest@live@mman.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/bat-dg2-8/igt@i915_selftest@live@mman.html

  * igt@kms_addfb_basic@size-max:
    - bat-atsm-1:         NOTRUN -> [SKIP][13] ([i915#6077]) +37 other tests skip
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/bat-atsm-1/igt@kms_addfb_basic@size-max.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
    - bat-jsl-1:          NOTRUN -> [SKIP][14] ([i915#4103]) +1 other test skip
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/bat-jsl-1/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html

  * igt@kms_cursor_legacy@basic-flip-after-cursor-atomic:
    - bat-atsm-1:         NOTRUN -> [SKIP][15] ([i915#6078]) +22 other tests skip
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/bat-atsm-1/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html

  * igt@kms_dsc@dsc-basic:
    - bat-jsl-1:          NOTRUN -> [SKIP][16] ([i915#3555] / [i915#9886])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/bat-jsl-1/igt@kms_dsc@dsc-basic.html

  * igt@kms_force_connector_basic@force-load-detect:
    - bat-jsl-1:          NOTRUN -> [SKIP][17]
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/bat-jsl-1/igt@kms_force_connector_basic@force-load-detect.html

  * igt@kms_force_connector_basic@prune-stale-modes:
    - bat-atsm-1:         NOTRUN -> [SKIP][18] ([i915#6093]) +4 other tests skip
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/bat-atsm-1/igt@kms_force_connector_basic@prune-stale-modes.html

  * igt@kms_pipe_crc_basic@compare-crc-sanitycheck-xr24:
    - bat-atsm-1:         NOTRUN -> [SKIP][19] ([i915#1836]) +6 other tests skip
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/bat-atsm-1/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-xr24.html

  * igt@kms_pm_backlight@basic-brightness:
    - fi-cfl-8109u:       NOTRUN -> [SKIP][20] +11 other tests skip
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/fi-cfl-8109u/igt@kms_pm_backlight@basic-brightness.html

  * igt@kms_prop_blob@basic:
    - bat-atsm-1:         NOTRUN -> [SKIP][21] ([i915#7357])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/bat-atsm-1/igt@kms_prop_blob@basic.html

  * igt@kms_setmode@basic-clone-single-crtc:
    - bat-atsm-1:         NOTRUN -> [SKIP][22] ([i915#6094])
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/bat-atsm-1/igt@kms_setmode@basic-clone-single-crtc.html
    - bat-jsl-1:          NOTRUN -> [SKIP][23] ([i915#3555])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/bat-jsl-1/igt@kms_setmode@basic-clone-single-crtc.html

  * igt@prime_vgem@basic-fence-mmap:
    - bat-atsm-1:         NOTRUN -> [SKIP][24] ([i915#4077]) +4 other tests skip
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/bat-atsm-1/igt@prime_vgem@basic-fence-mmap.html

  * igt@prime_vgem@basic-write:
    - bat-atsm-1:         NOTRUN -> [SKIP][25] +2 other tests skip
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/bat-atsm-1/igt@prime_vgem@basic-write.html

  
  [i915#10366]: https://gitlab.freedesktop.org/drm/intel/issues/10366
  [i915#10563]: https://gitlab.freedesktop.org/drm/intel/issues/10563
  [i915#10564]: https://gitlab.freedesktop.org/drm/intel/issues/10564
  [i915#1836]: https://gitlab.freedesktop.org/drm/intel/issues/1836
  [i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
  [i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079
  [i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
  [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#6077]: https://gitlab.freedesktop.org/drm/intel/issues/6077
  [i915#6078]: https://gitlab.freedesktop.org/drm/intel/issues/6078
  [i915#6093]: https://gitlab.freedesktop.org/drm/intel/issues/6093
  [i915#6094]: https://gitlab.freedesktop.org/drm/intel/issues/6094
  [i915#6621]: https://gitlab.freedesktop.org/drm/intel/issues/6621
  [i915#7357]: https://gitlab.freedesktop.org/drm/intel/issues/7357
  [i915#9318]: https://gitlab.freedesktop.org/drm/intel/issues/9318
  [i915#9886]: https://gitlab.freedesktop.org/drm/intel/issues/9886


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

  * CI: CI-20190529 -> None
  * IGT: IGT_7786 -> IGTPW_10929

  CI-20190529: 20190529
  CI_DRM_14491: 426c7cf8b01f87def935a357bfd76712c4f03016 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_10929: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/index.html
  IGT_7786: 1e4a3cd0a4bb3419fb70ed3e01259485b056dcfd @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git

== Logs ==

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

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

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

* ✓ CI.xeBAT: success for lib/kunit: Read results from debugfs
  2024-03-27 11:22 [PATCH i-g-t] lib/kunit: Read results from debugfs Janusz Krzysztofik
  2024-03-27 12:34 ` ✓ Fi.CI.BAT: success for " Patchwork
@ 2024-03-27 12:51 ` Patchwork
  2024-03-27 12:55 ` ✗ CI.Patch_applied: failure " Patchwork
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2024-03-27 12:51 UTC (permalink / raw)
  To: Janusz Krzysztofik; +Cc: igt-dev

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

== Series Details ==

Series: lib/kunit: Read results from debugfs
URL   : https://patchwork.freedesktop.org/series/131686/
State : success

== Summary ==

CI Bug Log - changes from XEIGT_7786_BAT -> XEIGTPW_10929_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (5 -> 3)
------------------------------

  Missing    (2): bat-lnl-1 bat-adlp-7 

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

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

### IGT changes ###

#### Issues hit ####

  * igt@xe_live_ktest@xe_bo:
    - bat-dg2-oem2:       [PASS][1] -> [SKIP][2] ([Intel XE#1245] / [Intel XE#455]) +5 other tests skip
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7786/bat-dg2-oem2/igt@xe_live_ktest@xe_bo.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10929/bat-dg2-oem2/igt@xe_live_ktest@xe_bo.html

  * igt@xe_live_ktest@xe_bo@xe_ccs_migrate_kunit:
    - bat-dg2-oem2:       [PASS][3] -> [SKIP][4] ([Intel XE#1245])
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7786/bat-dg2-oem2/igt@xe_live_ktest@xe_bo@xe_ccs_migrate_kunit.html
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10929/bat-dg2-oem2/igt@xe_live_ktest@xe_bo@xe_ccs_migrate_kunit.html

  
#### Warnings ####

  * igt@xe_module_load@load:
    - bat-dg2-oem2:       [FAIL][5] ([Intel XE#1132]) -> [FAIL][6] ([Intel XE#1244])
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7786/bat-dg2-oem2/igt@xe_module_load@load.html
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10929/bat-dg2-oem2/igt@xe_module_load@load.html

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


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

  * IGT: IGT_7786 -> IGTPW_10929
  * Linux: xe-998-f9c56f1a03b5c35488671e4ffe61e28b12ffe163 -> xe-999-5988ee0343405246eed9e2c1524984e9259e86ca

  IGTPW_10929: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/index.html
  IGT_7786: 1e4a3cd0a4bb3419fb70ed3e01259485b056dcfd @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-998-f9c56f1a03b5c35488671e4ffe61e28b12ffe163: f9c56f1a03b5c35488671e4ffe61e28b12ffe163
  xe-999-5988ee0343405246eed9e2c1524984e9259e86ca: 5988ee0343405246eed9e2c1524984e9259e86ca

== Logs ==

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

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

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

* ✗ CI.Patch_applied: failure for lib/kunit: Read results from debugfs
  2024-03-27 11:22 [PATCH i-g-t] lib/kunit: Read results from debugfs Janusz Krzysztofik
  2024-03-27 12:34 ` ✓ Fi.CI.BAT: success for " Patchwork
  2024-03-27 12:51 ` ✓ CI.xeBAT: " Patchwork
@ 2024-03-27 12:55 ` Patchwork
  2024-03-27 16:03 ` [PATCH i-g-t] " Lucas De Marchi
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2024-03-27 12:55 UTC (permalink / raw)
  To: Janusz Krzysztofik; +Cc: intel-xe

== Series Details ==

Series: lib/kunit: Read results from debugfs
URL   : https://patchwork.freedesktop.org/series/131687/
State : failure

== Summary ==

=== Applying kernel patches on branch 'drm-tip' with base: ===
Base commit: 426c7cf8b01f drm-tip: 2024y-03m-27d-11h-14m-14s UTC integration manifest
=== git am output follows ===
error: lib/igt_kmod.c: does not exist in index
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Applying: lib/kunit: Read results from debugfs
Patch failed at 0001 lib/kunit: Read results from debugfs
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".



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

* Re: [PATCH i-g-t] lib/kunit: Read results from debugfs
  2024-03-27 11:22 [PATCH i-g-t] lib/kunit: Read results from debugfs Janusz Krzysztofik
                   ` (2 preceding siblings ...)
  2024-03-27 12:55 ` ✗ CI.Patch_applied: failure " Patchwork
@ 2024-03-27 16:03 ` Lucas De Marchi
  2024-03-27 21:54   ` Janusz Krzysztofik
  2024-03-27 17:27 ` Kamil Konieczny
  2024-03-28  2:58 ` ✗ Fi.CI.IGT: failure for " Patchwork
  5 siblings, 1 reply; 12+ messages in thread
From: Lucas De Marchi @ 2024-03-27 16:03 UTC (permalink / raw)
  To: Janusz Krzysztofik
  Cc: igt-dev, intel-gfx, intel-xe, Kamil Konieczny,
	Mauro Carvalho Chehab, Jonathan Cavitt

On Wed, Mar 27, 2024 at 12:22:54PM +0100, Janusz Krzysztofik wrote:
>KUnit can provide KTAP reports from test modules via debugfs files, one
>per test suite.  Using that source of test results instead of extracting
>them from dmesg, where they may be interleaved with other kernel messages,
>seems more easy to handle and less error prone.  Switch to it.
>
>If KUnit debugfs support is found not configured then fall back to legacy
>processing path.
>
>Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
>---
> lib/igt_kmod.c | 143 ++++++++++++++++++++++++++++++++++++-------------
> 1 file changed, 105 insertions(+), 38 deletions(-)
>
>diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
>index 1ec9c8a602..a5b170ca9c 100644
>--- a/lib/igt_kmod.c
>+++ b/lib/igt_kmod.c
>@@ -28,6 +28,7 @@
> #include <limits.h>
> #include <pthread.h>
> #include <signal.h>
>+#include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> #include <sys/stat.h>
>@@ -39,6 +40,7 @@
>
> #include "igt_aux.h"
> #include "igt_core.h"
>+#include "igt_debugfs.h"
> #include "igt_kmod.h"
> #include "igt_ktap.h"
> #include "igt_sysfs.h"
>@@ -864,6 +866,31 @@ static int open_parameters(const char *module_name)
> 	return open(path, O_RDONLY);
> }
>
>+static DIR *kunit_debugfs_open(void)
>+{
>+	const char *debugfs_path = igt_debugfs_mount();
>+	int debugfs_fd, kunit_fd;
>+	DIR *kunit_dir;
>+
>+	if (igt_debug_on(!debugfs_path))
>+		return NULL;
>+
>+	debugfs_fd = open(debugfs_path, O_DIRECTORY);
>+	if (igt_debug_on(debugfs_fd < 0))
>+		return NULL;
>+
>+	kunit_fd = openat(debugfs_fd, "kunit", O_DIRECTORY);
>+	close(debugfs_fd);
>+	if (igt_debug_on(kunit_fd < 0))
>+		return NULL;
>+
>+	kunit_dir = fdopendir(kunit_fd);
>+	if (igt_debug_on(!kunit_dir))
>+		close(kunit_fd);
>+
>+	return kunit_dir;


any reason not to use strcat() + return fopen()

>+}
>+
> static bool kunit_set_filtering(const char *filter_glob, const char *filter,
> 				const char *filter_action)
> {
>@@ -1071,23 +1098,48 @@ static void kunit_results_free(struct igt_list_head *results,
> 	free(*suite_name);
> }
>
>-static int kunit_get_results(struct igt_list_head *results, int kmsg_fd,
>-			     struct igt_ktap_results **ktap)
>+static int kunit_get_results(struct igt_list_head *results, int debugfs_fd,
>+			     const char *suite, struct igt_ktap_results **ktap)
> {
>-	int err;
>+	FILE *results_stream;
>+	int ret, results_fd;
>+	char *buf = NULL;
>+	size_t size = 0;
>+	ssize_t len;
>+
>+	if (igt_debug_on((ret = openat(debugfs_fd, suite, O_DIRECTORY), ret < 0)))

a little odd to return on any value != 0, but log on < 0. did you mean
to compare < 0 in the first arg?.

>+		return ret;
>+
>+	results_fd = openat(ret, "results", O_RDONLY);
>+	close(ret);
>+	if (igt_debug_on(results_fd < 0))
>+		return results_fd;
>+
>+	results_stream = fdopen(results_fd, "r");
>+	if (igt_debug_on(!results_stream)) {
>+		close(results_fd);
>+		return -errno;
>+	}
>
> 	*ktap = igt_ktap_alloc(results);
>-	if (igt_debug_on(!*ktap))
>-		return -ENOMEM;
>+	if (igt_debug_on(!*ktap)) {
>+		ret = -ENOMEM;
>+		goto out_fclose;
>+	}
>+
>+	while (len = getline(&buf, &size, results_stream), len > 0) {
>+		ret = igt_ktap_parse(buf, *ktap);
>+		if (ret != -EINPROGRESS)
>+			break;
>+	}
>
>-	do
>-		igt_debug_on((err = kunit_kmsg_result_get(results, NULL, kmsg_fd, *ktap),
>-			      err && err != -EINPROGRESS));
>-	while (err == -EINPROGRESS);
>+	free(buf);
>
> 	igt_ktap_free(ktap);
>+out_fclose:
>+	fclose(results_stream);
>
>-	return err;
>+	return ret;
> }
>
> static void __igt_kunit_legacy(struct igt_ktest *tst,
>@@ -1101,7 +1153,13 @@ static void __igt_kunit_legacy(struct igt_ktest *tst,
> 	pthread_mutexattr_t attr;
> 	IGT_LIST_HEAD(results);
> 	unsigned long taints;
>-	int ret;
>+	int flags, ret;
>+
>+	igt_skip_on_f(tst->kmsg < 0, "Could not open /dev/kmsg\n");
>+
>+	igt_skip_on((flags = fcntl(tst->kmsg, F_GETFL, 0), flags < 0));
>+	igt_skip_on_f(fcntl(tst->kmsg, F_SETFL, flags & ~O_NONBLOCK) == -1,
>+		      "Could not set /dev/kmsg to blocking mode\n");
>
> 	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
>
>@@ -1224,30 +1282,20 @@ static void __igt_kunit_legacy(struct igt_ktest *tst,
> 	igt_skip_on_f(ret, "KTAP parser failed\n");
> }
>
>-static void kunit_get_tests_timeout(int signal)
>-{
>-	igt_skip("Timed out while trying to extract a list of KUnit test cases from /dev/kmsg\n");
>-}
>-
> static bool kunit_get_tests(struct igt_list_head *tests,
> 			    struct igt_ktest *tst,
> 			    const char *suite,
> 			    const char *opts,
>+			    DIR *debugfs_dir,
> 			    struct igt_ktap_results **ktap)
> {
>-	struct sigaction sigalrm = { .sa_handler = kunit_get_tests_timeout, },
>-			 *saved;
> 	struct igt_ktap_result *r, *rn;
>+	struct dirent *subdir;
> 	unsigned long taints;
>-	int flags, err;
>-
>-	igt_skip_on_f(tst->kmsg < 0, "Could not open /dev/kmsg\n");
>+	int debugfs_fd;
>
>-	igt_skip_on((flags = fcntl(tst->kmsg, F_GETFL, 0), flags < 0));
>-	igt_skip_on_f(fcntl(tst->kmsg, F_SETFL, flags & ~O_NONBLOCK) == -1,
>-		      "Could not set /dev/kmsg to blocking mode\n");
>-
>-	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
>+	if (igt_debug_on(!debugfs_dir))
>+		return false;
>
> 	/*
> 	 * To get a list of test cases provided by a kunit test module, ask the
>@@ -1260,19 +1308,32 @@ static bool kunit_get_tests(struct igt_list_head *tests,
> 	if (igt_debug_on(!kunit_set_filtering(suite, "module=none", "skip")))
> 		return false;
>
>+	if (!suite) {
>+		seekdir(debugfs_dir, 2);	/* directory itself and its parent */
>+		errno = 0;
>+		igt_skip_on_f(readdir(debugfs_dir) || errno,
>+			      "Require empty KUnit debugfs directory\n");
>+		rewinddir(debugfs_dir);
>+	}
>+
> 	igt_skip_on(modprobe(tst->kmod, opts));
> 	igt_skip_on(igt_kernel_tainted(&taints));
>
>-	igt_skip_on(sigaction(SIGALRM, &sigalrm, saved));
>-	alarm(10);
>+	debugfs_fd = dirfd(debugfs_dir);
>+	if (suite) {
>+		igt_skip_on(kunit_get_results(tests, debugfs_fd, suite, ktap));

instead of skipping, do we need to treat it specially if this returns
-EINPROGRESS? That would probably be bug in our ktap parser or a format
change or something like that so we may want to start failing rather
than skipping.

anyway, consider the comments above as just nits. This seems like a
great improvement.

Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>

thanks
Lucas De Marchi

>
>-	err = kunit_get_results(tests, tst->kmsg, ktap);
>+	} else while (subdir = readdir(debugfs_dir), subdir) {
>+		if (!(subdir->d_type & DT_DIR))
>+			continue;
>
>-	alarm(0);
>-	igt_debug_on(sigaction(SIGALRM, saved, NULL));
>+		if (!strcmp(subdir->d_name, ".") || !strcmp(subdir->d_name, ".."))
>+			continue;
>
>-	igt_skip_on_f(err,
>-		      "KTAP parser failed while getting a list of test cases\n");
>+		igt_warn_on_f(kunit_get_results(tests, debugfs_fd, subdir->d_name, ktap),
>+			      "parsing KTAP report from test suite \"%s\" failed\n",
>+			      subdir->d_name);
>+	}
>
> 	igt_list_for_each_entry_safe(r, rn, tests, link)
> 		igt_require_f(r->code == IGT_EXIT_SKIP,
>@@ -1287,6 +1348,7 @@ static void __igt_kunit(struct igt_ktest *tst,
> 			const char *subtest,
> 			const char *suite,
> 			const char *opts,
>+			int debugfs_fd,
> 			struct igt_list_head *tests,
> 			struct igt_ktap_results **ktap)
> {
>@@ -1307,8 +1369,6 @@ static void __igt_kunit(struct igt_ktest *tst,
>
> 			igt_skip_on(igt_kernel_tainted(&taints));
>
>-			igt_fail_on(lseek(tst->kmsg, 0, SEEK_END) == -1 && errno);
>-
> 			igt_assert_lt(snprintf(glob, sizeof(glob), "%s.%s",
> 					       t->suite_name, t->case_name),
> 				      sizeof(glob));
>@@ -1317,7 +1377,8 @@ static void __igt_kunit(struct igt_ktest *tst,
> 			igt_assert_eq(modprobe(tst->kmod, opts), 0);
> 			igt_assert_eq(igt_kernel_tainted(&taints), 0);
>
>-			igt_assert_eq(kunit_get_results(&results, tst->kmsg, ktap), 0);
>+			igt_assert_eq(kunit_get_results(&results, debugfs_fd,
>+							t->suite_name, ktap), 0);
>
> 			for (i = 0; i < 2; i++) {
> 				kunit_result_free(&r, &suite_name, &case_name);
>@@ -1388,6 +1449,7 @@ void igt_kunit(const char *module_name, const char *suite, const char *opts)
> 	struct igt_ktest tst = { .kmsg = -1, };
> 	struct igt_ktap_results *ktap = NULL;
> 	const char *subtest = suite;
>+	DIR *debugfs_dir = NULL;
> 	IGT_LIST_HEAD(tests);
>
> 	/*
>@@ -1435,10 +1497,12 @@ void igt_kunit(const char *module_name, const char *suite, const char *opts)
> 		 *	 LTS kernels not capable of using KUnit filters for
> 		 *	 listing test cases in KTAP format, with igt_require.
> 		 */
>-		if (!kunit_get_tests(&tests, &tst, suite, opts, &ktap))
>+		debugfs_dir = kunit_debugfs_open();
>+		if (!kunit_get_tests(&tests, &tst, suite, opts, debugfs_dir, &ktap))
> 			__igt_kunit_legacy(&tst, subtest, opts);
> 		else
>-			__igt_kunit(&tst, subtest, suite, opts, &tests, &ktap);
>+			__igt_kunit(&tst, subtest, suite, opts,
>+				    dirfd(debugfs_dir), &tests, &ktap);
> 	}
>
> 	igt_fixture {
>@@ -1448,6 +1512,9 @@ void igt_kunit(const char *module_name, const char *suite, const char *opts)
>
> 		kunit_results_free(&tests, &suite_name, &case_name);
>
>+		if (debugfs_dir)
>+			closedir(debugfs_dir);
>+
> 		igt_ktest_end(&tst);
> 	}
>
>-- 
>2.44.0
>

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

* Re: [PATCH i-g-t] lib/kunit: Read results from debugfs
  2024-03-27 11:22 [PATCH i-g-t] lib/kunit: Read results from debugfs Janusz Krzysztofik
                   ` (3 preceding siblings ...)
  2024-03-27 16:03 ` [PATCH i-g-t] " Lucas De Marchi
@ 2024-03-27 17:27 ` Kamil Konieczny
  2024-03-27 22:26   ` Janusz Krzysztofik
  2024-03-28  2:58 ` ✗ Fi.CI.IGT: failure for " Patchwork
  5 siblings, 1 reply; 12+ messages in thread
From: Kamil Konieczny @ 2024-03-27 17:27 UTC (permalink / raw)
  To: igt-dev
  Cc: Janusz Krzysztofik, intel-gfx, intel-xe, Mauro Carvalho Chehab,
	Jonathan Cavitt, Lucas De Marchi

Hi Janusz,
On 2024-03-27 at 12:22:54 +0100, Janusz Krzysztofik wrote:
> KUnit can provide KTAP reports from test modules via debugfs files, one
> per test suite.  Using that source of test results instead of extracting
> them from dmesg, where they may be interleaved with other kernel messages,
> seems more easy to handle and less error prone.  Switch to it.
> 
> If KUnit debugfs support is found not configured then fall back to legacy
> processing path.
> 
> Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
> ---
>  lib/igt_kmod.c | 143 ++++++++++++++++++++++++++++++++++++-------------
>  1 file changed, 105 insertions(+), 38 deletions(-)
> 
> diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> index 1ec9c8a602..a5b170ca9c 100644
> --- a/lib/igt_kmod.c
> +++ b/lib/igt_kmod.c
> @@ -28,6 +28,7 @@
>  #include <limits.h>
>  #include <pthread.h>
>  #include <signal.h>
> +#include <stdio.h>
>  #include <stdlib.h>
>  #include <string.h>
>  #include <sys/stat.h>
> @@ -39,6 +40,7 @@
>  
>  #include "igt_aux.h"
>  #include "igt_core.h"
> +#include "igt_debugfs.h"
>  #include "igt_kmod.h"
>  #include "igt_ktap.h"
>  #include "igt_sysfs.h"
> @@ -864,6 +866,31 @@ static int open_parameters(const char *module_name)
>  	return open(path, O_RDONLY);
>  }
>  
> +static DIR *kunit_debugfs_open(void)
> +{
> +	const char *debugfs_path = igt_debugfs_mount();
> +	int debugfs_fd, kunit_fd;
> +	DIR *kunit_dir;
> +
> +	if (igt_debug_on(!debugfs_path))
> +		return NULL;
> +
> +	debugfs_fd = open(debugfs_path, O_DIRECTORY);
> +	if (igt_debug_on(debugfs_fd < 0))
> +		return NULL;
> +
> +	kunit_fd = openat(debugfs_fd, "kunit", O_DIRECTORY);
> +	close(debugfs_fd);
> +	if (igt_debug_on(kunit_fd < 0))
> +		return NULL;
> +
> +	kunit_dir = fdopendir(kunit_fd);
> +	if (igt_debug_on(!kunit_dir))
> +		close(kunit_fd);

imho here:
	close(kunit_fd);
    igt_debug_on(!kunit_dir);

> +
> +	return kunit_dir;
> +}
> +
>  static bool kunit_set_filtering(const char *filter_glob, const char *filter,
>  				const char *filter_action)
>  {
> @@ -1071,23 +1098,48 @@ static void kunit_results_free(struct igt_list_head *results,
>  	free(*suite_name);
>  }
>  
> -static int kunit_get_results(struct igt_list_head *results, int kmsg_fd,
> -			     struct igt_ktap_results **ktap)
> +static int kunit_get_results(struct igt_list_head *results, int debugfs_fd,
> +			     const char *suite, struct igt_ktap_results **ktap)
>  {
> -	int err;
> +	FILE *results_stream;
> +	int ret, results_fd;
> +	char *buf = NULL;
> +	size_t size = 0;
> +	ssize_t len;
> +
> +	if (igt_debug_on((ret = openat(debugfs_fd, suite, O_DIRECTORY), ret < 0)))
> +		return ret;
> +
> +	results_fd = openat(ret, "results", O_RDONLY);
> +	close(ret);
> +	if (igt_debug_on(results_fd < 0))
> +		return results_fd;
> +
> +	results_stream = fdopen(results_fd, "r");
> +	if (igt_debug_on(!results_stream)) {
> +		close(results_fd);
> +		return -errno;
> +	}
>  
>  	*ktap = igt_ktap_alloc(results);
> -	if (igt_debug_on(!*ktap))
> -		return -ENOMEM;
> +	if (igt_debug_on(!*ktap)) {
> +		ret = -ENOMEM;
> +		goto out_fclose;
> +	}
> +
> +	while (len = getline(&buf, &size, results_stream), len > 0) {
> +		ret = igt_ktap_parse(buf, *ktap);
> +		if (ret != -EINPROGRESS)
> +			break;
> +	}
>  
> -	do
> -		igt_debug_on((err = kunit_kmsg_result_get(results, NULL, kmsg_fd, *ktap),
> -			      err && err != -EINPROGRESS));
> -	while (err == -EINPROGRESS);
> +	free(buf);
>  
>  	igt_ktap_free(ktap);
> +out_fclose:
> +	fclose(results_stream);
>  
> -	return err;
> +	return ret;
>  }
>  
>  static void __igt_kunit_legacy(struct igt_ktest *tst,
> @@ -1101,7 +1153,13 @@ static void __igt_kunit_legacy(struct igt_ktest *tst,
>  	pthread_mutexattr_t attr;
>  	IGT_LIST_HEAD(results);
>  	unsigned long taints;
> -	int ret;
> +	int flags, ret;
> +
> +	igt_skip_on_f(tst->kmsg < 0, "Could not open /dev/kmsg\n");
> +
> +	igt_skip_on((flags = fcntl(tst->kmsg, F_GETFL, 0), flags < 0));
> +	igt_skip_on_f(fcntl(tst->kmsg, F_SETFL, flags & ~O_NONBLOCK) == -1,
> +		      "Could not set /dev/kmsg to blocking mode\n");
>  
>  	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
>  
> @@ -1224,30 +1282,20 @@ static void __igt_kunit_legacy(struct igt_ktest *tst,
>  	igt_skip_on_f(ret, "KTAP parser failed\n");
>  }
>  
> -static void kunit_get_tests_timeout(int signal)
> -{
> -	igt_skip("Timed out while trying to extract a list of KUnit test cases from /dev/kmsg\n");
> -}
> -
>  static bool kunit_get_tests(struct igt_list_head *tests,
>  			    struct igt_ktest *tst,
>  			    const char *suite,
>  			    const char *opts,
> +			    DIR *debugfs_dir,
>  			    struct igt_ktap_results **ktap)
>  {
> -	struct sigaction sigalrm = { .sa_handler = kunit_get_tests_timeout, },
> -			 *saved;
>  	struct igt_ktap_result *r, *rn;
> +	struct dirent *subdir;
>  	unsigned long taints;
> -	int flags, err;
> -
> -	igt_skip_on_f(tst->kmsg < 0, "Could not open /dev/kmsg\n");
> +	int debugfs_fd;
>  
> -	igt_skip_on((flags = fcntl(tst->kmsg, F_GETFL, 0), flags < 0));
> -	igt_skip_on_f(fcntl(tst->kmsg, F_SETFL, flags & ~O_NONBLOCK) == -1,
> -		      "Could not set /dev/kmsg to blocking mode\n");
> -
> -	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
> +	if (igt_debug_on(!debugfs_dir))
> +		return false;

imho this should be before you set blocking mode or before you
call this function.

>  
>  	/*
>  	 * To get a list of test cases provided by a kunit test module, ask the
> @@ -1260,19 +1308,32 @@ static bool kunit_get_tests(struct igt_list_head *tests,
>  	if (igt_debug_on(!kunit_set_filtering(suite, "module=none", "skip")))
>  		return false;
>  
> +	if (!suite) {
> +		seekdir(debugfs_dir, 2);	/* directory itself and its parent */
> +		errno = 0;
> +		igt_skip_on_f(readdir(debugfs_dir) || errno,
> +			      "Require empty KUnit debugfs directory\n");
> +		rewinddir(debugfs_dir);
> +	}
> +
>  	igt_skip_on(modprobe(tst->kmod, opts));
>  	igt_skip_on(igt_kernel_tainted(&taints));
>  
> -	igt_skip_on(sigaction(SIGALRM, &sigalrm, saved));
> -	alarm(10);

Why you removed alarm(10)?

Regards,
Kamil

> +	debugfs_fd = dirfd(debugfs_dir);
> +	if (suite) {
> +		igt_skip_on(kunit_get_results(tests, debugfs_fd, suite, ktap));
>  
> -	err = kunit_get_results(tests, tst->kmsg, ktap);
> +	} else while (subdir = readdir(debugfs_dir), subdir) {
> +		if (!(subdir->d_type & DT_DIR))
> +			continue;
>  
> -	alarm(0);
> -	igt_debug_on(sigaction(SIGALRM, saved, NULL));
> +		if (!strcmp(subdir->d_name, ".") || !strcmp(subdir->d_name, ".."))
> +			continue;
>  
> -	igt_skip_on_f(err,
> -		      "KTAP parser failed while getting a list of test cases\n");
> +		igt_warn_on_f(kunit_get_results(tests, debugfs_fd, subdir->d_name, ktap),
> +			      "parsing KTAP report from test suite \"%s\" failed\n",
> +			      subdir->d_name);
> +	}
>  
>  	igt_list_for_each_entry_safe(r, rn, tests, link)
>  		igt_require_f(r->code == IGT_EXIT_SKIP,
> @@ -1287,6 +1348,7 @@ static void __igt_kunit(struct igt_ktest *tst,
>  			const char *subtest,
>  			const char *suite,
>  			const char *opts,
> +			int debugfs_fd,
>  			struct igt_list_head *tests,
>  			struct igt_ktap_results **ktap)
>  {
> @@ -1307,8 +1369,6 @@ static void __igt_kunit(struct igt_ktest *tst,
>  
>  			igt_skip_on(igt_kernel_tainted(&taints));
>  
> -			igt_fail_on(lseek(tst->kmsg, 0, SEEK_END) == -1 && errno);
> -
>  			igt_assert_lt(snprintf(glob, sizeof(glob), "%s.%s",
>  					       t->suite_name, t->case_name),
>  				      sizeof(glob));
> @@ -1317,7 +1377,8 @@ static void __igt_kunit(struct igt_ktest *tst,
>  			igt_assert_eq(modprobe(tst->kmod, opts), 0);
>  			igt_assert_eq(igt_kernel_tainted(&taints), 0);
>  
> -			igt_assert_eq(kunit_get_results(&results, tst->kmsg, ktap), 0);
> +			igt_assert_eq(kunit_get_results(&results, debugfs_fd,
> +							t->suite_name, ktap), 0);
>  
>  			for (i = 0; i < 2; i++) {
>  				kunit_result_free(&r, &suite_name, &case_name);
> @@ -1388,6 +1449,7 @@ void igt_kunit(const char *module_name, const char *suite, const char *opts)
>  	struct igt_ktest tst = { .kmsg = -1, };
>  	struct igt_ktap_results *ktap = NULL;
>  	const char *subtest = suite;
> +	DIR *debugfs_dir = NULL;
>  	IGT_LIST_HEAD(tests);
>  
>  	/*
> @@ -1435,10 +1497,12 @@ void igt_kunit(const char *module_name, const char *suite, const char *opts)
>  		 *	 LTS kernels not capable of using KUnit filters for
>  		 *	 listing test cases in KTAP format, with igt_require.
>  		 */
> -		if (!kunit_get_tests(&tests, &tst, suite, opts, &ktap))
> +		debugfs_dir = kunit_debugfs_open();
> +		if (!kunit_get_tests(&tests, &tst, suite, opts, debugfs_dir, &ktap))
>  			__igt_kunit_legacy(&tst, subtest, opts);
>  		else
> -			__igt_kunit(&tst, subtest, suite, opts, &tests, &ktap);
> +			__igt_kunit(&tst, subtest, suite, opts,
> +				    dirfd(debugfs_dir), &tests, &ktap);
>  	}
>  
>  	igt_fixture {
> @@ -1448,6 +1512,9 @@ void igt_kunit(const char *module_name, const char *suite, const char *opts)
>  
>  		kunit_results_free(&tests, &suite_name, &case_name);
>  
> +		if (debugfs_dir)
> +			closedir(debugfs_dir);
> +
>  		igt_ktest_end(&tst);
>  	}
>  
> -- 
> 2.44.0
> 

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

* Re: [PATCH i-g-t] lib/kunit: Read results from debugfs
  2024-03-27 16:03 ` [PATCH i-g-t] " Lucas De Marchi
@ 2024-03-27 21:54   ` Janusz Krzysztofik
  2024-03-28 12:51     ` Janusz Krzysztofik
  2024-03-28 13:09     ` Lucas De Marchi
  0 siblings, 2 replies; 12+ messages in thread
From: Janusz Krzysztofik @ 2024-03-27 21:54 UTC (permalink / raw)
  To: Lucas De Marchi
  Cc: igt-dev, intel-gfx, intel-xe, Kamil Konieczny,
	Mauro Carvalho Chehab, Jonathan Cavitt

On Wednesday, 27 March 2024 17:03:01 CET Lucas De Marchi wrote:
> On Wed, Mar 27, 2024 at 12:22:54PM +0100, Janusz Krzysztofik wrote:
> >KUnit can provide KTAP reports from test modules via debugfs files, one
> >per test suite.  Using that source of test results instead of extracting
> >them from dmesg, where they may be interleaved with other kernel messages,
> >seems more easy to handle and less error prone.  Switch to it.
> >
> >If KUnit debugfs support is found not configured then fall back to legacy
> >processing path.
> >
> >Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
> >---
> > lib/igt_kmod.c | 143 ++++++++++++++++++++++++++++++++++++-------------
> > 1 file changed, 105 insertions(+), 38 deletions(-)
> >
> >diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> >index 1ec9c8a602..a5b170ca9c 100644
> >--- a/lib/igt_kmod.c
> >+++ b/lib/igt_kmod.c
> >@@ -28,6 +28,7 @@
> > #include <limits.h>
> > #include <pthread.h>
> > #include <signal.h>
> >+#include <stdio.h>
> > #include <stdlib.h>
> > #include <string.h>
> > #include <sys/stat.h>
> >@@ -39,6 +40,7 @@
> >
> > #include "igt_aux.h"
> > #include "igt_core.h"
> >+#include "igt_debugfs.h"
> > #include "igt_kmod.h"
> > #include "igt_ktap.h"
> > #include "igt_sysfs.h"
> >@@ -864,6 +866,31 @@ static int open_parameters(const char *module_name)
> > 	return open(path, O_RDONLY);
> > }
> >
> >+static DIR *kunit_debugfs_open(void)
> >+{
> >+	const char *debugfs_path = igt_debugfs_mount();
> >+	int debugfs_fd, kunit_fd;
> >+	DIR *kunit_dir;
> >+
> >+	if (igt_debug_on(!debugfs_path))
> >+		return NULL;
> >+
> >+	debugfs_fd = open(debugfs_path, O_DIRECTORY);
> >+	if (igt_debug_on(debugfs_fd < 0))
> >+		return NULL;
> >+
> >+	kunit_fd = openat(debugfs_fd, "kunit", O_DIRECTORY);
> >+	close(debugfs_fd);
> >+	if (igt_debug_on(kunit_fd < 0))
> >+		return NULL;
> >+
> >+	kunit_dir = fdopendir(kunit_fd);
> >+	if (igt_debug_on(!kunit_dir))
> >+		close(kunit_fd);
> >+
> >+	return kunit_dir;
> 
> 
> any reason not to use strcat() + return fopen()

To me the code looked simpler than if I copied and concatenated strings to a 
local buffer of fixed size with potential truncation handling.  I guess 
you prefer your pattern over mine, but you haven't explained why.  Would you 
like to convince me?

> 
> >+}
> >+
> > static bool kunit_set_filtering(const char *filter_glob, const char *filter,
> > 				const char *filter_action)
> > {
> >@@ -1071,23 +1098,48 @@ static void kunit_results_free(struct igt_list_head *results,
> > 	free(*suite_name);
> > }
> >
> >-static int kunit_get_results(struct igt_list_head *results, int kmsg_fd,
> >-			     struct igt_ktap_results **ktap)
> >+static int kunit_get_results(struct igt_list_head *results, int debugfs_fd,
> >+			     const char *suite, struct igt_ktap_results **ktap)
> > {
> >-	int err;
> >+	FILE *results_stream;
> >+	int ret, results_fd;
> >+	char *buf = NULL;
> >+	size_t size = 0;
> >+	ssize_t len;
> >+
> >+	if (igt_debug_on((ret = openat(debugfs_fd, suite, O_DIRECTORY), ret < 0)))
> 
> a little odd to return on any value != 0, but log on < 0. did you mean
> to compare < 0 in the first arg?.

I'm not able to recall what I could mean, but anyway, you are right, 
	if (igt_debug_on((ret = openat(...)) < 0))
will be more correct.

> 
> >+		return ret;
> >+
> >+	results_fd = openat(ret, "results", O_RDONLY);
> >+	close(ret);
> >+	if (igt_debug_on(results_fd < 0))
> >+		return results_fd;
> >+
> >+	results_stream = fdopen(results_fd, "r");
> >+	if (igt_debug_on(!results_stream)) {
> >+		close(results_fd);
> >+		return -errno;
> >+	}
> >
> > 	*ktap = igt_ktap_alloc(results);
> >-	if (igt_debug_on(!*ktap))
> >-		return -ENOMEM;
> >+	if (igt_debug_on(!*ktap)) {
> >+		ret = -ENOMEM;
> >+		goto out_fclose;
> >+	}
> >+
> >+	while (len = getline(&buf, &size, results_stream), len > 0) {
> >+		ret = igt_ktap_parse(buf, *ktap);
> >+		if (ret != -EINPROGRESS)
> >+			break;
> >+	}
> >
> >-	do
> >-		igt_debug_on((err = kunit_kmsg_result_get(results, NULL, kmsg_fd, *ktap),
> >-			      err && err != -EINPROGRESS));
> >-	while (err == -EINPROGRESS);
> >+	free(buf);
> >
> > 	igt_ktap_free(ktap);
> >+out_fclose:
> >+	fclose(results_stream);
> >
> >-	return err;
> >+	return ret;
> > }
> >
> > static void __igt_kunit_legacy(struct igt_ktest *tst,
> >@@ -1101,7 +1153,13 @@ static void __igt_kunit_legacy(struct igt_ktest *tst,
> > 	pthread_mutexattr_t attr;
> > 	IGT_LIST_HEAD(results);
> > 	unsigned long taints;
> >-	int ret;
> >+	int flags, ret;
> >+
> >+	igt_skip_on_f(tst->kmsg < 0, "Could not open /dev/kmsg\n");
> >+
> >+	igt_skip_on((flags = fcntl(tst->kmsg, F_GETFL, 0), flags < 0));
> >+	igt_skip_on_f(fcntl(tst->kmsg, F_SETFL, flags & ~O_NONBLOCK) == -1,
> >+		      "Could not set /dev/kmsg to blocking mode\n");
> >
> > 	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
> >
> >@@ -1224,30 +1282,20 @@ static void __igt_kunit_legacy(struct igt_ktest *tst,
> > 	igt_skip_on_f(ret, "KTAP parser failed\n");
> > }
> >
> >-static void kunit_get_tests_timeout(int signal)
> >-{
> >-	igt_skip("Timed out while trying to extract a list of KUnit test cases from /dev/kmsg\n");
> >-}
> >-
> > static bool kunit_get_tests(struct igt_list_head *tests,
> > 			    struct igt_ktest *tst,
> > 			    const char *suite,
> > 			    const char *opts,
> >+			    DIR *debugfs_dir,
> > 			    struct igt_ktap_results **ktap)
> > {
> >-	struct sigaction sigalrm = { .sa_handler = kunit_get_tests_timeout, },
> >-			 *saved;
> > 	struct igt_ktap_result *r, *rn;
> >+	struct dirent *subdir;
> > 	unsigned long taints;
> >-	int flags, err;
> >-
> >-	igt_skip_on_f(tst->kmsg < 0, "Could not open /dev/kmsg\n");
> >+	int debugfs_fd;
> >
> >-	igt_skip_on((flags = fcntl(tst->kmsg, F_GETFL, 0), flags < 0));
> >-	igt_skip_on_f(fcntl(tst->kmsg, F_SETFL, flags & ~O_NONBLOCK) == -1,
> >-		      "Could not set /dev/kmsg to blocking mode\n");
> >-
> >-	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
> >+	if (igt_debug_on(!debugfs_dir))
> >+		return false;
> >
> > 	/*
> > 	 * To get a list of test cases provided by a kunit test module, ask the
> >@@ -1260,19 +1308,32 @@ static bool kunit_get_tests(struct igt_list_head *tests,
> > 	if (igt_debug_on(!kunit_set_filtering(suite, "module=none", "skip")))
> > 		return false;
> >
> >+	if (!suite) {
> >+		seekdir(debugfs_dir, 2);	/* directory itself and its parent */
> >+		errno = 0;
> >+		igt_skip_on_f(readdir(debugfs_dir) || errno,
> >+			      "Require empty KUnit debugfs directory\n");
> >+		rewinddir(debugfs_dir);
> >+	}
> >+
> > 	igt_skip_on(modprobe(tst->kmod, opts));
> > 	igt_skip_on(igt_kernel_tainted(&taints));
> >
> >-	igt_skip_on(sigaction(SIGALRM, &sigalrm, saved));
> >-	alarm(10);
> >+	debugfs_fd = dirfd(debugfs_dir);
> >+	if (suite) {
> >+		igt_skip_on(kunit_get_results(tests, debugfs_fd, suite, ktap));
> 
> instead of skipping, do we need to treat it specially if this returns
> -EINPROGRESS? That would probably be bug in our ktap parser or a format
> change or something like that so we may want to start failing rather
> than skipping.

Unfortunately we are not allowed to fail here because kunit_get_tests() is 
called from inside a body of igt_subtest_with_dynamic() but outside of any 
igt_dynamic(), where fails are allowed again.  We may use a verbose variant of 
igt_skip() to provide additional information on that skip.  We may also 
precede that skip with igt_warn(), but I'm not sure how that will by reported 
by upper layers (igt_runner, CI).

> 
> anyway, consider the comments above as just nits. This seems like a
> great improvement.
> 
> Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>

Thank you,
Janusz

> 
> thanks
> Lucas De Marchi
> 
> >
> >-	err = kunit_get_results(tests, tst->kmsg, ktap);
> >+	} else while (subdir = readdir(debugfs_dir), subdir) {
> >+		if (!(subdir->d_type & DT_DIR))
> >+			continue;
> >
> >-	alarm(0);
> >-	igt_debug_on(sigaction(SIGALRM, saved, NULL));
> >+		if (!strcmp(subdir->d_name, ".") || !strcmp(subdir->d_name, ".."))
> >+			continue;
> >
> >-	igt_skip_on_f(err,
> >-		      "KTAP parser failed while getting a list of test cases\n");
> >+		igt_warn_on_f(kunit_get_results(tests, debugfs_fd, subdir->d_name, ktap),
> >+			      "parsing KTAP report from test suite \"%s\" failed\n",
> >+			      subdir->d_name);
> >+	}
> >
> > 	igt_list_for_each_entry_safe(r, rn, tests, link)
> > 		igt_require_f(r->code == IGT_EXIT_SKIP,
> >@@ -1287,6 +1348,7 @@ static void __igt_kunit(struct igt_ktest *tst,
> > 			const char *subtest,
> > 			const char *suite,
> > 			const char *opts,
> >+			int debugfs_fd,
> > 			struct igt_list_head *tests,
> > 			struct igt_ktap_results **ktap)
> > {
> >@@ -1307,8 +1369,6 @@ static void __igt_kunit(struct igt_ktest *tst,
> >
> > 			igt_skip_on(igt_kernel_tainted(&taints));
> >
> >-			igt_fail_on(lseek(tst->kmsg, 0, SEEK_END) == -1 && errno);
> >-
> > 			igt_assert_lt(snprintf(glob, sizeof(glob), "%s.%s",
> > 					       t->suite_name, t->case_name),
> > 				      sizeof(glob));
> >@@ -1317,7 +1377,8 @@ static void __igt_kunit(struct igt_ktest *tst,
> > 			igt_assert_eq(modprobe(tst->kmod, opts), 0);
> > 			igt_assert_eq(igt_kernel_tainted(&taints), 0);
> >
> >-			igt_assert_eq(kunit_get_results(&results, tst->kmsg, ktap), 0);
> >+			igt_assert_eq(kunit_get_results(&results, debugfs_fd,
> >+							t->suite_name, ktap), 0);
> >
> > 			for (i = 0; i < 2; i++) {
> > 				kunit_result_free(&r, &suite_name, &case_name);
> >@@ -1388,6 +1449,7 @@ void igt_kunit(const char *module_name, const char *suite, const char *opts)
> > 	struct igt_ktest tst = { .kmsg = -1, };
> > 	struct igt_ktap_results *ktap = NULL;
> > 	const char *subtest = suite;
> >+	DIR *debugfs_dir = NULL;
> > 	IGT_LIST_HEAD(tests);
> >
> > 	/*
> >@@ -1435,10 +1497,12 @@ void igt_kunit(const char *module_name, const char *suite, const char *opts)
> > 		 *	 LTS kernels not capable of using KUnit filters for
> > 		 *	 listing test cases in KTAP format, with igt_require.
> > 		 */
> >-		if (!kunit_get_tests(&tests, &tst, suite, opts, &ktap))
> >+		debugfs_dir = kunit_debugfs_open();
> >+		if (!kunit_get_tests(&tests, &tst, suite, opts, debugfs_dir, &ktap))
> > 			__igt_kunit_legacy(&tst, subtest, opts);
> > 		else
> >-			__igt_kunit(&tst, subtest, suite, opts, &tests, &ktap);
> >+			__igt_kunit(&tst, subtest, suite, opts,
> >+				    dirfd(debugfs_dir), &tests, &ktap);
> > 	}
> >
> > 	igt_fixture {
> >@@ -1448,6 +1512,9 @@ void igt_kunit(const char *module_name, const char *suite, const char *opts)
> >
> > 		kunit_results_free(&tests, &suite_name, &case_name);
> >
> >+		if (debugfs_dir)
> >+			closedir(debugfs_dir);
> >+
> > 		igt_ktest_end(&tst);
> > 	}
> >
> 





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

* Re: [PATCH i-g-t] lib/kunit: Read results from debugfs
  2024-03-27 17:27 ` Kamil Konieczny
@ 2024-03-27 22:26   ` Janusz Krzysztofik
  2024-03-28 11:24     ` Kamil Konieczny
  0 siblings, 1 reply; 12+ messages in thread
From: Janusz Krzysztofik @ 2024-03-27 22:26 UTC (permalink / raw)
  To: Kamil Konieczny, igt-dev, Janusz Krzysztofik, intel-gfx,
	intel-xe, Mauro Carvalho Chehab, Jonathan Cavitt,
	Lucas De Marchi

On Wednesday, 27 March 2024 18:27:50 CET Kamil Konieczny wrote:
> Hi Janusz,
> On 2024-03-27 at 12:22:54 +0100, Janusz Krzysztofik wrote:
> > KUnit can provide KTAP reports from test modules via debugfs files, one
> > per test suite.  Using that source of test results instead of extracting
> > them from dmesg, where they may be interleaved with other kernel messages,
> > seems more easy to handle and less error prone.  Switch to it.
> > 
> > If KUnit debugfs support is found not configured then fall back to legacy
> > processing path.
> > 
> > Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
> > ---
> >  lib/igt_kmod.c | 143 ++++++++++++++++++++++++++++++++++++-------------
> >  1 file changed, 105 insertions(+), 38 deletions(-)
> > 
> > diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> > index 1ec9c8a602..a5b170ca9c 100644
> > --- a/lib/igt_kmod.c
> > +++ b/lib/igt_kmod.c
> > @@ -28,6 +28,7 @@
> >  #include <limits.h>
> >  #include <pthread.h>
> >  #include <signal.h>
> > +#include <stdio.h>
> >  #include <stdlib.h>
> >  #include <string.h>
> >  #include <sys/stat.h>
> > @@ -39,6 +40,7 @@
> >  
> >  #include "igt_aux.h"
> >  #include "igt_core.h"
> > +#include "igt_debugfs.h"
> >  #include "igt_kmod.h"
> >  #include "igt_ktap.h"
> >  #include "igt_sysfs.h"
> > @@ -864,6 +866,31 @@ static int open_parameters(const char *module_name)
> >  	return open(path, O_RDONLY);
> >  }
> >  
> > +static DIR *kunit_debugfs_open(void)
> > +{
> > +	const char *debugfs_path = igt_debugfs_mount();
> > +	int debugfs_fd, kunit_fd;
> > +	DIR *kunit_dir;
> > +
> > +	if (igt_debug_on(!debugfs_path))
> > +		return NULL;
> > +
> > +	debugfs_fd = open(debugfs_path, O_DIRECTORY);
> > +	if (igt_debug_on(debugfs_fd < 0))
> > +		return NULL;
> > +
> > +	kunit_fd = openat(debugfs_fd, "kunit", O_DIRECTORY);
> > +	close(debugfs_fd);
> > +	if (igt_debug_on(kunit_fd < 0))
> > +		return NULL;
> > +
> > +	kunit_dir = fdopendir(kunit_fd);
> > +	if (igt_debug_on(!kunit_dir))
> > +		close(kunit_fd);
> 
> imho here:
> 	close(kunit_fd);
>     igt_debug_on(!kunit_dir);

No, we are not allowed to close it.  fdopendir(3) states:
"After  a  successful  call to fdopendir(), fd is used internally by the 
 implementation, and should not otherwise be used by the application."

> 
> > +
> > +	return kunit_dir;
> > +}
> > +
> >  static bool kunit_set_filtering(const char *filter_glob, const char *filter,
> >  				const char *filter_action)
> >  {
> > @@ -1071,23 +1098,48 @@ static void kunit_results_free(struct igt_list_head *results,
> >  	free(*suite_name);
> >  }
> >  
> > -static int kunit_get_results(struct igt_list_head *results, int kmsg_fd,
> > -			     struct igt_ktap_results **ktap)
> > +static int kunit_get_results(struct igt_list_head *results, int debugfs_fd,
> > +			     const char *suite, struct igt_ktap_results **ktap)
> >  {
> > -	int err;
> > +	FILE *results_stream;
> > +	int ret, results_fd;
> > +	char *buf = NULL;
> > +	size_t size = 0;
> > +	ssize_t len;
> > +
> > +	if (igt_debug_on((ret = openat(debugfs_fd, suite, O_DIRECTORY), ret < 0)))
> > +		return ret;
> > +
> > +	results_fd = openat(ret, "results", O_RDONLY);
> > +	close(ret);
> > +	if (igt_debug_on(results_fd < 0))
> > +		return results_fd;
> > +
> > +	results_stream = fdopen(results_fd, "r");
> > +	if (igt_debug_on(!results_stream)) {
> > +		close(results_fd);
> > +		return -errno;
> > +	}
> >  
> >  	*ktap = igt_ktap_alloc(results);
> > -	if (igt_debug_on(!*ktap))
> > -		return -ENOMEM;
> > +	if (igt_debug_on(!*ktap)) {
> > +		ret = -ENOMEM;
> > +		goto out_fclose;
> > +	}
> > +
> > +	while (len = getline(&buf, &size, results_stream), len > 0) {
> > +		ret = igt_ktap_parse(buf, *ktap);
> > +		if (ret != -EINPROGRESS)
> > +			break;
> > +	}
> >  
> > -	do
> > -		igt_debug_on((err = kunit_kmsg_result_get(results, NULL, kmsg_fd, *ktap),
> > -			      err && err != -EINPROGRESS));
> > -	while (err == -EINPROGRESS);
> > +	free(buf);
> >  
> >  	igt_ktap_free(ktap);
> > +out_fclose:
> > +	fclose(results_stream);
> >  
> > -	return err;
> > +	return ret;
> >  }
> >  
> >  static void __igt_kunit_legacy(struct igt_ktest *tst,
> > @@ -1101,7 +1153,13 @@ static void __igt_kunit_legacy(struct igt_ktest *tst,
> >  	pthread_mutexattr_t attr;
> >  	IGT_LIST_HEAD(results);
> >  	unsigned long taints;
> > -	int ret;
> > +	int flags, ret;
> > +
> > +	igt_skip_on_f(tst->kmsg < 0, "Could not open /dev/kmsg\n");
> > +
> > +	igt_skip_on((flags = fcntl(tst->kmsg, F_GETFL, 0), flags < 0));
> > +	igt_skip_on_f(fcntl(tst->kmsg, F_SETFL, flags & ~O_NONBLOCK) == -1,
> > +		      "Could not set /dev/kmsg to blocking mode\n");
> >  
> >  	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
> >  
> > @@ -1224,30 +1282,20 @@ static void __igt_kunit_legacy(struct igt_ktest *tst,
> >  	igt_skip_on_f(ret, "KTAP parser failed\n");
> >  }
> >  
> > -static void kunit_get_tests_timeout(int signal)
> > -{
> > -	igt_skip("Timed out while trying to extract a list of KUnit test cases from /dev/kmsg\n");
> > -}
> > -
> >  static bool kunit_get_tests(struct igt_list_head *tests,
> >  			    struct igt_ktest *tst,
> >  			    const char *suite,
> >  			    const char *opts,
> > +			    DIR *debugfs_dir,
> >  			    struct igt_ktap_results **ktap)
> >  {
> > -	struct sigaction sigalrm = { .sa_handler = kunit_get_tests_timeout, },
> > -			 *saved;
> >  	struct igt_ktap_result *r, *rn;
> > +	struct dirent *subdir;
> >  	unsigned long taints;
> > -	int flags, err;
> > -
> > -	igt_skip_on_f(tst->kmsg < 0, "Could not open /dev/kmsg\n");
> > +	int debugfs_fd;
> >  
> > -	igt_skip_on((flags = fcntl(tst->kmsg, F_GETFL, 0), flags < 0));
> > -	igt_skip_on_f(fcntl(tst->kmsg, F_SETFL, flags & ~O_NONBLOCK) == -1,
> > -		      "Could not set /dev/kmsg to blocking mode\n");
> > -
> > -	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
> > +	if (igt_debug_on(!debugfs_dir))
> > +		return false;
> 
> imho this should be before you set blocking mode 

This patch removes the lines that were setting blocking mode.  That mode was 
needed only when reading from /dev/kmsg.

> or before you call this function.

OK.

> 
> >  
> >  	/*
> >  	 * To get a list of test cases provided by a kunit test module, ask the
> > @@ -1260,19 +1308,32 @@ static bool kunit_get_tests(struct igt_list_head *tests,
> >  	if (igt_debug_on(!kunit_set_filtering(suite, "module=none", "skip")))
> >  		return false;
> >  
> > +	if (!suite) {
> > +		seekdir(debugfs_dir, 2);	/* directory itself and its parent */
> > +		errno = 0;
> > +		igt_skip_on_f(readdir(debugfs_dir) || errno,
> > +			      "Require empty KUnit debugfs directory\n");
> > +		rewinddir(debugfs_dir);
> > +	}
> > +
> >  	igt_skip_on(modprobe(tst->kmod, opts));
> >  	igt_skip_on(igt_kernel_tainted(&taints));
> >  
> > -	igt_skip_on(sigaction(SIGALRM, &sigalrm, saved));
> > -	alarm(10);
> 
> Why you removed alarm(10)?

Because we no longer need it.  When we were extracting a KTAP report from 
/dev/kmsg then it was needed because if KUnit filters produced no KTAP report 
then that operation might never complete unless interrupted.  Now our attempt 
to open a nonexistent debugfs report file fails immediately.

Thanks,
Janusz

> 
> Regards,
> Kamil
> 
> > +	debugfs_fd = dirfd(debugfs_dir);
> > +	if (suite) {
> > +		igt_skip_on(kunit_get_results(tests, debugfs_fd, suite, ktap));
> >  
> > -	err = kunit_get_results(tests, tst->kmsg, ktap);
> > +	} else while (subdir = readdir(debugfs_dir), subdir) {
> > +		if (!(subdir->d_type & DT_DIR))
> > +			continue;
> >  
> > -	alarm(0);
> > -	igt_debug_on(sigaction(SIGALRM, saved, NULL));
> > +		if (!strcmp(subdir->d_name, ".") || !strcmp(subdir->d_name, ".."))
> > +			continue;
> >  
> > -	igt_skip_on_f(err,
> > -		      "KTAP parser failed while getting a list of test cases\n");
> > +		igt_warn_on_f(kunit_get_results(tests, debugfs_fd, subdir->d_name, ktap),
> > +			      "parsing KTAP report from test suite \"%s\" failed\n",
> > +			      subdir->d_name);
> > +	}
> >  
> >  	igt_list_for_each_entry_safe(r, rn, tests, link)
> >  		igt_require_f(r->code == IGT_EXIT_SKIP,
> > @@ -1287,6 +1348,7 @@ static void __igt_kunit(struct igt_ktest *tst,
> >  			const char *subtest,
> >  			const char *suite,
> >  			const char *opts,
> > +			int debugfs_fd,
> >  			struct igt_list_head *tests,
> >  			struct igt_ktap_results **ktap)
> >  {
> > @@ -1307,8 +1369,6 @@ static void __igt_kunit(struct igt_ktest *tst,
> >  
> >  			igt_skip_on(igt_kernel_tainted(&taints));
> >  
> > -			igt_fail_on(lseek(tst->kmsg, 0, SEEK_END) == -1 && errno);
> > -
> >  			igt_assert_lt(snprintf(glob, sizeof(glob), "%s.%s",
> >  					       t->suite_name, t->case_name),
> >  				      sizeof(glob));
> > @@ -1317,7 +1377,8 @@ static void __igt_kunit(struct igt_ktest *tst,
> >  			igt_assert_eq(modprobe(tst->kmod, opts), 0);
> >  			igt_assert_eq(igt_kernel_tainted(&taints), 0);
> >  
> > -			igt_assert_eq(kunit_get_results(&results, tst->kmsg, ktap), 0);
> > +			igt_assert_eq(kunit_get_results(&results, debugfs_fd,
> > +							t->suite_name, ktap), 0);
> >  
> >  			for (i = 0; i < 2; i++) {
> >  				kunit_result_free(&r, &suite_name, &case_name);
> > @@ -1388,6 +1449,7 @@ void igt_kunit(const char *module_name, const char *suite, const char *opts)
> >  	struct igt_ktest tst = { .kmsg = -1, };
> >  	struct igt_ktap_results *ktap = NULL;
> >  	const char *subtest = suite;
> > +	DIR *debugfs_dir = NULL;
> >  	IGT_LIST_HEAD(tests);
> >  
> >  	/*
> > @@ -1435,10 +1497,12 @@ void igt_kunit(const char *module_name, const char *suite, const char *opts)
> >  		 *	 LTS kernels not capable of using KUnit filters for
> >  		 *	 listing test cases in KTAP format, with igt_require.
> >  		 */
> > -		if (!kunit_get_tests(&tests, &tst, suite, opts, &ktap))
> > +		debugfs_dir = kunit_debugfs_open();
> > +		if (!kunit_get_tests(&tests, &tst, suite, opts, debugfs_dir, &ktap))
> >  			__igt_kunit_legacy(&tst, subtest, opts);
> >  		else
> > -			__igt_kunit(&tst, subtest, suite, opts, &tests, &ktap);
> > +			__igt_kunit(&tst, subtest, suite, opts,
> > +				    dirfd(debugfs_dir), &tests, &ktap);
> >  	}
> >  
> >  	igt_fixture {
> > @@ -1448,6 +1512,9 @@ void igt_kunit(const char *module_name, const char *suite, const char *opts)
> >  
> >  		kunit_results_free(&tests, &suite_name, &case_name);
> >  
> > +		if (debugfs_dir)
> > +			closedir(debugfs_dir);
> > +
> >  		igt_ktest_end(&tst);
> >  	}
> >  
> 





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

* ✗ Fi.CI.IGT: failure for lib/kunit: Read results from debugfs
  2024-03-27 11:22 [PATCH i-g-t] lib/kunit: Read results from debugfs Janusz Krzysztofik
                   ` (4 preceding siblings ...)
  2024-03-27 17:27 ` Kamil Konieczny
@ 2024-03-28  2:58 ` Patchwork
  5 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2024-03-28  2:58 UTC (permalink / raw)
  To: Janusz Krzysztofik; +Cc: igt-dev

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

== Series Details ==

Series: lib/kunit: Read results from debugfs
URL   : https://patchwork.freedesktop.org/series/131686/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_14491_full -> IGTPW_10929_full
====================================================

Summary
-------

  **FAILURE**

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

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

  Missing    (1): shard-snb-0 

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@gem_softpin@allocator-evict@ccs1:
    - shard-dg2:          [PASS][1] -> [INCOMPLETE][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-dg2-6/igt@gem_softpin@allocator-evict@ccs1.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-2/igt@gem_softpin@allocator-evict@ccs1.html

  * igt@kms_ccs@bad-aux-stride-yf-tiled-ccs:
    - shard-dg2:          NOTRUN -> [TIMEOUT][3]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-6/igt@kms_ccs@bad-aux-stride-yf-tiled-ccs.html

  * igt@kms_cursor_legacy@flip-vs-cursor-crc-legacy:
    - shard-dg2:          [PASS][4] -> [TIMEOUT][5]
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-dg2-8/igt@kms_cursor_legacy@flip-vs-cursor-crc-legacy.html
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-6/igt@kms_cursor_legacy@flip-vs-cursor-crc-legacy.html

  
#### Warnings ####

  * igt@gem_mmap_gtt@basic-small-copy-xy:
    - shard-dg2:          [SKIP][6] ([i915#4077]) -> [TIMEOUT][7]
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-dg2-10/igt@gem_mmap_gtt@basic-small-copy-xy.html
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-6/igt@gem_mmap_gtt@basic-small-copy-xy.html

  * igt@kms_chamelium_hpd@hdmi-hpd-with-enabled-mode:
    - shard-dg2:          [SKIP][8] ([i915#7828]) -> [TIMEOUT][9]
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-dg2-8/igt@kms_chamelium_hpd@hdmi-hpd-with-enabled-mode.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-6/igt@kms_chamelium_hpd@hdmi-hpd-with-enabled-mode.html

  * igt@kms_cursor_crc@cursor-onscreen-max-size:
    - shard-dg2:          [SKIP][10] ([i915#3555]) -> [TIMEOUT][11]
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-dg2-3/igt@kms_cursor_crc@cursor-onscreen-max-size.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-6/igt@kms_cursor_crc@cursor-onscreen-max-size.html

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

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

### IGT changes ###

#### Issues hit ####

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

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

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

  * igt@device_reset@cold-reset-bound:
    - shard-mtlp:         NOTRUN -> [SKIP][15] ([i915#7701])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-6/igt@device_reset@cold-reset-bound.html

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

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

  * igt@drm_fdinfo@busy-idle-check-all@ccs3:
    - shard-dg2:          NOTRUN -> [SKIP][18] ([i915#8414]) +32 other tests skip
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-7/igt@drm_fdinfo@busy-idle-check-all@ccs3.html

  * igt@drm_fdinfo@idle@rcs0:
    - shard-rkl:          [PASS][19] -> [FAIL][20] ([i915#7742])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-rkl-1/igt@drm_fdinfo@idle@rcs0.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-1/igt@drm_fdinfo@idle@rcs0.html

  * igt@drm_fdinfo@isolation@vecs0:
    - shard-dg1:          NOTRUN -> [SKIP][21] ([i915#8414]) +15 other tests skip
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-18/igt@drm_fdinfo@isolation@vecs0.html

  * igt@drm_fdinfo@most-busy-idle-check-all@rcs0:
    - shard-rkl:          NOTRUN -> [FAIL][22] ([i915#7742])
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-5/igt@drm_fdinfo@most-busy-idle-check-all@rcs0.html

  * igt@gem_basic@multigpu-create-close:
    - shard-dg1:          NOTRUN -> [SKIP][23] ([i915#7697]) +1 other test skip
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-18/igt@gem_basic@multigpu-create-close.html

  * igt@gem_busy@semaphore:
    - shard-mtlp:         NOTRUN -> [SKIP][24] ([i915#3936])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-3/igt@gem_busy@semaphore.html

  * igt@gem_caching@reads:
    - shard-mtlp:         NOTRUN -> [SKIP][25] ([i915#4873])
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-7/igt@gem_caching@reads.html

  * igt@gem_ccs@block-multicopy-compressed:
    - shard-mtlp:         NOTRUN -> [SKIP][26] ([i915#9323])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-6/igt@gem_ccs@block-multicopy-compressed.html

  * igt@gem_ccs@ctrl-surf-copy-new-ctx:
    - shard-dg1:          NOTRUN -> [SKIP][27] ([i915#9323])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-15/igt@gem_ccs@ctrl-surf-copy-new-ctx.html

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

  * igt@gem_close_race@multigpu-basic-threads:
    - shard-dg2:          NOTRUN -> [SKIP][29] ([i915#7697]) +2 other tests skip
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@gem_close_race@multigpu-basic-threads.html
    - shard-rkl:          NOTRUN -> [SKIP][30] ([i915#7697]) +1 other test skip
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-5/igt@gem_close_race@multigpu-basic-threads.html

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

  * igt@gem_ctx_persistence@saturated-hostile-nopreempt@ccs0:
    - shard-dg2:          NOTRUN -> [SKIP][32] ([i915#5882]) +9 other tests skip
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-5/igt@gem_ctx_persistence@saturated-hostile-nopreempt@ccs0.html

  * igt@gem_ctx_sseu@engines:
    - shard-dg2:          NOTRUN -> [SKIP][33] ([i915#280])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-7/igt@gem_ctx_sseu@engines.html

  * igt@gem_ctx_sseu@invalid-args:
    - shard-rkl:          NOTRUN -> [SKIP][34] ([i915#280])
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-4/igt@gem_ctx_sseu@invalid-args.html

  * igt@gem_ctx_sseu@invalid-sseu:
    - shard-mtlp:         NOTRUN -> [SKIP][35] ([i915#280]) +1 other test skip
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-2/igt@gem_ctx_sseu@invalid-sseu.html

  * igt@gem_eio@kms:
    - shard-tglu:         [PASS][36] -> [INCOMPLETE][37] ([i915#10513])
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-tglu-5/igt@gem_eio@kms.html
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-tglu-9/igt@gem_eio@kms.html
    - shard-dg1:          NOTRUN -> [INCOMPLETE][38] ([i915#10513])
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-18/igt@gem_eio@kms.html

  * igt@gem_exec_balancer@bonded-pair:
    - shard-dg1:          NOTRUN -> [SKIP][39] ([i915#4771])
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-16/igt@gem_exec_balancer@bonded-pair.html

  * igt@gem_exec_balancer@bonded-semaphore:
    - shard-dg1:          NOTRUN -> [SKIP][40] ([i915#4812]) +2 other tests skip
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-17/igt@gem_exec_balancer@bonded-semaphore.html
    - shard-dg2:          NOTRUN -> [SKIP][41] ([i915#4812])
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-6/igt@gem_exec_balancer@bonded-semaphore.html

  * igt@gem_exec_balancer@invalid-bonds:
    - shard-dg1:          NOTRUN -> [SKIP][42] ([i915#4036])
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-16/igt@gem_exec_balancer@invalid-bonds.html

  * igt@gem_exec_balancer@parallel-dmabuf-import-out-fence:
    - shard-rkl:          NOTRUN -> [SKIP][43] ([i915#4525])
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-6/igt@gem_exec_balancer@parallel-dmabuf-import-out-fence.html

  * igt@gem_exec_capture@capture@vecs0-lmem0:
    - shard-dg2:          NOTRUN -> [FAIL][44] ([i915#10386]) +3 other tests fail
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@gem_exec_capture@capture@vecs0-lmem0.html

  * igt@gem_exec_capture@many-4k-incremental:
    - shard-rkl:          NOTRUN -> [FAIL][45] ([i915#9606])
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-1/igt@gem_exec_capture@many-4k-incremental.html

  * igt@gem_exec_capture@many-4k-zero:
    - shard-mtlp:         NOTRUN -> [FAIL][46] ([i915#9606])
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-6/igt@gem_exec_capture@many-4k-zero.html

  * igt@gem_exec_fair@basic-none:
    - shard-dg1:          NOTRUN -> [SKIP][47] ([i915#3539] / [i915#4852]) +1 other test skip
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-17/igt@gem_exec_fair@basic-none.html

  * igt@gem_exec_fair@basic-pace-solo@rcs0:
    - shard-tglu:         [PASS][48] -> [FAIL][49] ([i915#2842])
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-tglu-8/igt@gem_exec_fair@basic-pace-solo@rcs0.html
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-tglu-7/igt@gem_exec_fair@basic-pace-solo@rcs0.html

  * igt@gem_exec_fair@basic-pace@vecs0:
    - shard-rkl:          NOTRUN -> [FAIL][50] ([i915#2842])
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-4/igt@gem_exec_fair@basic-pace@vecs0.html

  * igt@gem_exec_fair@basic-sync:
    - shard-mtlp:         NOTRUN -> [SKIP][51] ([i915#4473] / [i915#4771]) +2 other tests skip
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-5/igt@gem_exec_fair@basic-sync.html

  * igt@gem_exec_fair@basic-throttle:
    - shard-dg1:          NOTRUN -> [SKIP][52] ([i915#3539])
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-15/igt@gem_exec_fair@basic-throttle.html

  * igt@gem_exec_fair@basic-throttle@rcs0:
    - shard-glk:          NOTRUN -> [FAIL][53] ([i915#2842]) +3 other tests fail
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-glk1/igt@gem_exec_fair@basic-throttle@rcs0.html

  * igt@gem_exec_flush@basic-uc-pro-default:
    - shard-dg2:          NOTRUN -> [SKIP][54] ([i915#3539] / [i915#4852]) +7 other tests skip
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-3/igt@gem_exec_flush@basic-uc-pro-default.html

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

  * igt@gem_exec_reloc@basic-gtt-read-noreloc:
    - shard-rkl:          NOTRUN -> [SKIP][56] ([i915#3281]) +12 other tests skip
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-1/igt@gem_exec_reloc@basic-gtt-read-noreloc.html

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

  * igt@gem_exec_reloc@basic-write-wc:
    - shard-mtlp:         NOTRUN -> [SKIP][58] ([i915#3281]) +6 other tests skip
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-6/igt@gem_exec_reloc@basic-write-wc.html

  * igt@gem_exec_schedule@reorder-wide:
    - shard-dg2:          NOTRUN -> [SKIP][59] ([i915#4537] / [i915#4812])
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-10/igt@gem_exec_schedule@reorder-wide.html

  * igt@gem_exec_schedule@semaphore-power:
    - shard-mtlp:         NOTRUN -> [SKIP][60] ([i915#4537] / [i915#4812])
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-8/igt@gem_exec_schedule@semaphore-power.html

  * igt@gem_exec_suspend@basic-s4-devices@smem:
    - shard-rkl:          NOTRUN -> [ABORT][61] ([i915#7975] / [i915#8213])
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-5/igt@gem_exec_suspend@basic-s4-devices@smem.html

  * igt@gem_fence_thrash@bo-write-verify-x:
    - shard-dg2:          NOTRUN -> [SKIP][62] ([i915#4860]) +3 other tests skip
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-8/igt@gem_fence_thrash@bo-write-verify-x.html
    - shard-dg1:          NOTRUN -> [SKIP][63] ([i915#4860]) +4 other tests skip
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-14/igt@gem_fence_thrash@bo-write-verify-x.html

  * igt@gem_fenced_exec_thrash@too-many-fences:
    - shard-mtlp:         NOTRUN -> [SKIP][64] ([i915#4860]) +1 other test skip
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-6/igt@gem_fenced_exec_thrash@too-many-fences.html

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

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

  * igt@gem_lmem_swapping@verify-ccs:
    - shard-glk:          NOTRUN -> [SKIP][67] ([i915#4613]) +3 other tests skip
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-glk3/igt@gem_lmem_swapping@verify-ccs.html

  * igt@gem_lmem_swapping@verify-ccs@lmem0:
    - shard-dg2:          NOTRUN -> [FAIL][68] ([i915#10446]) +1 other test fail
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-5/igt@gem_lmem_swapping@verify-ccs@lmem0.html

  * igt@gem_madvise@dontneed-before-exec:
    - shard-mtlp:         NOTRUN -> [SKIP][69] ([i915#3282]) +5 other tests skip
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-4/igt@gem_madvise@dontneed-before-exec.html

  * igt@gem_media_fill@media-fill:
    - shard-mtlp:         NOTRUN -> [SKIP][70] ([i915#8289])
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-1/igt@gem_media_fill@media-fill.html

  * igt@gem_mmap_gtt@basic-write-read-distinct:
    - shard-mtlp:         NOTRUN -> [SKIP][71] ([i915#4077]) +16 other tests skip
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-3/igt@gem_mmap_gtt@basic-write-read-distinct.html

  * igt@gem_mmap_gtt@cpuset-basic-small-copy-odd:
    - shard-dg1:          NOTRUN -> [SKIP][72] ([i915#4077]) +12 other tests skip
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-15/igt@gem_mmap_gtt@cpuset-basic-small-copy-odd.html

  * igt@gem_mmap_gtt@cpuset-big-copy-odd:
    - shard-dg2:          NOTRUN -> [SKIP][73] ([i915#4077]) +12 other tests skip
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@gem_mmap_gtt@cpuset-big-copy-odd.html

  * igt@gem_mmap_wc@read-write:
    - shard-mtlp:         NOTRUN -> [SKIP][74] ([i915#4083]) +8 other tests skip
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-1/igt@gem_mmap_wc@read-write.html

  * igt@gem_mmap_wc@read-write-distinct:
    - shard-dg1:          NOTRUN -> [SKIP][75] ([i915#4083]) +4 other tests skip
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-16/igt@gem_mmap_wc@read-write-distinct.html

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

  * igt@gem_partial_pwrite_pread@writes-after-reads-uncached:
    - shard-dg1:          NOTRUN -> [SKIP][77] ([i915#3282]) +5 other tests skip
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-13/igt@gem_partial_pwrite_pread@writes-after-reads-uncached.html

  * igt@gem_pread@bench:
    - shard-rkl:          NOTRUN -> [SKIP][78] ([i915#3282]) +6 other tests skip
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-3/igt@gem_pread@bench.html

  * igt@gem_pread@snoop:
    - shard-dg2:          NOTRUN -> [SKIP][79] ([i915#3282]) +6 other tests skip
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-7/igt@gem_pread@snoop.html

  * igt@gem_pxp@create-protected-buffer:
    - shard-rkl:          NOTRUN -> [SKIP][80] ([i915#4270]) +1 other test skip
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-6/igt@gem_pxp@create-protected-buffer.html

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

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

  * igt@gem_pxp@verify-pxp-stale-buf-execution:
    - shard-mtlp:         NOTRUN -> [SKIP][84] ([i915#4270]) +3 other tests skip
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-7/igt@gem_pxp@verify-pxp-stale-buf-execution.html

  * igt@gem_render_copy@y-tiled-ccs-to-y-tiled-mc-ccs:
    - shard-mtlp:         NOTRUN -> [SKIP][85] ([i915#8428]) +4 other tests skip
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-4/igt@gem_render_copy@y-tiled-ccs-to-y-tiled-mc-ccs.html

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

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

  * igt@gem_set_tiling_vs_blt@untiled-to-tiled:
    - shard-mtlp:         NOTRUN -> [SKIP][89] ([i915#4079]) +1 other test skip
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-7/igt@gem_set_tiling_vs_blt@untiled-to-tiled.html

  * igt@gem_set_tiling_vs_gtt:
    - shard-dg1:          NOTRUN -> [SKIP][90] ([i915#4079]) +1 other test skip
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-15/igt@gem_set_tiling_vs_gtt.html

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

  * igt@gem_unfence_active_buffers:
    - shard-dg2:          NOTRUN -> [SKIP][92] ([i915#4879])
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@gem_unfence_active_buffers.html

  * igt@gem_userptr_blits@coherency-sync:
    - shard-dg1:          NOTRUN -> [SKIP][93] ([i915#3297]) +2 other tests skip
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-16/igt@gem_userptr_blits@coherency-sync.html

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

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

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

  * igt@gen9_exec_parse@basic-rejected:
    - shard-tglu:         NOTRUN -> [SKIP][98] ([i915#2527] / [i915#2856])
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-tglu-5/igt@gen9_exec_parse@basic-rejected.html
    - shard-mtlp:         NOTRUN -> [SKIP][99] ([i915#2856]) +5 other tests skip
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-4/igt@gen9_exec_parse@basic-rejected.html

  * igt@gen9_exec_parse@bb-chained:
    - shard-rkl:          NOTRUN -> [SKIP][100] ([i915#2527]) +3 other tests skip
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-5/igt@gen9_exec_parse@bb-chained.html

  * igt@gen9_exec_parse@bb-large:
    - shard-dg1:          NOTRUN -> [SKIP][101] ([i915#2527]) +4 other tests skip
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-17/igt@gen9_exec_parse@bb-large.html

  * igt@gen9_exec_parse@valid-registers:
    - shard-dg2:          NOTRUN -> [SKIP][102] ([i915#2856]) +1 other test skip
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@gen9_exec_parse@valid-registers.html

  * igt@i915_module_load@load:
    - shard-rkl:          NOTRUN -> [SKIP][103] ([i915#6227])
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-3/igt@i915_module_load@load.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-rkl:          [PASS][104] -> [ABORT][105] ([i915#9820])
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-rkl-1/igt@i915_module_load@reload-with-fault-injection.html
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-3/igt@i915_module_load@reload-with-fault-injection.html
    - shard-snb:          [PASS][106] -> [INCOMPLETE][107] ([i915#9849])
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-snb4/igt@i915_module_load@reload-with-fault-injection.html
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-snb7/igt@i915_module_load@reload-with-fault-injection.html

  * igt@i915_module_load@resize-bar:
    - shard-rkl:          NOTRUN -> [SKIP][108] ([i915#6412])
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-2/igt@i915_module_load@resize-bar.html
    - shard-mtlp:         NOTRUN -> [SKIP][109] ([i915#6412])
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-4/igt@i915_module_load@resize-bar.html

  * igt@i915_pm_rps@min-max-config-loaded:
    - shard-dg1:          NOTRUN -> [SKIP][110] ([i915#6621])
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-15/igt@i915_pm_rps@min-max-config-loaded.html

  * igt@i915_pm_rps@thresholds-idle@gt0:
    - shard-dg1:          NOTRUN -> [SKIP][111] ([i915#8925])
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-13/igt@i915_pm_rps@thresholds-idle@gt0.html

  * igt@i915_pm_rps@thresholds-park@gt0:
    - shard-mtlp:         NOTRUN -> [SKIP][112] ([i915#8925]) +1 other test skip
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-6/igt@i915_pm_rps@thresholds-park@gt0.html

  * igt@i915_pm_rps@thresholds@gt1:
    - shard-mtlp:         NOTRUN -> [SKIP][113] ([i915#3555] / [i915#8925]) +1 other test skip
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-7/igt@i915_pm_rps@thresholds@gt1.html

  * igt@i915_suspend@basic-s3-without-i915:
    - shard-rkl:          [PASS][114] -> [FAIL][115] ([i915#10031])
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-rkl-1/igt@i915_suspend@basic-s3-without-i915.html
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-5/igt@i915_suspend@basic-s3-without-i915.html
    - shard-mtlp:         NOTRUN -> [SKIP][116] ([i915#6645])
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-6/igt@i915_suspend@basic-s3-without-i915.html

  * igt@intel_hwmon@hwmon-write:
    - shard-rkl:          NOTRUN -> [SKIP][117] ([i915#7707])
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-2/igt@intel_hwmon@hwmon-write.html

  * igt@kms_addfb_basic@addfb25-framebuffer-vs-set-tiling:
    - shard-mtlp:         NOTRUN -> [SKIP][118] ([i915#4212]) +3 other tests skip
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-2/igt@kms_addfb_basic@addfb25-framebuffer-vs-set-tiling.html

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

  * igt@kms_addfb_basic@clobberred-modifier:
    - shard-dg2:          NOTRUN -> [SKIP][120] ([i915#4212]) +2 other tests skip
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@kms_addfb_basic@clobberred-modifier.html
    - shard-dg1:          NOTRUN -> [SKIP][121] ([i915#4212]) +1 other test skip
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-13/igt@kms_addfb_basic@clobberred-modifier.html

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

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

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

  * igt@kms_atomic@plane-primary-overlay-mutable-zpos:
    - shard-mtlp:         NOTRUN -> [SKIP][125] ([i915#3555])
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-3/igt@kms_atomic@plane-primary-overlay-mutable-zpos.html

  * igt@kms_atomic_transition@plane-all-modeset-transition:
    - shard-mtlp:         NOTRUN -> [SKIP][126] ([i915#1769] / [i915#3555])
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-5/igt@kms_atomic_transition@plane-all-modeset-transition.html

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

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

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

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

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

  * igt@kms_big_fb@linear-64bpp-rotate-270:
    - shard-mtlp:         NOTRUN -> [SKIP][133] +29 other tests skip
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-3/igt@kms_big_fb@linear-64bpp-rotate-270.html

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

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

  * igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
    - shard-tglu:         [PASS][136] -> [FAIL][137] ([i915#3743]) +1 other test fail
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-tglu-5/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-tglu-7/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html

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

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

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

  * igt@kms_big_joiner@basic:
    - shard-dg1:          NOTRUN -> [SKIP][141] ([i915#2705])
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-13/igt@kms_big_joiner@basic.html

  * igt@kms_big_joiner@invalid-modeset:
    - shard-mtlp:         NOTRUN -> [SKIP][142] ([i915#2705])
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-8/igt@kms_big_joiner@invalid-modeset.html

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

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-mc-ccs@pipe-b-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][144] ([i915#6095]) +45 other tests skip
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-5/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-mc-ccs@pipe-b-hdmi-a-1.html

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

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-mc-ccs@pipe-c-hdmi-a-1:
    - shard-tglu:         NOTRUN -> [SKIP][146] ([i915#6095]) +11 other tests skip
   [146]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-tglu-4/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-mc-ccs@pipe-c-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-xe2-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][147] ([i915#10278]) +1 other test skip
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@kms_ccs@crc-primary-rotation-180-4-tiled-xe2-ccs.html

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

  * igt@kms_ccs@missing-ccs-buffer-y-tiled-ccs@pipe-d-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][149] ([i915#10307] / [i915#10434] / [i915#6095]) +6 other tests skip
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-10/igt@kms_ccs@missing-ccs-buffer-y-tiled-ccs@pipe-d-hdmi-a-1.html

  * igt@kms_ccs@random-ccs-data-4-tiled-xe2-ccs:
    - shard-dg1:          NOTRUN -> [SKIP][150] ([i915#10278]) +1 other test skip
   [150]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-16/igt@kms_ccs@random-ccs-data-4-tiled-xe2-ccs.html
    - shard-rkl:          NOTRUN -> [SKIP][151] ([i915#10278])
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-5/igt@kms_ccs@random-ccs-data-4-tiled-xe2-ccs.html

  * igt@kms_cdclk@mode-transition@pipe-b-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][152] ([i915#7213] / [i915#9010]) +3 other tests skip
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-5/igt@kms_cdclk@mode-transition@pipe-b-edp-1.html

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

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

  * igt@kms_chamelium_frames@hdmi-crc-single:
    - shard-rkl:          NOTRUN -> [SKIP][155] ([i915#7828]) +8 other tests skip
   [155]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-5/igt@kms_chamelium_frames@hdmi-crc-single.html

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

  * igt@kms_chamelium_hpd@vga-hpd-enable-disable-mode:
    - shard-mtlp:         NOTRUN -> [SKIP][157] ([i915#7828]) +9 other tests skip
   [157]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-7/igt@kms_chamelium_hpd@vga-hpd-enable-disable-mode.html

  * igt@kms_chamelium_hpd@vga-hpd-fast:
    - shard-tglu:         NOTRUN -> [SKIP][158] ([i915#7828]) +1 other test skip
   [158]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-tglu-2/igt@kms_chamelium_hpd@vga-hpd-fast.html

  * igt@kms_content_protection@dp-mst-lic-type-1:
    - shard-dg2:          NOTRUN -> [SKIP][159] ([i915#3299]) +1 other test skip
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-5/igt@kms_content_protection@dp-mst-lic-type-1.html
    - shard-mtlp:         NOTRUN -> [SKIP][160] ([i915#3299])
   [160]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-5/igt@kms_content_protection@dp-mst-lic-type-1.html

  * igt@kms_content_protection@dp-mst-type-1:
    - shard-rkl:          NOTRUN -> [SKIP][161] ([i915#3116])
   [161]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-2/igt@kms_content_protection@dp-mst-type-1.html

  * igt@kms_content_protection@legacy:
    - shard-rkl:          NOTRUN -> [SKIP][162] ([i915#7118] / [i915#9424])
   [162]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-3/igt@kms_content_protection@legacy.html

  * igt@kms_content_protection@srm:
    - shard-dg2:          NOTRUN -> [SKIP][163] ([i915#7118])
   [163]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-6/igt@kms_content_protection@srm.html
    - shard-rkl:          NOTRUN -> [SKIP][164] ([i915#7118])
   [164]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-1/igt@kms_content_protection@srm.html
    - shard-dg1:          NOTRUN -> [SKIP][165] ([i915#7116])
   [165]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-17/igt@kms_content_protection@srm.html

  * igt@kms_content_protection@uevent:
    - shard-dg2:          NOTRUN -> [SKIP][166] ([i915#7118] / [i915#9424]) +1 other test skip
   [166]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-7/igt@kms_content_protection@uevent.html

  * igt@kms_cursor_crc@cursor-offscreen-512x170:
    - shard-mtlp:         NOTRUN -> [SKIP][167] ([i915#3359]) +1 other test skip
   [167]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-2/igt@kms_cursor_crc@cursor-offscreen-512x170.html

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

  * igt@kms_cursor_crc@cursor-onscreen-512x170:
    - shard-rkl:          NOTRUN -> [SKIP][169] ([i915#3359]) +2 other tests skip
   [169]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-6/igt@kms_cursor_crc@cursor-onscreen-512x170.html

  * igt@kms_cursor_crc@cursor-random-512x512:
    - shard-dg2:          NOTRUN -> [SKIP][170] ([i915#3359]) +3 other tests skip
   [170]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-10/igt@kms_cursor_crc@cursor-random-512x512.html

  * igt@kms_cursor_crc@cursor-random-max-size:
    - shard-mtlp:         NOTRUN -> [SKIP][171] ([i915#3555] / [i915#8814]) +2 other tests skip
   [171]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-8/igt@kms_cursor_crc@cursor-random-max-size.html

  * igt@kms_cursor_crc@cursor-rapid-movement-max-size:
    - shard-dg1:          NOTRUN -> [SKIP][172] ([i915#3555]) +4 other tests skip
   [172]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-13/igt@kms_cursor_crc@cursor-rapid-movement-max-size.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic:
    - shard-dg2:          NOTRUN -> [SKIP][173] ([i915#4103] / [i915#4213]) +2 other tests skip
   [173]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html
    - shard-rkl:          NOTRUN -> [SKIP][174] ([i915#4103]) +1 other test skip
   [174]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-5/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size:
    - shard-dg1:          NOTRUN -> [SKIP][175] ([i915#4103] / [i915#4213]) +1 other test skip
   [175]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-13/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html
    - shard-tglu:         NOTRUN -> [SKIP][176] ([i915#4103])
   [176]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-tglu-10/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html

  * igt@kms_cursor_legacy@cursora-vs-flipb-atomic:
    - shard-mtlp:         NOTRUN -> [SKIP][177] ([i915#9809]) +5 other tests skip
   [177]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-4/igt@kms_cursor_legacy@cursora-vs-flipb-atomic.html

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

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle:
    - shard-mtlp:         NOTRUN -> [SKIP][179] ([i915#4213]) +2 other tests skip
   [179]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-8/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html

  * igt@kms_dirtyfb@drrs-dirtyfb-ioctl:
    - shard-mtlp:         NOTRUN -> [SKIP][180] ([i915#9833])
   [180]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-6/igt@kms_dirtyfb@drrs-dirtyfb-ioctl.html

  * igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][181] ([i915#9227])
   [181]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-8/igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-hdmi-a-1.html

  * igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][182] ([i915#9723])
   [182]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-3/igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-hdmi-a-2.html

  * igt@kms_dirtyfb@psr-dirtyfb-ioctl:
    - shard-dg1:          NOTRUN -> [SKIP][183] ([i915#9723])
   [183]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-15/igt@kms_dirtyfb@psr-dirtyfb-ioctl.html

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

  * igt@kms_dp_aux_dev:
    - shard-dg2:          NOTRUN -> [SKIP][185] ([i915#1257])
   [185]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-6/igt@kms_dp_aux_dev.html

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

  * igt@kms_dsc@dsc-fractional-bpp:
    - shard-mtlp:         NOTRUN -> [SKIP][187] ([i915#3840] / [i915#9688])
   [187]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-7/igt@kms_dsc@dsc-fractional-bpp.html

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

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

  * igt@kms_fbcon_fbt@psr-suspend:
    - shard-dg1:          NOTRUN -> [SKIP][190] ([i915#3469])
   [190]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-13/igt@kms_fbcon_fbt@psr-suspend.html
    - shard-dg2:          NOTRUN -> [SKIP][191] ([i915#3469])
   [191]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@kms_fbcon_fbt@psr-suspend.html

  * igt@kms_feature_discovery@chamelium:
    - shard-mtlp:         NOTRUN -> [SKIP][192] ([i915#4854])
   [192]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-5/igt@kms_feature_discovery@chamelium.html
    - shard-dg2:          NOTRUN -> [SKIP][193] ([i915#4854])
   [193]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-8/igt@kms_feature_discovery@chamelium.html

  * igt@kms_feature_discovery@display-3x:
    - shard-dg1:          NOTRUN -> [SKIP][194] ([i915#1839])
   [194]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-17/igt@kms_feature_discovery@display-3x.html

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

  * igt@kms_feature_discovery@dp-mst:
    - shard-dg2:          NOTRUN -> [SKIP][196] ([i915#9337])
   [196]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-2/igt@kms_feature_discovery@dp-mst.html
    - shard-rkl:          NOTRUN -> [SKIP][197] ([i915#9337])
   [197]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-6/igt@kms_feature_discovery@dp-mst.html
    - shard-mtlp:         NOTRUN -> [SKIP][198] ([i915#9337])
   [198]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-8/igt@kms_feature_discovery@dp-mst.html

  * igt@kms_feature_discovery@psr1:
    - shard-dg1:          NOTRUN -> [SKIP][199] ([i915#658])
   [199]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-17/igt@kms_feature_discovery@psr1.html

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

  * igt@kms_flip@2x-absolute-wf_vblank-interruptible:
    - shard-mtlp:         NOTRUN -> [SKIP][201] ([i915#3637]) +8 other tests skip
   [201]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-2/igt@kms_flip@2x-absolute-wf_vblank-interruptible.html

  * igt@kms_flip@2x-flip-vs-fences:
    - shard-dg2:          NOTRUN -> [SKIP][202] ([i915#8381])
   [202]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-8/igt@kms_flip@2x-flip-vs-fences.html

  * igt@kms_flip@2x-modeset-vs-vblank-race:
    - shard-dg2:          NOTRUN -> [SKIP][203] +35 other tests skip
   [203]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-2/igt@kms_flip@2x-modeset-vs-vblank-race.html

  * igt@kms_flip@2x-plain-flip:
    - shard-dg1:          NOTRUN -> [SKIP][204] ([i915#9934]) +2 other tests skip
   [204]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-14/igt@kms_flip@2x-plain-flip.html

  * igt@kms_flip@2x-wf_vblank-ts-check-interruptible:
    - shard-rkl:          NOTRUN -> [SKIP][205] +37 other tests skip
   [205]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-3/igt@kms_flip@2x-wf_vblank-ts-check-interruptible.html

  * igt@kms_flip@2x-wf_vblank-ts-check-interruptible@ab-vga1-hdmi-a1:
    - shard-snb:          [PASS][206] -> [FAIL][207] ([i915#2122])
   [206]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-snb2/igt@kms_flip@2x-wf_vblank-ts-check-interruptible@ab-vga1-hdmi-a1.html
   [207]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-snb7/igt@kms_flip@2x-wf_vblank-ts-check-interruptible@ab-vga1-hdmi-a1.html

  * igt@kms_flip@plain-flip-fb-recreate-interruptible@b-hdmi-a2:
    - shard-dg2:          [PASS][208] -> [FAIL][209] ([i915#2122]) +2 other tests fail
   [208]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-dg2-3/igt@kms_flip@plain-flip-fb-recreate-interruptible@b-hdmi-a2.html
   [209]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-2/igt@kms_flip@plain-flip-fb-recreate-interruptible@b-hdmi-a2.html

  * igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling@pipe-a-valid-mode:
    - shard-rkl:          NOTRUN -> [SKIP][210] ([i915#2672]) +3 other tests skip
   [210]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-3/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling@pipe-a-valid-mode.html
    - shard-dg1:          NOTRUN -> [SKIP][211] ([i915#2587] / [i915#2672]) +3 other tests skip
   [211]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-15/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling@pipe-a-default-mode:
    - shard-mtlp:         NOTRUN -> [SKIP][212] ([i915#2672]) +2 other tests skip
   [212]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/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-64bpp-4tile-to-32bpp-4tile-downscaling@pipe-a-default-mode:
    - shard-mtlp:         NOTRUN -> [SKIP][213] ([i915#8810])
   [213]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-7/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling@pipe-a-default-mode.html

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

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

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-downscaling@pipe-a-default-mode:
    - shard-mtlp:         NOTRUN -> [SKIP][216] ([i915#2672] / [i915#3555])
   [216]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-5/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-downscaling@pipe-a-default-mode.html

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode:
    - shard-dg2:          NOTRUN -> [SKIP][217] ([i915#2672] / [i915#3555])
   [217]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-6/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode.html

  * igt@kms_force_connector_basic@prune-stale-modes:
    - shard-mtlp:         NOTRUN -> [SKIP][218] ([i915#5274])
   [218]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-4/igt@kms_force_connector_basic@prune-stale-modes.html

  * igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-mmap-gtt:
    - shard-mtlp:         NOTRUN -> [SKIP][219] ([i915#8708]) +19 other tests skip
   [219]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-7/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-move:
    - shard-dg2:          [PASS][220] -> [FAIL][221] ([i915#6880]) +1 other test fail
   [220]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-dg2-11/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-move.html
   [221]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-5/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-move.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-blt:
    - shard-dg2:          NOTRUN -> [SKIP][222] ([i915#5354]) +62 other tests skip
   [222]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-2/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-draw-render:
    - shard-dg2:          NOTRUN -> [SKIP][223] ([i915#3458]) +22 other tests skip
   [223]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-wc:
    - shard-dg1:          NOTRUN -> [SKIP][224] ([i915#8708]) +23 other tests skip
   [224]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-18/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-mmap-gtt:
    - shard-rkl:          NOTRUN -> [SKIP][225] ([i915#3023]) +23 other tests skip
   [225]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-2/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-pwrite:
    - shard-dg1:          NOTRUN -> [SKIP][226] +48 other tests skip
   [226]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-13/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-shrfb-draw-blt:
    - shard-mtlp:         NOTRUN -> [SKIP][227] ([i915#1825]) +33 other tests skip
   [227]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-1/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt:
    - shard-rkl:          NOTRUN -> [SKIP][228] ([i915#1825]) +31 other tests skip
   [228]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-4/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-shrfb-fliptrack-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][229] ([i915#8708]) +36 other tests skip
   [229]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@kms_frontbuffer_tracking@fbcpsr-2p-shrfb-fliptrack-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-mmap-wc:
    - shard-tglu:         NOTRUN -> [SKIP][230] +6 other tests skip
   [230]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-tglu-9/igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-tiling-y:
    - shard-dg2:          NOTRUN -> [SKIP][231] ([i915#10055])
   [231]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-6/igt@kms_frontbuffer_tracking@fbcpsr-tiling-y.html
    - shard-mtlp:         NOTRUN -> [SKIP][232] ([i915#10055])
   [232]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-7/igt@kms_frontbuffer_tracking@fbcpsr-tiling-y.html

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

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-pwrite:
    - shard-dg1:          NOTRUN -> [SKIP][234] ([i915#3458]) +16 other tests skip
   [234]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-17/igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-indfb-draw-mmap-cpu:
    - shard-snb:          NOTRUN -> [SKIP][235] +68 other tests skip
   [235]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-snb4/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-indfb-draw-mmap-cpu.html

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

  * igt@kms_hdr@bpc-switch-dpms:
    - shard-dg1:          NOTRUN -> [SKIP][237] ([i915#3555] / [i915#8228]) +1 other test skip
   [237]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-15/igt@kms_hdr@bpc-switch-dpms.html

  * igt@kms_hdr@static-swap:
    - shard-mtlp:         NOTRUN -> [SKIP][238] ([i915#3555] / [i915#8228]) +1 other test skip
   [238]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-4/igt@kms_hdr@static-swap.html

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

  * igt@kms_panel_fitting@atomic-fastset:
    - shard-dg1:          NOTRUN -> [SKIP][240] ([i915#6301]) +1 other test skip
   [240]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-17/igt@kms_panel_fitting@atomic-fastset.html

  * igt@kms_panel_fitting@legacy:
    - shard-tglu:         NOTRUN -> [SKIP][241] ([i915#6301])
   [241]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-tglu-7/igt@kms_panel_fitting@legacy.html
    - shard-dg2:          NOTRUN -> [SKIP][242] ([i915#6301])
   [242]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-8/igt@kms_panel_fitting@legacy.html

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

  * igt@kms_plane_multiple@tiling-yf:
    - shard-rkl:          NOTRUN -> [SKIP][244] ([i915#3555]) +4 other tests skip
   [244]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-5/igt@kms_plane_multiple@tiling-yf.html
    - shard-dg2:          NOTRUN -> [SKIP][245] ([i915#3555] / [i915#8806])
   [245]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-8/igt@kms_plane_multiple@tiling-yf.html

  * igt@kms_plane_scaling@intel-max-src-size:
    - shard-dg2:          NOTRUN -> [SKIP][246] ([i915#6953] / [i915#9423])
   [246]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-2/igt@kms_plane_scaling@intel-max-src-size.html

  * igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [FAIL][247] ([i915#8292])
   [247]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-6/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-2.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-25-with-modifiers@pipe-b-dp-4:
    - shard-dg2:          NOTRUN -> [SKIP][248] ([i915#9423]) +7 other tests skip
   [248]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-modifiers@pipe-b-dp-4.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][249] ([i915#9423]) +9 other tests skip
   [249]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-3/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format@pipe-a-hdmi-a-2.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-25-with-rotation@pipe-a-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [SKIP][250] ([i915#9423]) +7 other tests skip
   [250]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-15/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-rotation@pipe-a-hdmi-a-4.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-c-hdmi-a-2:
    - shard-dg2:          NOTRUN -> [SKIP][251] ([i915#5235] / [i915#9423] / [i915#9728]) +3 other tests skip
   [251]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-3/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-c-hdmi-a-2.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-c-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [SKIP][252] ([i915#5235]) +11 other tests skip
   [252]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-18/igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-c-hdmi-a-4.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-5-unity-scaling@pipe-a-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][253] ([i915#5235]) +15 other tests skip
   [253]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-7/igt@kms_plane_scaling@planes-downscale-factor-0-5-unity-scaling@pipe-a-edp-1.html

  * igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25@pipe-a-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][254] ([i915#5235]) +7 other tests skip
   [254]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-5/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25@pipe-a-hdmi-a-1.html

  * igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25@pipe-b-dp-4:
    - shard-dg2:          NOTRUN -> [SKIP][255] ([i915#5235] / [i915#9423]) +23 other tests skip
   [255]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25@pipe-b-dp-4.html

  * igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-5@pipe-d-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][256] ([i915#3555] / [i915#5235]) +3 other tests skip
   [256]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-1/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-5@pipe-d-edp-1.html

  * igt@kms_pm_backlight@fade-with-dpms:
    - shard-dg1:          NOTRUN -> [SKIP][257] ([i915#5354]) +3 other tests skip
   [257]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-15/igt@kms_pm_backlight@fade-with-dpms.html

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

  * igt@kms_pm_lpsp@kms-lpsp:
    - shard-dg2:          NOTRUN -> [SKIP][259] ([i915#9340])
   [259]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@kms_pm_lpsp@kms-lpsp.html

  * igt@kms_pm_lpsp@screens-disabled:
    - shard-rkl:          NOTRUN -> [SKIP][260] ([i915#8430])
   [260]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-5/igt@kms_pm_lpsp@screens-disabled.html
    - shard-mtlp:         NOTRUN -> [SKIP][261] ([i915#8430])
   [261]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-4/igt@kms_pm_lpsp@screens-disabled.html
    - shard-dg2:          NOTRUN -> [SKIP][262] ([i915#8430])
   [262]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-3/igt@kms_pm_lpsp@screens-disabled.html

  * igt@kms_pm_rpm@dpms-mode-unset-lpsp:
    - shard-dg2:          [PASS][263] -> [SKIP][264] ([i915#9519])
   [263]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-dg2-8/igt@kms_pm_rpm@dpms-mode-unset-lpsp.html
   [264]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-2/igt@kms_pm_rpm@dpms-mode-unset-lpsp.html
    - shard-rkl:          NOTRUN -> [SKIP][265] ([i915#9519])
   [265]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-1/igt@kms_pm_rpm@dpms-mode-unset-lpsp.html

  * igt@kms_pm_rpm@dpms-non-lpsp:
    - shard-mtlp:         NOTRUN -> [SKIP][266] ([i915#9519])
   [266]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-7/igt@kms_pm_rpm@dpms-non-lpsp.html

  * igt@kms_pm_rpm@modeset-lpsp:
    - shard-rkl:          [PASS][267] -> [SKIP][268] ([i915#9519]) +1 other test skip
   [267]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-rkl-4/igt@kms_pm_rpm@modeset-lpsp.html
   [268]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-3/igt@kms_pm_rpm@modeset-lpsp.html

  * igt@kms_pm_rpm@modeset-lpsp-stress:
    - shard-dg2:          NOTRUN -> [SKIP][269] ([i915#9519])
   [269]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@kms_pm_rpm@modeset-lpsp-stress.html

  * igt@kms_prime@basic-crc-hybrid:
    - shard-rkl:          NOTRUN -> [SKIP][270] ([i915#6524])
   [270]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-6/igt@kms_prime@basic-crc-hybrid.html

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

  * igt@kms_psr2_sf@fbc-cursor-plane-update-sf@psr2-pipe-a-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][272] ([i915#9808]) +1 other test skip
   [272]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-1/igt@kms_psr2_sf@fbc-cursor-plane-update-sf@psr2-pipe-a-edp-1.html

  * igt@kms_psr2_su@page_flip-p010:
    - shard-dg2:          NOTRUN -> [SKIP][273] ([i915#9683]) +1 other test skip
   [273]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-2/igt@kms_psr2_su@page_flip-p010.html
    - shard-dg1:          NOTRUN -> [SKIP][274] ([i915#9683])
   [274]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-16/igt@kms_psr2_su@page_flip-p010.html
    - shard-tglu:         NOTRUN -> [SKIP][275] ([i915#9683])
   [275]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-tglu-4/igt@kms_psr2_su@page_flip-p010.html
    - shard-mtlp:         NOTRUN -> [SKIP][276] ([i915#4348])
   [276]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-2/igt@kms_psr2_su@page_flip-p010.html

  * igt@kms_psr@fbc-pr-primary-blt:
    - shard-mtlp:         NOTRUN -> [SKIP][277] ([i915#9688]) +16 other tests skip
   [277]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-4/igt@kms_psr@fbc-pr-primary-blt.html

  * igt@kms_psr@fbc-pr-sprite-plane-move:
    - shard-tglu:         NOTRUN -> [SKIP][278] ([i915#9732])
   [278]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-tglu-7/igt@kms_psr@fbc-pr-sprite-plane-move.html

  * igt@kms_psr@fbc-psr-cursor-plane-move:
    - shard-dg2:          NOTRUN -> [SKIP][279] ([i915#1072] / [i915#9673] / [i915#9732]) +5 other tests skip
   [279]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@kms_psr@fbc-psr-cursor-plane-move.html

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

  * igt@kms_psr@psr2-cursor-mmap-gtt:
    - shard-rkl:          NOTRUN -> [SKIP][281] ([i915#1072] / [i915#9732]) +23 other tests skip
   [281]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-2/igt@kms_psr@psr2-cursor-mmap-gtt.html

  * igt@kms_psr@psr2-primary-mmap-cpu:
    - shard-dg1:          NOTRUN -> [SKIP][282] ([i915#1072] / [i915#9732]) +28 other tests skip
   [282]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-17/igt@kms_psr@psr2-primary-mmap-cpu.html

  * igt@kms_psr@psr2-primary-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][283] ([i915#1072] / [i915#9732]) +25 other tests skip
   [283]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-3/igt@kms_psr@psr2-primary-mmap-gtt.html

  * igt@kms_rotation_crc@primary-y-tiled-reflect-x-90:
    - shard-mtlp:         NOTRUN -> [SKIP][284] ([i915#4235]) +2 other tests skip
   [284]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-7/igt@kms_rotation_crc@primary-y-tiled-reflect-x-90.html
    - shard-dg2:          NOTRUN -> [SKIP][285] ([i915#4235] / [i915#5190])
   [285]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-6/igt@kms_rotation_crc@primary-y-tiled-reflect-x-90.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
    - shard-dg2:          NOTRUN -> [SKIP][286] ([i915#5190]) +1 other test skip
   [286]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180:
    - shard-rkl:          NOTRUN -> [SKIP][287] ([i915#5289]) +1 other test skip
   [287]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-4/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html
    - shard-mtlp:         NOTRUN -> [SKIP][288] ([i915#5289])
   [288]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-6/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270:
    - shard-dg1:          NOTRUN -> [SKIP][289] ([i915#5289]) +1 other test skip
   [289]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-17/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html

  * igt@kms_scaling_modes@scaling-mode-center:
    - shard-tglu:         NOTRUN -> [SKIP][290] ([i915#3555]) +2 other tests skip
   [290]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-tglu-8/igt@kms_scaling_modes@scaling-mode-center.html

  * igt@kms_scaling_modes@scaling-mode-none:
    - shard-dg2:          NOTRUN -> [SKIP][291] ([i915#3555]) +5 other tests skip
   [291]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@kms_scaling_modes@scaling-mode-none.html

  * igt@kms_scaling_modes@scaling-mode-none@pipe-a-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][292] ([i915#5030]) +2 other tests skip
   [292]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-4/igt@kms_scaling_modes@scaling-mode-none@pipe-a-edp-1.html

  * igt@kms_scaling_modes@scaling-mode-none@pipe-d-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][293] ([i915#5030] / [i915#9041])
   [293]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-4/igt@kms_scaling_modes@scaling-mode-none@pipe-d-edp-1.html

  * igt@kms_setmode@clone-exclusive-crtc:
    - shard-mtlp:         NOTRUN -> [SKIP][294] ([i915#3555] / [i915#8809]) +1 other test skip
   [294]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-5/igt@kms_setmode@clone-exclusive-crtc.html

  * igt@kms_sysfs_edid_timing:
    - shard-dg1:          NOTRUN -> [FAIL][295] ([IGT#2] / [i915#6493])
   [295]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-17/igt@kms_sysfs_edid_timing.html

  * igt@kms_tiled_display@basic-test-pattern-with-chamelium:
    - shard-dg2:          NOTRUN -> [SKIP][296] ([i915#8623])
   [296]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-b-edp-1:
    - shard-mtlp:         [PASS][297] -> [FAIL][298] ([i915#9196])
   [297]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-mtlp-8/igt@kms_universal_plane@cursor-fb-leak@pipe-b-edp-1.html
   [298]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-6/igt@kms_universal_plane@cursor-fb-leak@pipe-b-edp-1.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-1:
    - shard-tglu:         [PASS][299] -> [FAIL][300] ([i915#9196])
   [299]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-tglu-5/igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-1.html
   [300]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-tglu-2/igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-1.html

  * igt@kms_vrr@flip-basic-fastset:
    - shard-mtlp:         NOTRUN -> [SKIP][301] ([i915#8808] / [i915#9906]) +2 other tests skip
   [301]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-6/igt@kms_vrr@flip-basic-fastset.html

  * igt@kms_vrr@flip-suspend:
    - shard-mtlp:         NOTRUN -> [SKIP][302] ([i915#3555] / [i915#8808])
   [302]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-8/igt@kms_vrr@flip-suspend.html

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

  * igt@kms_vrr@seamless-rr-switch-vrr:
    - shard-dg1:          NOTRUN -> [SKIP][304] ([i915#9906]) +1 other test skip
   [304]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-14/igt@kms_vrr@seamless-rr-switch-vrr.html

  * igt@kms_writeback@writeback-check-output-xrgb2101010:
    - shard-dg1:          NOTRUN -> [SKIP][305] ([i915#2437] / [i915#9412])
   [305]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-18/igt@kms_writeback@writeback-check-output-xrgb2101010.html

  * igt@kms_writeback@writeback-fb-id-xrgb2101010:
    - shard-dg2:          NOTRUN -> [SKIP][306] ([i915#2437] / [i915#9412])
   [306]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@kms_writeback@writeback-fb-id-xrgb2101010.html
    - shard-glk:          NOTRUN -> [SKIP][307] ([i915#2437]) +1 other test skip
   [307]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-glk5/igt@kms_writeback@writeback-fb-id-xrgb2101010.html

  * igt@perf@gen8-unprivileged-single-ctx-counters:
    - shard-dg2:          NOTRUN -> [SKIP][308] ([i915#2436] / [i915#7387])
   [308]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-2/igt@perf@gen8-unprivileged-single-ctx-counters.html

  * igt@perf@mi-rpc:
    - shard-dg1:          NOTRUN -> [SKIP][309] ([i915#2434])
   [309]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-16/igt@perf@mi-rpc.html

  * igt@perf@non-zero-reason@0-rcs0:
    - shard-dg2:          NOTRUN -> [FAIL][310] ([i915#9100])
   [310]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-5/igt@perf@non-zero-reason@0-rcs0.html

  * igt@perf_pmu@busy-double-start@rcs0:
    - shard-mtlp:         [PASS][311] -> [FAIL][312] ([i915#4349])
   [311]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-mtlp-7/igt@perf_pmu@busy-double-start@rcs0.html
   [312]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-6/igt@perf_pmu@busy-double-start@rcs0.html

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

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

  * igt@perf_pmu@rc6@other-idle-gt0:
    - shard-dg2:          NOTRUN -> [SKIP][315] ([i915#8516])
   [315]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@perf_pmu@rc6@other-idle-gt0.html
    - shard-rkl:          NOTRUN -> [SKIP][316] ([i915#8516])
   [316]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-2/igt@perf_pmu@rc6@other-idle-gt0.html
    - shard-dg1:          NOTRUN -> [SKIP][317] ([i915#8516])
   [317]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-15/igt@perf_pmu@rc6@other-idle-gt0.html

  * igt@prime_mmap@test_aperture_limit@test_aperture_limit-smem:
    - shard-dg2:          NOTRUN -> [INCOMPLETE][318] ([i915#5493])
   [318]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-2/igt@prime_mmap@test_aperture_limit@test_aperture_limit-smem.html

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

  * igt@prime_vgem@basic-read:
    - shard-mtlp:         NOTRUN -> [SKIP][320] ([i915#3708])
   [320]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-4/igt@prime_vgem@basic-read.html

  * igt@prime_vgem@basic-write:
    - shard-dg2:          NOTRUN -> [SKIP][321] ([i915#3291] / [i915#3708])
   [321]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-2/igt@prime_vgem@basic-write.html
    - shard-rkl:          NOTRUN -> [SKIP][322] ([i915#3291] / [i915#3708])
   [322]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-6/igt@prime_vgem@basic-write.html
    - shard-mtlp:         NOTRUN -> [SKIP][323] ([i915#10216] / [i915#3708])
   [323]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-8/igt@prime_vgem@basic-write.html

  * igt@prime_vgem@coherency-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][324] ([i915#3708] / [i915#4077]) +1 other test skip
   [324]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-8/igt@prime_vgem@coherency-gtt.html

  * igt@prime_vgem@fence-flip-hang:
    - shard-rkl:          NOTRUN -> [SKIP][325] ([i915#3708])
   [325]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-5/igt@prime_vgem@fence-flip-hang.html

  * igt@sriov_basic@enable-vfs-autoprobe-on:
    - shard-tglu:         NOTRUN -> [SKIP][326] ([i915#9917])
   [326]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-tglu-5/igt@sriov_basic@enable-vfs-autoprobe-on.html
    - shard-mtlp:         NOTRUN -> [SKIP][327] ([i915#9917]) +1 other test skip
   [327]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-7/igt@sriov_basic@enable-vfs-autoprobe-on.html

  * igt@sriov_basic@enable-vfs-bind-unbind-each:
    - shard-dg1:          NOTRUN -> [SKIP][328] ([i915#9917]) +1 other test skip
   [328]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-16/igt@sriov_basic@enable-vfs-bind-unbind-each.html

  * igt@syncobj_wait@invalid-wait-zero-handles:
    - shard-mtlp:         NOTRUN -> [FAIL][329] ([i915#9779])
   [329]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-3/igt@syncobj_wait@invalid-wait-zero-handles.html
    - shard-dg1:          NOTRUN -> [FAIL][330] ([i915#9779])
   [330]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-13/igt@syncobj_wait@invalid-wait-zero-handles.html

  * igt@v3d/v3d_get_bo_offset@create-get-offsets:
    - shard-dg1:          NOTRUN -> [SKIP][331] ([i915#2575]) +14 other tests skip
   [331]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-16/igt@v3d/v3d_get_bo_offset@create-get-offsets.html

  * igt@v3d/v3d_submit_cl@simple-flush-cache:
    - shard-dg2:          NOTRUN -> [SKIP][332] ([i915#2575]) +19 other tests skip
   [332]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@v3d/v3d_submit_cl@simple-flush-cache.html

  * igt@v3d/v3d_wait_bo@map-bo-0ns:
    - shard-mtlp:         NOTRUN -> [SKIP][333] ([i915#2575]) +13 other tests skip
   [333]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-3/igt@v3d/v3d_wait_bo@map-bo-0ns.html

  * igt@vc4/vc4_create_bo@create-bo-4096:
    - shard-mtlp:         NOTRUN -> [SKIP][334] ([i915#7711]) +9 other tests skip
   [334]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-1/igt@vc4/vc4_create_bo@create-bo-4096.html
    - shard-rkl:          NOTRUN -> [SKIP][335] ([i915#7711]) +4 other tests skip
   [335]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-3/igt@vc4/vc4_create_bo@create-bo-4096.html

  * igt@vc4/vc4_tiling@set-bad-handle:
    - shard-dg1:          NOTRUN -> [SKIP][336] ([i915#7711]) +10 other tests skip
   [336]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-17/igt@vc4/vc4_tiling@set-bad-handle.html

  * igt@vc4/vc4_wait_bo@bad-pad:
    - shard-dg2:          NOTRUN -> [SKIP][337] ([i915#7711]) +14 other tests skip
   [337]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-8/igt@vc4/vc4_wait_bo@bad-pad.html

  
#### Possible fixes ####

  * igt@core_hotunplug@unbind-rebind:
    - shard-dg1:          [DMESG-WARN][338] ([i915#4391] / [i915#4423]) -> [PASS][339]
   [338]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-dg1-18/igt@core_hotunplug@unbind-rebind.html
   [339]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-13/igt@core_hotunplug@unbind-rebind.html

  * igt@drm_fdinfo@most-busy-check-all@rcs0:
    - shard-rkl:          [FAIL][340] ([i915#7742]) -> [PASS][341]
   [340]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-rkl-4/igt@drm_fdinfo@most-busy-check-all@rcs0.html
   [341]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-1/igt@drm_fdinfo@most-busy-check-all@rcs0.html

  * igt@gem_exec_fair@basic-deadline:
    - shard-rkl:          [FAIL][342] ([i915#2846]) -> [PASS][343]
   [342]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-rkl-3/igt@gem_exec_fair@basic-deadline.html
   [343]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-4/igt@gem_exec_fair@basic-deadline.html

  * igt@gem_exec_fair@basic-none-share@rcs0:
    - shard-tglu:         [FAIL][344] ([i915#2842]) -> [PASS][345]
   [344]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-tglu-6/igt@gem_exec_fair@basic-none-share@rcs0.html
   [345]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-tglu-9/igt@gem_exec_fair@basic-none-share@rcs0.html

  * igt@gem_lmem_swapping@heavy-multi@lmem0:
    - shard-dg2:          [FAIL][346] ([i915#10378]) -> [PASS][347]
   [346]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-dg2-7/igt@gem_lmem_swapping@heavy-multi@lmem0.html
   [347]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@gem_lmem_swapping@heavy-multi@lmem0.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-tglu:         [INCOMPLETE][348] ([i915#9697] / [i915#9820]) -> [PASS][349]
   [348]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-tglu-8/igt@i915_module_load@reload-with-fault-injection.html
   [349]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-tglu-2/igt@i915_module_load@reload-with-fault-injection.html
    - shard-glk:          [ABORT][350] ([i915#9849]) -> [PASS][351]
   [350]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-glk1/igt@i915_module_load@reload-with-fault-injection.html
   [351]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-glk9/igt@i915_module_load@reload-with-fault-injection.html
    - shard-mtlp:         [ABORT][352] ([i915#10131] / [i915#9820]) -> [PASS][353]
   [352]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-mtlp-5/igt@i915_module_load@reload-with-fault-injection.html
   [353]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-mtlp-2/igt@i915_module_load@reload-with-fault-injection.html

  * igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip:
    - shard-tglu:         [FAIL][354] ([i915#3743]) -> [PASS][355] +2 other tests pass
   [354]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-tglu-5/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip.html
   [355]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-tglu-10/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip.html

  * igt@kms_pm_dc@dc6-dpms:
    - shard-tglu:         [FAIL][356] ([i915#9295]) -> [PASS][357]
   [356]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-tglu-10/igt@kms_pm_dc@dc6-dpms.html
   [357]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-tglu-10/igt@kms_pm_dc@dc6-dpms.html

  * igt@kms_pm_rpm@dpms-mode-unset-non-lpsp:
    - shard-dg2:          [SKIP][358] ([i915#9519]) -> [PASS][359] +2 other tests pass
   [358]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-dg2-10/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
   [359]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-5/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-b-hdmi-a-1:
    - shard-rkl:          [FAIL][360] ([i915#9196]) -> [PASS][361]
   [360]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-rkl-5/igt@kms_universal_plane@cursor-fb-leak@pipe-b-hdmi-a-1.html
   [361]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-4/igt@kms_universal_plane@cursor-fb-leak@pipe-b-hdmi-a-1.html

  
#### Warnings ####

  * igt@gem_eio@kms:
    - shard-dg2:          [FAIL][362] ([i915#5784]) -> [INCOMPLETE][363] ([i915#10513])
   [362]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-dg2-8/igt@gem_eio@kms.html
   [363]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-8/igt@gem_eio@kms.html

  * igt@i915_pm_rc6_residency@rc6-idle@gt0-vecs0:
    - shard-tglu:         [WARN][364] ([i915#2681]) -> [FAIL][365] ([i915#3591])
   [364]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-tglu-9/igt@i915_pm_rc6_residency@rc6-idle@gt0-vecs0.html
   [365]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-tglu-2/igt@i915_pm_rc6_residency@rc6-idle@gt0-vecs0.html

  * igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-4:
    - shard-dg1:          [SKIP][366] ([i915#4423] / [i915#6095]) -> [SKIP][367] ([i915#6095])
   [366]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-dg1-18/igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-4.html
   [367]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-15/igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-4.html

  * igt@kms_chamelium_edid@hdmi-edid-change-during-suspend:
    - shard-dg1:          [SKIP][368] ([i915#4423] / [i915#7828]) -> [SKIP][369] ([i915#7828])
   [368]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-dg1-18/igt@kms_chamelium_edid@hdmi-edid-change-during-suspend.html
   [369]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg1-14/igt@kms_chamelium_edid@hdmi-edid-change-during-suspend.html

  * igt@kms_content_protection@mei-interface:
    - shard-rkl:          [SKIP][370] ([i915#9424]) -> [SKIP][371] ([i915#8063])
   [370]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-rkl-4/igt@kms_content_protection@mei-interface.html
   [371]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-2/igt@kms_content_protection@mei-interface.html
    - shard-tglu:         [SKIP][372] ([i915#6944] / [i915#9424]) -> [SKIP][373] ([i915#8063])
   [372]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-tglu-8/igt@kms_content_protection@mei-interface.html
   [373]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-tglu-10/igt@kms_content_protection@mei-interface.html

  * igt@kms_content_protection@type1:
    - shard-dg2:          [SKIP][374] ([i915#7118] / [i915#7162] / [i915#9424]) -> [SKIP][375] ([i915#7118] / [i915#9424])
   [374]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-dg2-11/igt@kms_content_protection@type1.html
   [375]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-2/igt@kms_content_protection@type1.html

  * igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
    - shard-rkl:          [SKIP][376] ([i915#4070] / [i915#4816]) -> [SKIP][377] ([i915#4816])
   [376]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-rkl-6/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html
   [377]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-rkl-3/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html

  * igt@kms_psr@fbc-psr2-cursor-mmap-gtt:
    - shard-dg2:          [SKIP][378] ([i915#1072] / [i915#9673] / [i915#9732]) -> [SKIP][379] ([i915#1072] / [i915#9732]) +3 other tests skip
   [378]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-dg2-11/igt@kms_psr@fbc-psr2-cursor-mmap-gtt.html
   [379]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-10/igt@kms_psr@fbc-psr2-cursor-mmap-gtt.html

  * igt@kms_psr@pr-cursor-mmap-cpu:
    - shard-dg2:          [SKIP][380] ([i915#1072] / [i915#9732]) -> [SKIP][381] ([i915#1072] / [i915#9673] / [i915#9732]) +17 other tests skip
   [380]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14491/shard-dg2-10/igt@kms_psr@pr-cursor-mmap-cpu.html
   [381]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10929/shard-dg2-11/igt@kms_psr@pr-cursor-mmap-cpu.html

  
  [IGT#2]: https://gitlab.freedesktop.org/drm/igt-gpu-tools/issues/2
  [i915#10031]: https://gitlab.freedesktop.org/drm/intel/issues/10031
  [i915#10055]: https://gitlab.freedesktop.org/drm/intel/issues/10055
  [i915#10131]: https://gitlab.freedesktop.org/drm/intel/issues/10131
  [i915#10216]: https://gitlab.freedesktop.org/drm/intel/issues/10216
  [i915#10278]: https://gitlab.freedesktop.org/drm/intel/issues/10278
  [i915#10307]: https://gitlab.freedesktop.org/drm/intel/issues/10307
  [i915#10378]: https://gitlab.freedesktop.org/drm/intel/issues/10378
  [i915#10386]: https://gitlab.freedesktop.org/drm/intel/issues/10386
  [i915#10434]: https://gitlab.freedesktop.org/drm/intel/issues/10434
  [i915#10446]: https://gitlab.freedesktop.org/drm/intel/issues/10446
  [i915#10513]: https://gitlab.freedesktop.org/drm/intel/issues/10513
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#1257]: https://gitlab.freedesktop.org/drm/intel/issues/1257
  [i915#1769]: https://gitlab.freedesktop.org/drm/intel/issues/1769
  [i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825
  [i915#1839]: https://gitlab.freedesktop.org/drm/intel/issues/1839
  [i915#2122]: https://gitlab.freedesktop.org/drm/intel/issues/2122
  [i915#2434]: https://gitlab.freedesktop.org/drm/intel/issues/2434
  [i915#2436]: https://gitlab.freedesktop.org/drm/intel/issues/2436
  [i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437
  [i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527
  [i915#2575]: https://gitlab.freedesktop.org/drm/intel/issues/2575
  [i915#2587]: https://gitlab.freedesktop.org/drm/intel/issues/2587
  [i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
  [i915#2681]: https://gitlab.freedesktop.org/drm/intel/issues/2681
  [i915#2705]: https://gitlab.freedesktop.org/drm/intel/issues/2705
  [i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280
  [i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
  [i915#2846]: https://gitlab.freedesktop.org/drm/intel/issues/2846
  [i915#2856]: https://gitlab.freedesktop.org/drm/intel/issues/2856
  [i915#3023]: https://gitlab.freedesktop.org/drm/intel/issues/3023
  [i915#3116]: https://gitlab.freedesktop.org/drm/intel/issues/3116
  [i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281
  [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
  [i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291
  [i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297
  [i915#3299]: https://gitlab.freedesktop.org/drm/intel/issues/3299
  [i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
  [i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458
  [i915#3469]: https://gitlab.freedesktop.org/drm/intel/issues/3469
  [i915#3539]: https://gitlab.freedesktop.org/drm/intel/issues/3539
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [i915#3591]: https://gitlab.freedesktop.org/drm/intel/issues/3591
  [i915#3637]: https://gitlab.freedesktop.org/drm/intel/issues/3637
  [i915#3638]: https://gitlab.freedesktop.org/drm/intel/issues/3638
  [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
  [i915#3743]: https://gitlab.freedesktop.org/drm/intel/issues/3743
  [i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840
  [i915#3936]: https://gitlab.freedesktop.org/drm/intel/issues/3936
  [i915#3955]: https://gitlab.freedesktop.org/drm/intel/issues/3955
  [i915#4036]: https://gitlab.freedesktop.org/drm/intel/issues/4036
  [i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070
  [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
  [i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079
  [i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
  [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
  [i915#4212]: https://gitlab.freedesktop.org/drm/intel/issues/4212
  [i915#4213]: https://gitlab.freedesktop.org/drm/intel/issues/4213
  [i915#4235]: https://gitlab.freedesktop.org/drm/intel/issues/4235
  [i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
  [i915#4348]: https://gitlab.freedesktop.org/drm/intel/issues/4348
  [i915#4349]: https://gitlab.freedesktop.org/drm/intel/issues/4349
  [i915#4391]: https://gitlab.freedesktop.org/drm/intel/issues/4391
  [i915#4423]: https://gitlab.freedesktop.org/drm/intel/issues/4423
  [i915#4473]: https://gitlab.freedesktop.org/drm/intel/issues/4473
  [i915#4525]: https://gitlab.freedesktop.org/drm/intel/issues/4525
  [i915#4537]: https://gitlab.freedesktop.org/drm/intel/issues/4537
  [i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#4771]: https://gitlab.freedesktop.org/drm/intel/issues/4771
  [i915#4812]: https://gitlab.freedesktop.org/drm/intel/issues/4812
  [i915#4816]: https://gitlab.freedesktop.org/drm/intel/issues/4816
  [i915#4852]: https://gitlab.freedesktop.org/drm/intel/issues/4852
  [i915#4854]: https://gitlab.freedesktop.org/drm/intel/issues/4854
  [i915#4860]: https://gitlab.freedesktop.org/drm/intel/issues/4860
  [i915#4873]: https://gitlab.freedesktop.org/drm/intel/issues/4873
  [i915#4879]: https://gitlab.freedesktop.org/drm/intel/issues/4879
  [i915#4885]: https://gitlab.freedesktop.org/drm/intel/issues/4885
  [i915#4958]: https://gitlab.freedesktop.org/drm/intel/issues/4958
  [i915#5030]: https://gitlab.freedesktop.org/drm/intel/issues/5030
  [i915#5190]: https://gitlab.freedesktop.org/drm/intel/issues/5190
  [i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235
  [i915#5274]: https://gitlab.freedesktop.org/drm/intel/issues/5274
  [i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286
  [i915#5289]: https://gitlab.freedesktop.org/drm/intel/issues/5289
  [i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354
  [i915#5493]: https://gitlab.freedesktop.org/drm/intel/issues/5493
  [i915#5784]: https://gitlab.freedesktop.org/drm/intel/issues/5784
  [i915#5882]: https://gitlab.freedesktop.org/drm/intel/issues/5882
  [i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
  [i915#6187]: https://gitlab.freedesktop.org/drm/intel/issues/6187
  [i915#6227]: https://gitlab.freedesktop.org/drm/intel/issues/6227
  [i915#6228]: https://gitlab.freedesktop.org/drm/intel/issues/6228
  [i915#6301]: https://gitlab.freedesktop.org/drm/intel/issues/6301
  [i915#6412]: https://gitlab.freedesktop.org/drm/intel/issues/6412
  [i915#6493]: https://gitlab.freedesktop.org/drm/intel/issues/6493
  [i915#6524]: https://gitlab.freedesktop.org/drm/intel/issues/6524
  [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
  [i915#6621]: https://gitlab.freedesktop.org/drm/intel/issues/6621
  [i915#6645]: https://gitlab.freedesktop.org/drm/intel/issues/6645
  [i915#6805]: https://gitlab.freedesktop.org/drm/intel/issues/6805
  [i915#6880]: https://gitlab.freedesktop.org/drm/intel/issues/6880
  [i915#6944]: https://gitlab.freedesktop.org/drm/intel/issues/6944
  [i915#6953]: https://gitlab.freedesktop.org/drm/intel/issues/6953
  [i915#7116]: https://gitlab.freedesktop.org/drm/intel/issues/7116
  [i915#7118]: https://gitlab.freedesktop.org/drm/intel/issues/7118
  [i915#7162]: https://gitlab.freedesktop.org/drm/intel/issues/7162
  [i915#7213]: https://gitlab.freedesktop.org/drm/intel/issues/7213
  [i915#7387]: https://gitlab.freedesktop.org/drm/intel/issues/7387
  [i915#7582]: https://gitlab.freedesktop.org/drm/intel/issues/7582
  [i915#7697]: https://gitlab.freedesktop.org/drm/intel/issues/7697
  [i915#7701]: https://gitlab.freedesktop.org/drm/intel/issues/7701
  [i915#7707]: https://gitlab.freedesktop.org/drm/intel/issues/7707
  [i915#7711]: https://gitlab.freedesktop.org/drm/intel/issues/7711
  [i915#7742]: https://gitlab.freedesktop.org/drm/intel/issues/7742
  [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
  [i915#7975]: https://gitlab.freedesktop.org/drm/intel/issues/7975
  [i915#8063]: https://gitlab.freedesktop.org/drm/intel/issues/8063
  [i915#8213]: https://gitlab.freedesktop.org/drm/intel/issues/8213
  [i915#8228]: https://gitlab.freedesktop.org/drm/intel/issues/8228
  [i915#8289]: https://gitlab.freedesktop.org/drm/intel/issues/8289
  [i915#8292]: https://gitlab.freedesktop.org/drm/intel/issues/8292
  [i915#8381]: https://gitlab.freedesktop.org/drm/intel/issues/8381
  [i915#8411]: https://gitlab.freedesktop.org/drm/intel/issues/8411
  [i915#8414]: https://gitlab.freedesktop.org/drm/intel/issues/8414
  [i915#8428]: https://gitlab.freedesktop.org/drm/intel/issues/8428
  [i915#8430]: https://gitlab.freedesktop.org/drm/intel/issues/8430
  [i915#8516]: https://gitlab.freedesktop.org/drm/intel/issues/8516
  [i915#8555]: https://gitlab.freedesktop.org/drm/intel/issues/8555
  [i915#8588]: https://gitlab.freedesktop.org/drm/intel/issues/8588
  [i915#8623]: https://gitlab.freedesktop.org/drm/intel/issues/8623
  [i915#8708]: https://gitlab.freedesktop.org/drm/intel/issues/8708
  [i915#8709]: https://gitlab.freedesktop.org/drm/intel/issues/8709
  [i915#8806]: https://gitlab.freedesktop.org/drm/intel/issues/8806
  [i915#8808]: https://gitlab.freedesktop.org/drm/intel/issues/8808
  [i915#8809]: https://gitlab.freedesktop.org/drm/intel/issues/8809
  [i915#8810]: https://gitlab.freedesktop.org/drm/intel/issues/8810
  [i915#8814]: https://gitlab.freedesktop.org/drm/intel/issues/8814
  [i915#8821]: https://gitlab.freedesktop.org/drm/intel/issues/8821
  [i915#8850]: https://gitlab.freedesktop.org/drm/intel/issues/8850
  [i915#8925]: https://gitlab.freedesktop.org/drm/intel/issues/8925
  [i915#9010]: https://gitlab.freedesktop.org/drm/intel/issues/9010
  [i915#9041]: https://gitlab.freedesktop.org/drm/intel/issues/9041
  [i915#9067]: https://gitlab.freedesktop.org/drm/intel/issues/9067
  [i915#9100]: https://gitlab.freedesktop.org/drm/intel/issues/9100
  [i915#9196]: https://gitlab.freedesktop.org/drm/intel/issues/9196
  [i915#9227]: https://gitlab.freedesktop.org/drm/intel/issues/9227
  [i915#9295]: https://gitlab.freedesktop.org/drm/intel/issues/9295
  [i915#9323]: https://gitlab.freedesktop.org/drm/intel/issues/9323
  [i915#9337]: https://gitlab.freedesktop.org/drm/intel/issues/9337
  [i915#9340]: https://gitlab.freedesktop.org/drm/intel/issues/9340
  [i915#9412]: https://gitlab.freedesktop.org/drm/intel/issues/9412
  [i915#9423]: https://gitlab.freedesktop.org/drm/intel/issues/9423
  [i915#9424]: https://gitlab.freedesktop.org/drm/intel/issues/9424
  [i915#9519]: https://gitlab.freedesktop.org/drm/intel/issues/9519
  [i915#9606]: https://gitlab.freedesktop.org/drm/intel/issues/9606
  [i915#9673]: https://gitlab.freedesktop.org/drm/intel/issues/9673
  [i915#9683]: https://gitlab.freedesktop.org/drm/intel/issues/9683
  [i915#9685]: https://gitlab.freedesktop.org/drm/intel/issues/9685
  [i915#9688]: https://gitlab.freedesktop.org/drm/intel/issues/9688
  [i915#9697]: https://gitlab.freedesktop.org/drm/intel/issues/9697
  [i915#9723]: https://gitlab.freedesktop.org/drm/intel/issues/9723
  [i915#9728]: https://gitlab.freedesktop.org/drm/intel/issues/9728
  [i915#9732]: https://gitlab.freedesktop.org/drm/intel/issues/9732
  [i915#9766]: https://gitlab.freedesktop.org/drm/intel/issues/9766
  [i915#9779]: https://gitlab.freedesktop.org/drm/intel/issues/9779
  [i915#9808]: https://gitlab.freedesktop.org/drm/intel/issues/9808
  [i915#9809]: https://gitlab.f

== Logs ==

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

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

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

* Re: [PATCH i-g-t] lib/kunit: Read results from debugfs
  2024-03-27 22:26   ` Janusz Krzysztofik
@ 2024-03-28 11:24     ` Kamil Konieczny
  0 siblings, 0 replies; 12+ messages in thread
From: Kamil Konieczny @ 2024-03-28 11:24 UTC (permalink / raw)
  To: igt-dev
  Cc: Janusz Krzysztofik, intel-gfx, intel-xe, Mauro Carvalho Chehab,
	Jonathan Cavitt, Lucas De Marchi

Hi Janusz,
On 2024-03-27 at 23:26:03 +0100, Janusz Krzysztofik wrote:
> On Wednesday, 27 March 2024 18:27:50 CET Kamil Konieczny wrote:
> > Hi Janusz,
> > On 2024-03-27 at 12:22:54 +0100, Janusz Krzysztofik wrote:
> > > KUnit can provide KTAP reports from test modules via debugfs files, one
> > > per test suite.  Using that source of test results instead of extracting
> > > them from dmesg, where they may be interleaved with other kernel messages,
> > > seems more easy to handle and less error prone.  Switch to it.
> > > 
> > > If KUnit debugfs support is found not configured then fall back to legacy
> > > processing path.
> > > 
> > > Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
> > > ---
> > >  lib/igt_kmod.c | 143 ++++++++++++++++++++++++++++++++++++-------------
> > >  1 file changed, 105 insertions(+), 38 deletions(-)
> > > 
> > > diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> > > index 1ec9c8a602..a5b170ca9c 100644
> > > --- a/lib/igt_kmod.c
> > > +++ b/lib/igt_kmod.c
> > > @@ -28,6 +28,7 @@
> > >  #include <limits.h>
> > >  #include <pthread.h>
> > >  #include <signal.h>
> > > +#include <stdio.h>
> > >  #include <stdlib.h>
> > >  #include <string.h>
> > >  #include <sys/stat.h>
> > > @@ -39,6 +40,7 @@
> > >  
> > >  #include "igt_aux.h"
> > >  #include "igt_core.h"
> > > +#include "igt_debugfs.h"
> > >  #include "igt_kmod.h"
> > >  #include "igt_ktap.h"
> > >  #include "igt_sysfs.h"
> > > @@ -864,6 +866,31 @@ static int open_parameters(const char *module_name)
> > >  	return open(path, O_RDONLY);
> > >  }
> > >  
> > > +static DIR *kunit_debugfs_open(void)
> > > +{
> > > +	const char *debugfs_path = igt_debugfs_mount();
> > > +	int debugfs_fd, kunit_fd;
> > > +	DIR *kunit_dir;
> > > +
> > > +	if (igt_debug_on(!debugfs_path))
> > > +		return NULL;
> > > +
> > > +	debugfs_fd = open(debugfs_path, O_DIRECTORY);
> > > +	if (igt_debug_on(debugfs_fd < 0))
> > > +		return NULL;
> > > +
> > > +	kunit_fd = openat(debugfs_fd, "kunit", O_DIRECTORY);
> > > +	close(debugfs_fd);
> > > +	if (igt_debug_on(kunit_fd < 0))
> > > +		return NULL;
> > > +
> > > +	kunit_dir = fdopendir(kunit_fd);
> > > +	if (igt_debug_on(!kunit_dir))
> > > +		close(kunit_fd);
> > 
> > imho here:
> > 	close(kunit_fd);
> >     igt_debug_on(!kunit_dir);
> 
> No, we are not allowed to close it.  fdopendir(3) states:
> "After  a  successful  call to fdopendir(), fd is used internally by the 
>  implementation, and should not otherwise be used by the application."
> 

You are right, thank you for explanation and pointing me to man page.

Regards,
Kamil

> > 
> > > +
> > > +	return kunit_dir;
> > > +}
> > > +
> > >  static bool kunit_set_filtering(const char *filter_glob, const char *filter,
> > >  				const char *filter_action)
> > >  {
> > > @@ -1071,23 +1098,48 @@ static void kunit_results_free(struct igt_list_head *results,
> > >  	free(*suite_name);
> > >  }
> > >  
> > > -static int kunit_get_results(struct igt_list_head *results, int kmsg_fd,
> > > -			     struct igt_ktap_results **ktap)
> > > +static int kunit_get_results(struct igt_list_head *results, int debugfs_fd,
> > > +			     const char *suite, struct igt_ktap_results **ktap)
> > >  {
> > > -	int err;
> > > +	FILE *results_stream;
> > > +	int ret, results_fd;
> > > +	char *buf = NULL;
> > > +	size_t size = 0;
> > > +	ssize_t len;
> > > +
> > > +	if (igt_debug_on((ret = openat(debugfs_fd, suite, O_DIRECTORY), ret < 0)))
> > > +		return ret;
> > > +
> > > +	results_fd = openat(ret, "results", O_RDONLY);
> > > +	close(ret);
> > > +	if (igt_debug_on(results_fd < 0))
> > > +		return results_fd;
> > > +
> > > +	results_stream = fdopen(results_fd, "r");
> > > +	if (igt_debug_on(!results_stream)) {
> > > +		close(results_fd);
> > > +		return -errno;
> > > +	}
> > >  
> > >  	*ktap = igt_ktap_alloc(results);
> > > -	if (igt_debug_on(!*ktap))
> > > -		return -ENOMEM;
> > > +	if (igt_debug_on(!*ktap)) {
> > > +		ret = -ENOMEM;
> > > +		goto out_fclose;
> > > +	}
> > > +
> > > +	while (len = getline(&buf, &size, results_stream), len > 0) {
> > > +		ret = igt_ktap_parse(buf, *ktap);
> > > +		if (ret != -EINPROGRESS)
> > > +			break;
> > > +	}
> > >  
> > > -	do
> > > -		igt_debug_on((err = kunit_kmsg_result_get(results, NULL, kmsg_fd, *ktap),
> > > -			      err && err != -EINPROGRESS));
> > > -	while (err == -EINPROGRESS);
> > > +	free(buf);
> > >  
> > >  	igt_ktap_free(ktap);
> > > +out_fclose:
> > > +	fclose(results_stream);
> > >  
> > > -	return err;
> > > +	return ret;
> > >  }
> > >  
> > >  static void __igt_kunit_legacy(struct igt_ktest *tst,
> > > @@ -1101,7 +1153,13 @@ static void __igt_kunit_legacy(struct igt_ktest *tst,
> > >  	pthread_mutexattr_t attr;
> > >  	IGT_LIST_HEAD(results);
> > >  	unsigned long taints;
> > > -	int ret;
> > > +	int flags, ret;
> > > +
> > > +	igt_skip_on_f(tst->kmsg < 0, "Could not open /dev/kmsg\n");
> > > +
> > > +	igt_skip_on((flags = fcntl(tst->kmsg, F_GETFL, 0), flags < 0));
> > > +	igt_skip_on_f(fcntl(tst->kmsg, F_SETFL, flags & ~O_NONBLOCK) == -1,
> > > +		      "Could not set /dev/kmsg to blocking mode\n");
> > >  
> > >  	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
> > >  
> > > @@ -1224,30 +1282,20 @@ static void __igt_kunit_legacy(struct igt_ktest *tst,
> > >  	igt_skip_on_f(ret, "KTAP parser failed\n");
> > >  }
> > >  
> > > -static void kunit_get_tests_timeout(int signal)
> > > -{
> > > -	igt_skip("Timed out while trying to extract a list of KUnit test cases from /dev/kmsg\n");
> > > -}
> > > -
> > >  static bool kunit_get_tests(struct igt_list_head *tests,
> > >  			    struct igt_ktest *tst,
> > >  			    const char *suite,
> > >  			    const char *opts,
> > > +			    DIR *debugfs_dir,
> > >  			    struct igt_ktap_results **ktap)
> > >  {
> > > -	struct sigaction sigalrm = { .sa_handler = kunit_get_tests_timeout, },
> > > -			 *saved;
> > >  	struct igt_ktap_result *r, *rn;
> > > +	struct dirent *subdir;
> > >  	unsigned long taints;
> > > -	int flags, err;
> > > -
> > > -	igt_skip_on_f(tst->kmsg < 0, "Could not open /dev/kmsg\n");
> > > +	int debugfs_fd;
> > >  
> > > -	igt_skip_on((flags = fcntl(tst->kmsg, F_GETFL, 0), flags < 0));
> > > -	igt_skip_on_f(fcntl(tst->kmsg, F_SETFL, flags & ~O_NONBLOCK) == -1,
> > > -		      "Could not set /dev/kmsg to blocking mode\n");
> > > -
> > > -	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
> > > +	if (igt_debug_on(!debugfs_dir))
> > > +		return false;
> > 
> > imho this should be before you set blocking mode 
> 
> This patch removes the lines that were setting blocking mode.  That mode was 
> needed only when reading from /dev/kmsg.
> 
> > or before you call this function.
> 
> OK.
> 
> > 
> > >  
> > >  	/*
> > >  	 * To get a list of test cases provided by a kunit test module, ask the
> > > @@ -1260,19 +1308,32 @@ static bool kunit_get_tests(struct igt_list_head *tests,
> > >  	if (igt_debug_on(!kunit_set_filtering(suite, "module=none", "skip")))
> > >  		return false;
> > >  
> > > +	if (!suite) {
> > > +		seekdir(debugfs_dir, 2);	/* directory itself and its parent */
> > > +		errno = 0;
> > > +		igt_skip_on_f(readdir(debugfs_dir) || errno,
> > > +			      "Require empty KUnit debugfs directory\n");
> > > +		rewinddir(debugfs_dir);
> > > +	}
> > > +
> > >  	igt_skip_on(modprobe(tst->kmod, opts));
> > >  	igt_skip_on(igt_kernel_tainted(&taints));
> > >  
> > > -	igt_skip_on(sigaction(SIGALRM, &sigalrm, saved));
> > > -	alarm(10);
> > 
> > Why you removed alarm(10)?
> 
> Because we no longer need it.  When we were extracting a KTAP report from 
> /dev/kmsg then it was needed because if KUnit filters produced no KTAP report 
> then that operation might never complete unless interrupted.  Now our attempt 
> to open a nonexistent debugfs report file fails immediately.
> 
> Thanks,
> Janusz
> 
> > 
> > Regards,
> > Kamil
> > 
> > > +	debugfs_fd = dirfd(debugfs_dir);
> > > +	if (suite) {
> > > +		igt_skip_on(kunit_get_results(tests, debugfs_fd, suite, ktap));
> > >  
> > > -	err = kunit_get_results(tests, tst->kmsg, ktap);
> > > +	} else while (subdir = readdir(debugfs_dir), subdir) {
> > > +		if (!(subdir->d_type & DT_DIR))
> > > +			continue;
> > >  
> > > -	alarm(0);
> > > -	igt_debug_on(sigaction(SIGALRM, saved, NULL));
> > > +		if (!strcmp(subdir->d_name, ".") || !strcmp(subdir->d_name, ".."))
> > > +			continue;
> > >  
> > > -	igt_skip_on_f(err,
> > > -		      "KTAP parser failed while getting a list of test cases\n");
> > > +		igt_warn_on_f(kunit_get_results(tests, debugfs_fd, subdir->d_name, ktap),
> > > +			      "parsing KTAP report from test suite \"%s\" failed\n",
> > > +			      subdir->d_name);
> > > +	}
> > >  
> > >  	igt_list_for_each_entry_safe(r, rn, tests, link)
> > >  		igt_require_f(r->code == IGT_EXIT_SKIP,
> > > @@ -1287,6 +1348,7 @@ static void __igt_kunit(struct igt_ktest *tst,
> > >  			const char *subtest,
> > >  			const char *suite,
> > >  			const char *opts,
> > > +			int debugfs_fd,
> > >  			struct igt_list_head *tests,
> > >  			struct igt_ktap_results **ktap)
> > >  {
> > > @@ -1307,8 +1369,6 @@ static void __igt_kunit(struct igt_ktest *tst,
> > >  
> > >  			igt_skip_on(igt_kernel_tainted(&taints));
> > >  
> > > -			igt_fail_on(lseek(tst->kmsg, 0, SEEK_END) == -1 && errno);
> > > -
> > >  			igt_assert_lt(snprintf(glob, sizeof(glob), "%s.%s",
> > >  					       t->suite_name, t->case_name),
> > >  				      sizeof(glob));
> > > @@ -1317,7 +1377,8 @@ static void __igt_kunit(struct igt_ktest *tst,
> > >  			igt_assert_eq(modprobe(tst->kmod, opts), 0);
> > >  			igt_assert_eq(igt_kernel_tainted(&taints), 0);
> > >  
> > > -			igt_assert_eq(kunit_get_results(&results, tst->kmsg, ktap), 0);
> > > +			igt_assert_eq(kunit_get_results(&results, debugfs_fd,
> > > +							t->suite_name, ktap), 0);
> > >  
> > >  			for (i = 0; i < 2; i++) {
> > >  				kunit_result_free(&r, &suite_name, &case_name);
> > > @@ -1388,6 +1449,7 @@ void igt_kunit(const char *module_name, const char *suite, const char *opts)
> > >  	struct igt_ktest tst = { .kmsg = -1, };
> > >  	struct igt_ktap_results *ktap = NULL;
> > >  	const char *subtest = suite;
> > > +	DIR *debugfs_dir = NULL;
> > >  	IGT_LIST_HEAD(tests);
> > >  
> > >  	/*
> > > @@ -1435,10 +1497,12 @@ void igt_kunit(const char *module_name, const char *suite, const char *opts)
> > >  		 *	 LTS kernels not capable of using KUnit filters for
> > >  		 *	 listing test cases in KTAP format, with igt_require.
> > >  		 */
> > > -		if (!kunit_get_tests(&tests, &tst, suite, opts, &ktap))
> > > +		debugfs_dir = kunit_debugfs_open();
> > > +		if (!kunit_get_tests(&tests, &tst, suite, opts, debugfs_dir, &ktap))
> > >  			__igt_kunit_legacy(&tst, subtest, opts);
> > >  		else
> > > -			__igt_kunit(&tst, subtest, suite, opts, &tests, &ktap);
> > > +			__igt_kunit(&tst, subtest, suite, opts,
> > > +				    dirfd(debugfs_dir), &tests, &ktap);
> > >  	}
> > >  
> > >  	igt_fixture {
> > > @@ -1448,6 +1512,9 @@ void igt_kunit(const char *module_name, const char *suite, const char *opts)
> > >  
> > >  		kunit_results_free(&tests, &suite_name, &case_name);
> > >  
> > > +		if (debugfs_dir)
> > > +			closedir(debugfs_dir);
> > > +
> > >  		igt_ktest_end(&tst);
> > >  	}
> > >  
> > 
> 
> 
> 
> 

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

* Re: [PATCH i-g-t] lib/kunit: Read results from debugfs
  2024-03-27 21:54   ` Janusz Krzysztofik
@ 2024-03-28 12:51     ` Janusz Krzysztofik
  2024-03-28 13:09     ` Lucas De Marchi
  1 sibling, 0 replies; 12+ messages in thread
From: Janusz Krzysztofik @ 2024-03-28 12:51 UTC (permalink / raw)
  To: Lucas De Marchi
  Cc: igt-dev, intel-gfx, intel-xe, Kamil Konieczny,
	Mauro Carvalho Chehab, Jonathan Cavitt

On Wednesday, 27 March 2024 22:54:53 CET Janusz Krzysztofik wrote:
> On Wednesday, 27 March 2024 17:03:01 CET Lucas De Marchi wrote:
> > On Wed, Mar 27, 2024 at 12:22:54PM +0100, Janusz Krzysztofik wrote:
> > >KUnit can provide KTAP reports from test modules via debugfs files, one
> > >per test suite.  Using that source of test results instead of extracting
> > >them from dmesg, where they may be interleaved with other kernel messages,
> > >seems more easy to handle and less error prone.  Switch to it.
> > >
> > >If KUnit debugfs support is found not configured then fall back to legacy
> > >processing path.
> > >
> > >Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
> > >---
> > > lib/igt_kmod.c | 143 ++++++++++++++++++++++++++++++++++++-------------
> > > 1 file changed, 105 insertions(+), 38 deletions(-)
> > >
> > >diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> > >index 1ec9c8a602..a5b170ca9c 100644
> > >--- a/lib/igt_kmod.c
> > >+++ b/lib/igt_kmod.c
> > >@@ -28,6 +28,7 @@
> > > #include <limits.h>
> > > #include <pthread.h>
> > > #include <signal.h>
> > >+#include <stdio.h>
> > > #include <stdlib.h>
> > > #include <string.h>
> > > #include <sys/stat.h>
> > >@@ -39,6 +40,7 @@
> > >
> > > #include "igt_aux.h"
> > > #include "igt_core.h"
> > >+#include "igt_debugfs.h"
> > > #include "igt_kmod.h"
> > > #include "igt_ktap.h"
> > > #include "igt_sysfs.h"
> > >@@ -864,6 +866,31 @@ static int open_parameters(const char *module_name)
> > > 	return open(path, O_RDONLY);
> > > }
> > >
> > >+static DIR *kunit_debugfs_open(void)
> > >+{
> > >+	const char *debugfs_path = igt_debugfs_mount();
> > >+	int debugfs_fd, kunit_fd;
> > >+	DIR *kunit_dir;
> > >+
> > >+	if (igt_debug_on(!debugfs_path))
> > >+		return NULL;
> > >+
> > >+	debugfs_fd = open(debugfs_path, O_DIRECTORY);
> > >+	if (igt_debug_on(debugfs_fd < 0))
> > >+		return NULL;
> > >+
> > >+	kunit_fd = openat(debugfs_fd, "kunit", O_DIRECTORY);
> > >+	close(debugfs_fd);
> > >+	if (igt_debug_on(kunit_fd < 0))
> > >+		return NULL;
> > >+
> > >+	kunit_dir = fdopendir(kunit_fd);
> > >+	if (igt_debug_on(!kunit_dir))
> > >+		close(kunit_fd);
> > >+
> > >+	return kunit_dir;
> > 
> > 
> > any reason not to use strcat() + return fopen()
> 
> To me the code looked simpler than if I copied and concatenated strings to a 
> local buffer of fixed size with potential truncation handling.  I guess 
> you prefer your pattern over mine, but you haven't explained why.  Would you 
> like to convince me?
> 
> > 
> > >+}
> > >+
> > > static bool kunit_set_filtering(const char *filter_glob, const char *filter,
> > > 				const char *filter_action)
> > > {
> > >@@ -1071,23 +1098,48 @@ static void kunit_results_free(struct igt_list_head *results,
> > > 	free(*suite_name);
> > > }
> > >
> > >-static int kunit_get_results(struct igt_list_head *results, int kmsg_fd,
> > >-			     struct igt_ktap_results **ktap)
> > >+static int kunit_get_results(struct igt_list_head *results, int debugfs_fd,
> > >+			     const char *suite, struct igt_ktap_results **ktap)
> > > {
> > >-	int err;
> > >+	FILE *results_stream;
> > >+	int ret, results_fd;
> > >+	char *buf = NULL;
> > >+	size_t size = 0;
> > >+	ssize_t len;
> > >+
> > >+	if (igt_debug_on((ret = openat(debugfs_fd, suite, O_DIRECTORY), ret < 0)))
> > 
> > a little odd to return on any value != 0, but log on < 0. did you mean
> > to compare < 0 in the first arg?.
> 
> I'm not able to recall what I could mean, but anyway, you are right, 
> 	if (igt_debug_on((ret = openat(...)) < 0))
> will be more correct.

At a second glance, my

	if (igt_debug_on((ret = openat(...), ret < 0)))

was equally correct (both log and return on ret < 0), and now I recall what I 
meant: I tried to work around checkpatch rule of not using assignment 
expressions in if conditions -- with no success.  Let me refactor that line to 
make checkpatch happy.

Thanks,
Janusz

> 
> > 
> > >+		return ret;
> > >+
> > >+	results_fd = openat(ret, "results", O_RDONLY);
> > >+	close(ret);
> > >+	if (igt_debug_on(results_fd < 0))
> > >+		return results_fd;
> > >+
> > >+	results_stream = fdopen(results_fd, "r");
> > >+	if (igt_debug_on(!results_stream)) {
> > >+		close(results_fd);
> > >+		return -errno;
> > >+	}
> > >
> > > 	*ktap = igt_ktap_alloc(results);
> > >-	if (igt_debug_on(!*ktap))
> > >-		return -ENOMEM;
> > >+	if (igt_debug_on(!*ktap)) {
> > >+		ret = -ENOMEM;
> > >+		goto out_fclose;
> > >+	}
> > >+
> > >+	while (len = getline(&buf, &size, results_stream), len > 0) {
> > >+		ret = igt_ktap_parse(buf, *ktap);
> > >+		if (ret != -EINPROGRESS)
> > >+			break;
> > >+	}
> > >
> > >-	do
> > >-		igt_debug_on((err = kunit_kmsg_result_get(results, NULL, kmsg_fd, *ktap),
> > >-			      err && err != -EINPROGRESS));
> > >-	while (err == -EINPROGRESS);
> > >+	free(buf);
> > >
> > > 	igt_ktap_free(ktap);
> > >+out_fclose:
> > >+	fclose(results_stream);
> > >
> > >-	return err;
> > >+	return ret;
> > > }
> > >
> > > static void __igt_kunit_legacy(struct igt_ktest *tst,
> > >@@ -1101,7 +1153,13 @@ static void __igt_kunit_legacy(struct igt_ktest *tst,
> > > 	pthread_mutexattr_t attr;
> > > 	IGT_LIST_HEAD(results);
> > > 	unsigned long taints;
> > >-	int ret;
> > >+	int flags, ret;
> > >+
> > >+	igt_skip_on_f(tst->kmsg < 0, "Could not open /dev/kmsg\n");
> > >+
> > >+	igt_skip_on((flags = fcntl(tst->kmsg, F_GETFL, 0), flags < 0));
> > >+	igt_skip_on_f(fcntl(tst->kmsg, F_SETFL, flags & ~O_NONBLOCK) == -1,
> > >+		      "Could not set /dev/kmsg to blocking mode\n");
> > >
> > > 	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
> > >
> > >@@ -1224,30 +1282,20 @@ static void __igt_kunit_legacy(struct igt_ktest *tst,
> > > 	igt_skip_on_f(ret, "KTAP parser failed\n");
> > > }
> > >
> > >-static void kunit_get_tests_timeout(int signal)
> > >-{
> > >-	igt_skip("Timed out while trying to extract a list of KUnit test cases from /dev/kmsg\n");
> > >-}
> > >-
> > > static bool kunit_get_tests(struct igt_list_head *tests,
> > > 			    struct igt_ktest *tst,
> > > 			    const char *suite,
> > > 			    const char *opts,
> > >+			    DIR *debugfs_dir,
> > > 			    struct igt_ktap_results **ktap)
> > > {
> > >-	struct sigaction sigalrm = { .sa_handler = kunit_get_tests_timeout, },
> > >-			 *saved;
> > > 	struct igt_ktap_result *r, *rn;
> > >+	struct dirent *subdir;
> > > 	unsigned long taints;
> > >-	int flags, err;
> > >-
> > >-	igt_skip_on_f(tst->kmsg < 0, "Could not open /dev/kmsg\n");
> > >+	int debugfs_fd;
> > >
> > >-	igt_skip_on((flags = fcntl(tst->kmsg, F_GETFL, 0), flags < 0));
> > >-	igt_skip_on_f(fcntl(tst->kmsg, F_SETFL, flags & ~O_NONBLOCK) == -1,
> > >-		      "Could not set /dev/kmsg to blocking mode\n");
> > >-
> > >-	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
> > >+	if (igt_debug_on(!debugfs_dir))
> > >+		return false;
> > >
> > > 	/*
> > > 	 * To get a list of test cases provided by a kunit test module, ask the
> > >@@ -1260,19 +1308,32 @@ static bool kunit_get_tests(struct igt_list_head *tests,
> > > 	if (igt_debug_on(!kunit_set_filtering(suite, "module=none", "skip")))
> > > 		return false;
> > >
> > >+	if (!suite) {
> > >+		seekdir(debugfs_dir, 2);	/* directory itself and its parent */
> > >+		errno = 0;
> > >+		igt_skip_on_f(readdir(debugfs_dir) || errno,
> > >+			      "Require empty KUnit debugfs directory\n");
> > >+		rewinddir(debugfs_dir);
> > >+	}
> > >+
> > > 	igt_skip_on(modprobe(tst->kmod, opts));
> > > 	igt_skip_on(igt_kernel_tainted(&taints));
> > >
> > >-	igt_skip_on(sigaction(SIGALRM, &sigalrm, saved));
> > >-	alarm(10);
> > >+	debugfs_fd = dirfd(debugfs_dir);
> > >+	if (suite) {
> > >+		igt_skip_on(kunit_get_results(tests, debugfs_fd, suite, ktap));
> > 
> > instead of skipping, do we need to treat it specially if this returns
> > -EINPROGRESS? That would probably be bug in our ktap parser or a format
> > change or something like that so we may want to start failing rather
> > than skipping.
> 
> Unfortunately we are not allowed to fail here because kunit_get_tests() is 
> called from inside a body of igt_subtest_with_dynamic() but outside of any 
> igt_dynamic(), where fails are allowed again.  We may use a verbose variant of 
> igt_skip() to provide additional information on that skip.  We may also 
> precede that skip with igt_warn(), but I'm not sure how that will by reported 
> by upper layers (igt_runner, CI).

For symmetry with the below case of NULL suite argument, I'd rather use 
igt_warn_on() here and let the subtest skip automatically if the list of KUnit 
test cases occurs empty and no IGT dynamic sub-subtests are executed.  Or 
maybe still better, drop that if section preceding the while section below and 
handle the non-NULL suite case inside the while loop.

Thanks,
Janusz

> 
> > 
> > anyway, consider the comments above as just nits. This seems like a
> > great improvement.
> > 
> > Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
> 
> Thank you,
> Janusz
> 
> > 
> > thanks
> > Lucas De Marchi
> > 
> > >
> > >-	err = kunit_get_results(tests, tst->kmsg, ktap);
> > >+	} else while (subdir = readdir(debugfs_dir), subdir) {
> > >+		if (!(subdir->d_type & DT_DIR))
> > >+			continue;
> > >
> > >-	alarm(0);
> > >-	igt_debug_on(sigaction(SIGALRM, saved, NULL));
> > >+		if (!strcmp(subdir->d_name, ".") || !strcmp(subdir->d_name, ".."))
> > >+			continue;
> > >
> > >-	igt_skip_on_f(err,
> > >-		      "KTAP parser failed while getting a list of test cases\n");
> > >+		igt_warn_on_f(kunit_get_results(tests, debugfs_fd, subdir->d_name, ktap),
> > >+			      "parsing KTAP report from test suite \"%s\" failed\n",
> > >+			      subdir->d_name);
> > >+	}
> > >
> > > 	igt_list_for_each_entry_safe(r, rn, tests, link)
> > > 		igt_require_f(r->code == IGT_EXIT_SKIP,
> > >@@ -1287,6 +1348,7 @@ static void __igt_kunit(struct igt_ktest *tst,
> > > 			const char *subtest,
> > > 			const char *suite,
> > > 			const char *opts,
> > >+			int debugfs_fd,
> > > 			struct igt_list_head *tests,
> > > 			struct igt_ktap_results **ktap)
> > > {
> > >@@ -1307,8 +1369,6 @@ static void __igt_kunit(struct igt_ktest *tst,
> > >
> > > 			igt_skip_on(igt_kernel_tainted(&taints));
> > >
> > >-			igt_fail_on(lseek(tst->kmsg, 0, SEEK_END) == -1 && errno);
> > >-
> > > 			igt_assert_lt(snprintf(glob, sizeof(glob), "%s.%s",
> > > 					       t->suite_name, t->case_name),
> > > 				      sizeof(glob));
> > >@@ -1317,7 +1377,8 @@ static void __igt_kunit(struct igt_ktest *tst,
> > > 			igt_assert_eq(modprobe(tst->kmod, opts), 0);
> > > 			igt_assert_eq(igt_kernel_tainted(&taints), 0);
> > >
> > >-			igt_assert_eq(kunit_get_results(&results, tst->kmsg, ktap), 0);
> > >+			igt_assert_eq(kunit_get_results(&results, debugfs_fd,
> > >+							t->suite_name, ktap), 0);
> > >
> > > 			for (i = 0; i < 2; i++) {
> > > 				kunit_result_free(&r, &suite_name, &case_name);
> > >@@ -1388,6 +1449,7 @@ void igt_kunit(const char *module_name, const char *suite, const char *opts)
> > > 	struct igt_ktest tst = { .kmsg = -1, };
> > > 	struct igt_ktap_results *ktap = NULL;
> > > 	const char *subtest = suite;
> > >+	DIR *debugfs_dir = NULL;
> > > 	IGT_LIST_HEAD(tests);
> > >
> > > 	/*
> > >@@ -1435,10 +1497,12 @@ void igt_kunit(const char *module_name, const char *suite, const char *opts)
> > > 		 *	 LTS kernels not capable of using KUnit filters for
> > > 		 *	 listing test cases in KTAP format, with igt_require.
> > > 		 */
> > >-		if (!kunit_get_tests(&tests, &tst, suite, opts, &ktap))
> > >+		debugfs_dir = kunit_debugfs_open();
> > >+		if (!kunit_get_tests(&tests, &tst, suite, opts, debugfs_dir, &ktap))
> > > 			__igt_kunit_legacy(&tst, subtest, opts);
> > > 		else
> > >-			__igt_kunit(&tst, subtest, suite, opts, &tests, &ktap);
> > >+			__igt_kunit(&tst, subtest, suite, opts,
> > >+				    dirfd(debugfs_dir), &tests, &ktap);
> > > 	}
> > >
> > > 	igt_fixture {
> > >@@ -1448,6 +1512,9 @@ void igt_kunit(const char *module_name, const char *suite, const char *opts)
> > >
> > > 		kunit_results_free(&tests, &suite_name, &case_name);
> > >
> > >+		if (debugfs_dir)
> > >+			closedir(debugfs_dir);
> > >+
> > > 		igt_ktest_end(&tst);
> > > 	}
> > >
> > 
> 
> 





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

* Re: [PATCH i-g-t] lib/kunit: Read results from debugfs
  2024-03-27 21:54   ` Janusz Krzysztofik
  2024-03-28 12:51     ` Janusz Krzysztofik
@ 2024-03-28 13:09     ` Lucas De Marchi
  1 sibling, 0 replies; 12+ messages in thread
From: Lucas De Marchi @ 2024-03-28 13:09 UTC (permalink / raw)
  To: Janusz Krzysztofik
  Cc: igt-dev, intel-gfx, intel-xe, Kamil Konieczny,
	Mauro Carvalho Chehab, Jonathan Cavitt

On Wed, Mar 27, 2024 at 10:54:53PM +0100, Janusz Krzysztofik wrote:
>> >+static DIR *kunit_debugfs_open(void)
>> >+{
>> >+	const char *debugfs_path = igt_debugfs_mount();
>> >+	int debugfs_fd, kunit_fd;
>> >+	DIR *kunit_dir;
>> >+
>> >+	if (igt_debug_on(!debugfs_path))
>> >+		return NULL;
>> >+
>> >+	debugfs_fd = open(debugfs_path, O_DIRECTORY);
>> >+	if (igt_debug_on(debugfs_fd < 0))
>> >+		return NULL;
>> >+
>> >+	kunit_fd = openat(debugfs_fd, "kunit", O_DIRECTORY);
>> >+	close(debugfs_fd);
>> >+	if (igt_debug_on(kunit_fd < 0))
>> >+		return NULL;
>> >+
>> >+	kunit_dir = fdopendir(kunit_fd);
>> >+	if (igt_debug_on(!kunit_dir))
>> >+		close(kunit_fd);
>> >+
>> >+	return kunit_dir;
>>
>>
>> any reason not to use strcat() + return fopen()
>
>To me the code looked simpler than if I copied and concatenated strings to a
>local buffer of fixed size with potential truncation handling.  I guess
>you prefer your pattern over mine, but you haven't explained why.  Would you
>like to convince me?

not really important. It just seems simpler to me, with no calls into
the kernel... completely untested, but something like:

	const char *debugfs_path = igt_debugfs_mount();
	char path[PATH_MAX];

	if (igt_debug_on(!debugfs_path || (strlen(debugfs_path) + strlen("/kunit") >= PATH_MAX)))
		return NULL;

	strcat(stpcpy(path, debugfs_path), "/kunit");

	return opendir(path);

Lucas De Marchi

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

end of thread, other threads:[~2024-03-28 13:09 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-03-27 11:22 [PATCH i-g-t] lib/kunit: Read results from debugfs Janusz Krzysztofik
2024-03-27 12:34 ` ✓ Fi.CI.BAT: success for " Patchwork
2024-03-27 12:51 ` ✓ CI.xeBAT: " Patchwork
2024-03-27 12:55 ` ✗ CI.Patch_applied: failure " Patchwork
2024-03-27 16:03 ` [PATCH i-g-t] " Lucas De Marchi
2024-03-27 21:54   ` Janusz Krzysztofik
2024-03-28 12:51     ` Janusz Krzysztofik
2024-03-28 13:09     ` Lucas De Marchi
2024-03-27 17:27 ` Kamil Konieczny
2024-03-27 22:26   ` Janusz Krzysztofik
2024-03-28 11:24     ` Kamil Konieczny
2024-03-28  2:58 ` ✗ Fi.CI.IGT: failure for " Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.