All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH i-g-t v2 0/6] lib/kunit: Support writable filter* parameters of kunit module
@ 2024-01-31 18:03 ` Janusz Krzysztofik
  0 siblings, 0 replies; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-01-31 18:03 UTC (permalink / raw)
  To: igt-dev; +Cc: Kamil Konieczny, Janusz Krzysztofik, Lucas De Marchi, intel-xe

Instead of wasting resources on reloading the base Kunit module each time
a different set of filter parameters is needed, try to write the required
values to sysfs representation of those parameters.  If that fails (e.g.
on older LTS kernels with read-only filter parameters), fall back to
reloading the module.

This change also provides a workaround for the issue of impossibility to
unload the base Kunit module on Xe platforms, available as soon as the
module supports writable filter parameters.

While being at it, fine tune processing of skips on errors during test
case list collection phase.

v2: Work around ineffective writes of empty strings to sysfs module
    parameter files (Lucas) by using human readable non-empty strings that
    give the same results as default NULLs,
  - drop fallback to reload of base Kunit module method if assigning new
    values to module parameters via sysfs fails (Lucas), instead use the
    existing fallback to blind execution like if getting a list of test
    cases was not supported at all,
  - split move of open_parameters() helper up in the source file as well
    as cleanup of base KUnit module unloading to separate patches (Kamil),
  - skip on empty list of test cases (new patch),
  - address the issue of commit description suggesting two separate
    changes combined in one patch (Kamil).

Janusz Krzysztofik (6):
  lib/kunit: Skip on empty list of test cases
  lib/kmode: Prepare open_parameters() helper for reuse by kunit
  lib/kunit: Unload base KUnit module only before reloading it
  lib/kunit: Support writable filter* parameters of kunit module
  lib/kunit: Report early kernel taints explicitly
  lib/kunit: Process module remove error after list errors

 lib/igt_kmod.c | 138 +++++++++++++++++++++++++++++++++++--------------
 1 file changed, 98 insertions(+), 40 deletions(-)

-- 
2.43.0


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

* [PATCH i-g-t v2 0/6] lib/kunit: Support writable filter* parameters of kunit module
@ 2024-01-31 18:03 ` Janusz Krzysztofik
  0 siblings, 0 replies; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-01-31 18:03 UTC (permalink / raw)
  To: igt-dev; +Cc: Lucas De Marchi, intel-xe

Instead of wasting resources on reloading the base Kunit module each time
a different set of filter parameters is needed, try to write the required
values to sysfs representation of those parameters.  If that fails (e.g.
on older LTS kernels with read-only filter parameters), fall back to
reloading the module.

This change also provides a workaround for the issue of impossibility to
unload the base Kunit module on Xe platforms, available as soon as the
module supports writable filter parameters.

While being at it, fine tune processing of skips on errors during test
case list collection phase.

v2: Work around ineffective writes of empty strings to sysfs module
    parameter files (Lucas) by using human readable non-empty strings that
    give the same results as default NULLs,
  - drop fallback to reload of base Kunit module method if assigning new
    values to module parameters via sysfs fails (Lucas), instead use the
    existing fallback to blind execution like if getting a list of test
    cases was not supported at all,
  - split move of open_parameters() helper up in the source file as well
    as cleanup of base KUnit module unloading to separate patches (Kamil),
  - skip on empty list of test cases (new patch),
  - address the issue of commit description suggesting two separate
    changes combined in one patch (Kamil).

Janusz Krzysztofik (6):
  lib/kunit: Skip on empty list of test cases
  lib/kmode: Prepare open_parameters() helper for reuse by kunit
  lib/kunit: Unload base KUnit module only before reloading it
  lib/kunit: Support writable filter* parameters of kunit module
  lib/kunit: Report early kernel taints explicitly
  lib/kunit: Process module remove error after list errors

 lib/igt_kmod.c | 138 +++++++++++++++++++++++++++++++++++--------------
 1 file changed, 98 insertions(+), 40 deletions(-)

-- 
2.43.0


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

* [PATCH i-g-t v2 1/6] lib/kunit: Skip on empty list of test cases
  2024-01-31 18:03 ` Janusz Krzysztofik
@ 2024-01-31 18:03   ` Janusz Krzysztofik
  -1 siblings, 0 replies; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-01-31 18:03 UTC (permalink / raw)
  To: igt-dev; +Cc: Kamil Konieczny, Janusz Krzysztofik, Lucas De Marchi, intel-xe

If loading the base KUnit module in list mode succeeds but our KTAP
parser or test suite filter returns an empty list of test cases then,
instead of calling igt_skip, we now unintentionally fall back to legacy
mode as if the module didn't support filter parameters.  Fix it.

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

diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
index 250ab2107b..ad69173151 100644
--- a/lib/igt_kmod.c
+++ b/lib/igt_kmod.c
@@ -1163,6 +1163,7 @@ static void kunit_get_tests(struct igt_list_head *tests,
 
 	igt_skip_on_f(err,
 		      "KTAP parser failed while getting a list of test cases\n");
+	igt_skip_on(igt_list_empty(tests));
 }
 
 static void __igt_kunit(struct igt_ktest *tst,
-- 
2.43.0


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

* [PATCH i-g-t v2 1/6] lib/kunit: Skip on empty list of test cases
@ 2024-01-31 18:03   ` Janusz Krzysztofik
  0 siblings, 0 replies; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-01-31 18:03 UTC (permalink / raw)
  To: igt-dev; +Cc: Lucas De Marchi, intel-xe

If loading the base KUnit module in list mode succeeds but our KTAP
parser or test suite filter returns an empty list of test cases then,
instead of calling igt_skip, we now unintentionally fall back to legacy
mode as if the module didn't support filter parameters.  Fix it.

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

diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
index 250ab2107b..ad69173151 100644
--- a/lib/igt_kmod.c
+++ b/lib/igt_kmod.c
@@ -1163,6 +1163,7 @@ static void kunit_get_tests(struct igt_list_head *tests,
 
 	igt_skip_on_f(err,
 		      "KTAP parser failed while getting a list of test cases\n");
+	igt_skip_on(igt_list_empty(tests));
 }
 
 static void __igt_kunit(struct igt_ktest *tst,
-- 
2.43.0


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

* [PATCH i-g-t v2 2/6] lib/kmode: Prepare open_parameters() helper for reuse by kunit
  2024-01-31 18:03 ` Janusz Krzysztofik
@ 2024-01-31 18:03   ` Janusz Krzysztofik
  -1 siblings, 0 replies; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-01-31 18:03 UTC (permalink / raw)
  To: igt-dev; +Cc: Kamil Konieczny, Janusz Krzysztofik, Lucas De Marchi, intel-xe

Move the open_parameters() helper code up in the source file, above the
kunit related functions, so it is available to follow-up changes of the
kunit code.

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

diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
index ad69173151..d1091bdc79 100644
--- a/lib/igt_kmod.c
+++ b/lib/igt_kmod.c
@@ -803,6 +803,14 @@ void igt_kselftest_get_tests(struct kmod_module *kmod,
 	kmod_module_info_free_list(pre);
 }
 
+static int open_parameters(const char *module_name)
+{
+	char path[256];
+
+	snprintf(path, sizeof(path), "/sys/module/%s/parameters", module_name);
+	return open(path, O_RDONLY);
+}
+
 struct modprobe_data {
 	struct kmod_module *kmod;
 	const char *opts;
@@ -1402,14 +1410,6 @@ void igt_kunit(const char *module_name, const char *name, const char *opts)
 	igt_ktest_fini(&tst);
 }
 
-static int open_parameters(const char *module_name)
-{
-	char path[256];
-
-	snprintf(path, sizeof(path), "/sys/module/%s/parameters", module_name);
-	return open(path, O_RDONLY);
-}
-
 int igt_ktest_init(struct igt_ktest *tst,
 		   const char *module_name)
 {
-- 
2.43.0


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

* [PATCH i-g-t v2 2/6] lib/kmode: Prepare open_parameters() helper for reuse by kunit
@ 2024-01-31 18:03   ` Janusz Krzysztofik
  0 siblings, 0 replies; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-01-31 18:03 UTC (permalink / raw)
  To: igt-dev; +Cc: Lucas De Marchi, intel-xe

Move the open_parameters() helper code up in the source file, above the
kunit related functions, so it is available to follow-up changes of the
kunit code.

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

diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
index ad69173151..d1091bdc79 100644
--- a/lib/igt_kmod.c
+++ b/lib/igt_kmod.c
@@ -803,6 +803,14 @@ void igt_kselftest_get_tests(struct kmod_module *kmod,
 	kmod_module_info_free_list(pre);
 }
 
+static int open_parameters(const char *module_name)
+{
+	char path[256];
+
+	snprintf(path, sizeof(path), "/sys/module/%s/parameters", module_name);
+	return open(path, O_RDONLY);
+}
+
 struct modprobe_data {
 	struct kmod_module *kmod;
 	const char *opts;
@@ -1402,14 +1410,6 @@ void igt_kunit(const char *module_name, const char *name, const char *opts)
 	igt_ktest_fini(&tst);
 }
 
-static int open_parameters(const char *module_name)
-{
-	char path[256];
-
-	snprintf(path, sizeof(path), "/sys/module/%s/parameters", module_name);
-	return open(path, O_RDONLY);
-}
-
 int igt_ktest_init(struct igt_ktest *tst,
 		   const char *module_name)
 {
-- 
2.43.0


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

* [PATCH i-g-t v2 3/6] lib/kunit: Unload base KUnit module only before reloading it
  2024-01-31 18:03 ` Janusz Krzysztofik
@ 2024-01-31 18:03   ` Janusz Krzysztofik
  -1 siblings, 0 replies; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-01-31 18:03 UTC (permalink / raw)
  To: igt-dev; +Cc: Kamil Konieczny, Janusz Krzysztofik, Lucas De Marchi, intel-xe

In preparation for replacement of the current method of reloading base
KUnit module when a new set of module parameters is needed with updating
those parameters via sysfs, unload the module right before it is now
reloaded with new parameters, and stop unloading it in other places.
Follow-up patches will remove some of the code added here, but even then
they will be shorter and more clean with that adjustment already in place.

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

diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
index d1091bdc79..d2c28d0a64 100644
--- a/lib/igt_kmod.c
+++ b/lib/igt_kmod.c
@@ -1130,6 +1130,7 @@ static void kunit_get_tests(struct igt_list_head *tests,
 	 * iterating over KTAP results collected from blind execution of all
 	 * Kunit test cases provided by a Kunit test module.
 	 */
+	igt_ignore_warn(igt_kmod_unload("kunit", KMOD_REMOVE_FORCE));
 	if (igt_debug_on(igt_kmod_load("kunit",
 				       "filter=module=none filter_action=skip")))
 		return;
@@ -1167,7 +1168,6 @@ static void kunit_get_tests(struct igt_list_head *tests,
 	}
 
 	igt_skip_on(kmod_module_remove_module(tst->kmod, KMOD_REMOVE_FORCE));
-	igt_skip_on(igt_kmod_unload("kunit", KMOD_REMOVE_FORCE));
 
 	igt_skip_on_f(err,
 		      "KTAP parser failed while getting a list of test cases\n");
@@ -1200,6 +1200,17 @@ static void __igt_kunit(struct igt_ktest *tst,
 			      t->case_name) {
 
 			if (!modprobe.thread) {
+				/*
+				 * Since we have successfully loaded the kunit
+				 * base module with non-default parameters in
+				 * order to get a list of test cases, now we
+				 * have to unload it so it is then automatically
+				 * reloaded with default parameter values when
+				 * we load the test module again for execution.
+				 */
+				igt_skip_on(igt_kmod_unload("kunit",
+							    KMOD_REMOVE_FORCE));
+
 				igt_assert_eq(pthread_mutexattr_init(&attr), 0);
 				igt_assert_eq(pthread_mutexattr_setrobust(&attr,
 							  PTHREAD_MUTEX_ROBUST),
@@ -1364,15 +1375,6 @@ void igt_kunit(const char *module_name, const char *name, const char *opts)
 		igt_skip_on(igt_ktest_init(&tst, module_name));
 		igt_skip_on(igt_ktest_begin(&tst));
 
-		/*
-		 * Since we need to load kunit base module with specific
-		 * options in order to get a list of test cases, make
-		 * sure that the module is not loaded.  However, since
-		 * unload may fail if kunit base module is not loaded,
-		 * ignore any failures, we'll fail later if still loaded.
-		 */
-		igt_ignore_warn(igt_kmod_unload("kunit", KMOD_REMOVE_FORCE));
-
 		igt_assert(igt_list_empty(&tests));
 	}
 
@@ -1404,7 +1406,6 @@ void igt_kunit(const char *module_name, const char *name, const char *opts)
 		kunit_results_free(&tests, &suite_name, &case_name);
 
 		igt_ktest_end(&tst);
-		igt_debug_on(igt_kmod_unload("kunit", KMOD_REMOVE_FORCE));
 	}
 
 	igt_ktest_fini(&tst);
-- 
2.43.0


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

* [PATCH i-g-t v2 3/6] lib/kunit: Unload base KUnit module only before reloading it
@ 2024-01-31 18:03   ` Janusz Krzysztofik
  0 siblings, 0 replies; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-01-31 18:03 UTC (permalink / raw)
  To: igt-dev; +Cc: Lucas De Marchi, intel-xe

In preparation for replacement of the current method of reloading base
KUnit module when a new set of module parameters is needed with updating
those parameters via sysfs, unload the module right before it is now
reloaded with new parameters, and stop unloading it in other places.
Follow-up patches will remove some of the code added here, but even then
they will be shorter and more clean with that adjustment already in place.

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

diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
index d1091bdc79..d2c28d0a64 100644
--- a/lib/igt_kmod.c
+++ b/lib/igt_kmod.c
@@ -1130,6 +1130,7 @@ static void kunit_get_tests(struct igt_list_head *tests,
 	 * iterating over KTAP results collected from blind execution of all
 	 * Kunit test cases provided by a Kunit test module.
 	 */
+	igt_ignore_warn(igt_kmod_unload("kunit", KMOD_REMOVE_FORCE));
 	if (igt_debug_on(igt_kmod_load("kunit",
 				       "filter=module=none filter_action=skip")))
 		return;
@@ -1167,7 +1168,6 @@ static void kunit_get_tests(struct igt_list_head *tests,
 	}
 
 	igt_skip_on(kmod_module_remove_module(tst->kmod, KMOD_REMOVE_FORCE));
-	igt_skip_on(igt_kmod_unload("kunit", KMOD_REMOVE_FORCE));
 
 	igt_skip_on_f(err,
 		      "KTAP parser failed while getting a list of test cases\n");
@@ -1200,6 +1200,17 @@ static void __igt_kunit(struct igt_ktest *tst,
 			      t->case_name) {
 
 			if (!modprobe.thread) {
+				/*
+				 * Since we have successfully loaded the kunit
+				 * base module with non-default parameters in
+				 * order to get a list of test cases, now we
+				 * have to unload it so it is then automatically
+				 * reloaded with default parameter values when
+				 * we load the test module again for execution.
+				 */
+				igt_skip_on(igt_kmod_unload("kunit",
+							    KMOD_REMOVE_FORCE));
+
 				igt_assert_eq(pthread_mutexattr_init(&attr), 0);
 				igt_assert_eq(pthread_mutexattr_setrobust(&attr,
 							  PTHREAD_MUTEX_ROBUST),
@@ -1364,15 +1375,6 @@ void igt_kunit(const char *module_name, const char *name, const char *opts)
 		igt_skip_on(igt_ktest_init(&tst, module_name));
 		igt_skip_on(igt_ktest_begin(&tst));
 
-		/*
-		 * Since we need to load kunit base module with specific
-		 * options in order to get a list of test cases, make
-		 * sure that the module is not loaded.  However, since
-		 * unload may fail if kunit base module is not loaded,
-		 * ignore any failures, we'll fail later if still loaded.
-		 */
-		igt_ignore_warn(igt_kmod_unload("kunit", KMOD_REMOVE_FORCE));
-
 		igt_assert(igt_list_empty(&tests));
 	}
 
@@ -1404,7 +1406,6 @@ void igt_kunit(const char *module_name, const char *name, const char *opts)
 		kunit_results_free(&tests, &suite_name, &case_name);
 
 		igt_ktest_end(&tst);
-		igt_debug_on(igt_kmod_unload("kunit", KMOD_REMOVE_FORCE));
 	}
 
 	igt_ktest_fini(&tst);
-- 
2.43.0


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

* [PATCH i-g-t v2 4/6] lib/kunit: Support writable filter* parameters of kunit module
  2024-01-31 18:03 ` Janusz Krzysztofik
@ 2024-01-31 18:03   ` Janusz Krzysztofik
  -1 siblings, 0 replies; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-01-31 18:03 UTC (permalink / raw)
  To: igt-dev; +Cc: Kamil Konieczny, Janusz Krzysztofik, Lucas De Marchi, intel-xe

Instead of wasting resources on reloading the base Kunit module each time
a different set of filter parameters is needed, try to write the required
values to sysfs representation of those parameters.  If that fails (e.g.
on older LTS kernels with read-only filter parameters), fall back to
legacy "no list of test cases available" mode as we do on kernels with
those module parameters not supported at all.

This modification will also serve as a workaround for the issue of
impossibility to unload the base Kunit module on Xe platforms, available
to IGT as soon as the module supports writable filter parameters.

v2: Work around ineffective writes of empty strings to sysfs module
    parameter files (Lucas) by using human readable non-empty strings that
    give the same results as default NULLs,
  - drop fallback to reload of base Kunit module method if assigning new
    values to module parameters via sysfs fails (Lucas), instead use the
    existing fallback to blind execution like if getting a list of test
    cases was not supported at all,
  - split move of open_parameters() helper up in the source file as well
    as cleanup of base KUnit module unloading to separate patches (Kamil),
  - address the issue of the second paragraph of commit description
    suggesting two separate changes combined in one patch (Kamil) by
    rewording the description.

Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>
---
 lib/igt_kmod.c | 114 ++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 84 insertions(+), 30 deletions(-)

diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
index d2c28d0a64..1d57ea708d 100644
--- a/lib/igt_kmod.c
+++ b/lib/igt_kmod.c
@@ -811,6 +811,56 @@ static int open_parameters(const char *module_name)
 	return open(path, O_RDONLY);
 }
 
+static const char *kunit_params[3] = {
+	"filter_glob", "filter", "filter_action",
+};
+
+static bool kunit_set_params(const char **values)
+{
+	/*
+	 * Reapplying default NULLs to module parameters via sysfs seems not
+	 * possible, and applying empty strings doesn't work as expected,
+	 * leaving current values untouched.  As a workaround, use
+	 * human-readable non-empty strings that exhibit the same behaviour
+	 * as if default NULLs were in place.  In case of filter_action
+	 * parameter there is no such obvious non-empty string, however,
+	 * that's not a problem for us since even if it was previously set
+	 * to "skip" and we leave it as is, our "module!=none" default filter
+	 * guarantees that no test cases are filtered out to be skipped.
+	 */
+	const char *defaults[ARRAY_SIZE(kunit_params)] = {
+	     /* filter_glob, filter,	     filter_action */
+		"*",	     "module!=none", "",
+	};
+	int i, params;
+	bool ret;
+
+	params = open_parameters("kunit");
+	ret = !igt_debug_on(params < 0);
+
+	for (i = 0; ret && i < ARRAY_SIZE(kunit_params); i++) {
+		char *param = igt_sysfs_get(params, kunit_params[i]);
+
+		if (igt_debug_on_f(!param, "param: %s\n", kunit_params[i])) {
+			ret = false;
+			break;
+		}
+
+		ret = !strcmp(param, values[i] ?: defaults[i]);
+		free(param);
+		if (!ret)
+			ret = !igt_debug_on(!igt_sysfs_set(params,
+							   kunit_params[i],
+							   values[i] ?:
+							   defaults[i]));
+	}
+
+	if (params >= 0)
+		close(params);
+
+	return ret;
+}
+
 struct modprobe_data {
 	struct kmod_module *kmod;
 	const char *opts;
@@ -1100,6 +1150,18 @@ static void kunit_get_tests(struct igt_list_head *tests,
 			    const char *filter,
 			    const char *opts)
 {
+	/*
+	 * To get a list of test cases provided by a kunit test module, ask the
+	 * generic kunit module to respond with SKIP result for each test found.
+	 * We could also try to use action=list kunit parameter to get the
+	 * listing, however, parsing a KTAP report -- something that we already
+	 * can do perfectly -- seems to be more safe than extracting a test case
+	 * list of unknown length from /dev/kmsg.
+	 */
+	const char *values[ARRAY_SIZE(kunit_params)] = {
+	     /* filter_glob, filter,	    filter_action */
+		NULL,	     "module=none", "skip",
+	};
 	char *suite_name = NULL, *case_name = NULL;
 	struct igt_ktap_result *r, *rn;
 	struct igt_ktap_results *ktap;
@@ -1113,27 +1175,21 @@ static void kunit_get_tests(struct igt_list_head *tests,
 
 	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
 
-	/*
-	 * To get a list of test cases provided by a kunit test module, ask the
-	 * generic kunit module to respond with SKIP result for each test found.
-	 * We could also use action=list kunit parameter to get the listing,
-	 * however, parsing a KTAP report -- something that we already can do
-	 * perfectly -- seems to be more safe than extracting a test case list
-	 * of unknown length from /dev/kmsg.
-	 *
-	 * TODO: drop the following workaround, which is required by LTS kernel
-	 *       v6.1 not capable of listing test cases when built as a module.
-	 * If loading the kunit module with required parameters fails then
-	 * assume that we are running on a kernel with missing test case listing
-	 * capabilities.  Dont's skip but just return with empty list of test
-	 * cases, that should tell the caller to use a legacy method of
-	 * iterating over KTAP results collected from blind execution of all
-	 * Kunit test cases provided by a Kunit test module.
-	 */
-	igt_ignore_warn(igt_kmod_unload("kunit", KMOD_REMOVE_FORCE));
-	if (igt_debug_on(igt_kmod_load("kunit",
-				       "filter=module=none filter_action=skip")))
+	if (igt_debug_on(!kunit_set_params(values))) {
+		/*
+		 * TODO: drop the following workaround, required by LTS kernel
+		 *       v6.1 not capable of listing test cases when built as as
+		 *       module, when no longer needed.
+		 * If updating writable filter parameters of the kunit base
+		 * module with required values then assume that we are running
+		 * on a kernel with missing test case listing capabilities.
+		 * Don't skip but just return with empty list of test cases,
+		 * which should tell the caller to use a legacy method of
+		 * iterating over KTAP results collected from blind execution
+		 * of all Kunit test cases provided by a Kunit test module.
+		 */
 		return;
+	}
 
 	igt_skip_on(modprobe(tst->kmod, opts));
 
@@ -1200,16 +1256,11 @@ static void __igt_kunit(struct igt_ktest *tst,
 			      t->case_name) {
 
 			if (!modprobe.thread) {
-				/*
-				 * Since we have successfully loaded the kunit
-				 * base module with non-default parameters in
-				 * order to get a list of test cases, now we
-				 * have to unload it so it is then automatically
-				 * reloaded with default parameter values when
-				 * we load the test module again for execution.
-				 */
-				igt_skip_on(igt_kmod_unload("kunit",
-							    KMOD_REMOVE_FORCE));
+				const char *values[ARRAY_SIZE(kunit_params)] = {
+					NULL, NULL, NULL,
+				};
+
+				igt_require(kunit_set_params(values));
 
 				igt_assert_eq(pthread_mutexattr_init(&attr), 0);
 				igt_assert_eq(pthread_mutexattr_setrobust(&attr,
@@ -1378,6 +1429,9 @@ void igt_kunit(const char *module_name, const char *name, const char *opts)
 		igt_assert(igt_list_empty(&tests));
 	}
 
+	/* We need the base KUnit module loaded if not built-in */
+	igt_ignore_warn(igt_kmod_load("kunit", NULL));
+
 	/*
 	 * We need to use igt_subtest here, as otherwise it may crash with:
 	 *  skipping is allowed only in fixtures, subtests or igt_simple_main
-- 
2.43.0


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

* [PATCH i-g-t v2 4/6] lib/kunit: Support writable filter* parameters of kunit module
@ 2024-01-31 18:03   ` Janusz Krzysztofik
  0 siblings, 0 replies; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-01-31 18:03 UTC (permalink / raw)
  To: igt-dev; +Cc: Lucas De Marchi, intel-xe

Instead of wasting resources on reloading the base Kunit module each time
a different set of filter parameters is needed, try to write the required
values to sysfs representation of those parameters.  If that fails (e.g.
on older LTS kernels with read-only filter parameters), fall back to
legacy "no list of test cases available" mode as we do on kernels with
those module parameters not supported at all.

This modification will also serve as a workaround for the issue of
impossibility to unload the base Kunit module on Xe platforms, available
to IGT as soon as the module supports writable filter parameters.

v2: Work around ineffective writes of empty strings to sysfs module
    parameter files (Lucas) by using human readable non-empty strings that
    give the same results as default NULLs,
  - drop fallback to reload of base Kunit module method if assigning new
    values to module parameters via sysfs fails (Lucas), instead use the
    existing fallback to blind execution like if getting a list of test
    cases was not supported at all,
  - split move of open_parameters() helper up in the source file as well
    as cleanup of base KUnit module unloading to separate patches (Kamil),
  - address the issue of the second paragraph of commit description
    suggesting two separate changes combined in one patch (Kamil) by
    rewording the description.

Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>
---
 lib/igt_kmod.c | 114 ++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 84 insertions(+), 30 deletions(-)

diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
index d2c28d0a64..1d57ea708d 100644
--- a/lib/igt_kmod.c
+++ b/lib/igt_kmod.c
@@ -811,6 +811,56 @@ static int open_parameters(const char *module_name)
 	return open(path, O_RDONLY);
 }
 
+static const char *kunit_params[3] = {
+	"filter_glob", "filter", "filter_action",
+};
+
+static bool kunit_set_params(const char **values)
+{
+	/*
+	 * Reapplying default NULLs to module parameters via sysfs seems not
+	 * possible, and applying empty strings doesn't work as expected,
+	 * leaving current values untouched.  As a workaround, use
+	 * human-readable non-empty strings that exhibit the same behaviour
+	 * as if default NULLs were in place.  In case of filter_action
+	 * parameter there is no such obvious non-empty string, however,
+	 * that's not a problem for us since even if it was previously set
+	 * to "skip" and we leave it as is, our "module!=none" default filter
+	 * guarantees that no test cases are filtered out to be skipped.
+	 */
+	const char *defaults[ARRAY_SIZE(kunit_params)] = {
+	     /* filter_glob, filter,	     filter_action */
+		"*",	     "module!=none", "",
+	};
+	int i, params;
+	bool ret;
+
+	params = open_parameters("kunit");
+	ret = !igt_debug_on(params < 0);
+
+	for (i = 0; ret && i < ARRAY_SIZE(kunit_params); i++) {
+		char *param = igt_sysfs_get(params, kunit_params[i]);
+
+		if (igt_debug_on_f(!param, "param: %s\n", kunit_params[i])) {
+			ret = false;
+			break;
+		}
+
+		ret = !strcmp(param, values[i] ?: defaults[i]);
+		free(param);
+		if (!ret)
+			ret = !igt_debug_on(!igt_sysfs_set(params,
+							   kunit_params[i],
+							   values[i] ?:
+							   defaults[i]));
+	}
+
+	if (params >= 0)
+		close(params);
+
+	return ret;
+}
+
 struct modprobe_data {
 	struct kmod_module *kmod;
 	const char *opts;
@@ -1100,6 +1150,18 @@ static void kunit_get_tests(struct igt_list_head *tests,
 			    const char *filter,
 			    const char *opts)
 {
+	/*
+	 * To get a list of test cases provided by a kunit test module, ask the
+	 * generic kunit module to respond with SKIP result for each test found.
+	 * We could also try to use action=list kunit parameter to get the
+	 * listing, however, parsing a KTAP report -- something that we already
+	 * can do perfectly -- seems to be more safe than extracting a test case
+	 * list of unknown length from /dev/kmsg.
+	 */
+	const char *values[ARRAY_SIZE(kunit_params)] = {
+	     /* filter_glob, filter,	    filter_action */
+		NULL,	     "module=none", "skip",
+	};
 	char *suite_name = NULL, *case_name = NULL;
 	struct igt_ktap_result *r, *rn;
 	struct igt_ktap_results *ktap;
@@ -1113,27 +1175,21 @@ static void kunit_get_tests(struct igt_list_head *tests,
 
 	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
 
-	/*
-	 * To get a list of test cases provided by a kunit test module, ask the
-	 * generic kunit module to respond with SKIP result for each test found.
-	 * We could also use action=list kunit parameter to get the listing,
-	 * however, parsing a KTAP report -- something that we already can do
-	 * perfectly -- seems to be more safe than extracting a test case list
-	 * of unknown length from /dev/kmsg.
-	 *
-	 * TODO: drop the following workaround, which is required by LTS kernel
-	 *       v6.1 not capable of listing test cases when built as a module.
-	 * If loading the kunit module with required parameters fails then
-	 * assume that we are running on a kernel with missing test case listing
-	 * capabilities.  Dont's skip but just return with empty list of test
-	 * cases, that should tell the caller to use a legacy method of
-	 * iterating over KTAP results collected from blind execution of all
-	 * Kunit test cases provided by a Kunit test module.
-	 */
-	igt_ignore_warn(igt_kmod_unload("kunit", KMOD_REMOVE_FORCE));
-	if (igt_debug_on(igt_kmod_load("kunit",
-				       "filter=module=none filter_action=skip")))
+	if (igt_debug_on(!kunit_set_params(values))) {
+		/*
+		 * TODO: drop the following workaround, required by LTS kernel
+		 *       v6.1 not capable of listing test cases when built as as
+		 *       module, when no longer needed.
+		 * If updating writable filter parameters of the kunit base
+		 * module with required values then assume that we are running
+		 * on a kernel with missing test case listing capabilities.
+		 * Don't skip but just return with empty list of test cases,
+		 * which should tell the caller to use a legacy method of
+		 * iterating over KTAP results collected from blind execution
+		 * of all Kunit test cases provided by a Kunit test module.
+		 */
 		return;
+	}
 
 	igt_skip_on(modprobe(tst->kmod, opts));
 
@@ -1200,16 +1256,11 @@ static void __igt_kunit(struct igt_ktest *tst,
 			      t->case_name) {
 
 			if (!modprobe.thread) {
-				/*
-				 * Since we have successfully loaded the kunit
-				 * base module with non-default parameters in
-				 * order to get a list of test cases, now we
-				 * have to unload it so it is then automatically
-				 * reloaded with default parameter values when
-				 * we load the test module again for execution.
-				 */
-				igt_skip_on(igt_kmod_unload("kunit",
-							    KMOD_REMOVE_FORCE));
+				const char *values[ARRAY_SIZE(kunit_params)] = {
+					NULL, NULL, NULL,
+				};
+
+				igt_require(kunit_set_params(values));
 
 				igt_assert_eq(pthread_mutexattr_init(&attr), 0);
 				igt_assert_eq(pthread_mutexattr_setrobust(&attr,
@@ -1378,6 +1429,9 @@ void igt_kunit(const char *module_name, const char *name, const char *opts)
 		igt_assert(igt_list_empty(&tests));
 	}
 
+	/* We need the base KUnit module loaded if not built-in */
+	igt_ignore_warn(igt_kmod_load("kunit", NULL));
+
 	/*
 	 * We need to use igt_subtest here, as otherwise it may crash with:
 	 *  skipping is allowed only in fixtures, subtests or igt_simple_main
-- 
2.43.0


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

* [PATCH i-g-t v2 5/6] lib/kunit: Report early kernel taints explicitly
  2024-01-31 18:03 ` Janusz Krzysztofik
@ 2024-01-31 18:03   ` Janusz Krzysztofik
  -1 siblings, 0 replies; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-01-31 18:03 UTC (permalink / raw)
  To: igt-dev; +Cc: Kamil Konieczny, Janusz Krzysztofik, Lucas De Marchi, intel-xe

When we find the kernel tainted after loading a KUnit test module in
list only mode, report that taint immediately as the reason for skip
instead of executing and blaming our KTAP parser.

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

diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
index 1d57ea708d..53c54b1a0d 100644
--- a/lib/igt_kmod.c
+++ b/lib/igt_kmod.c
@@ -1165,6 +1165,7 @@ static void kunit_get_tests(struct igt_list_head *tests,
 	char *suite_name = NULL, *case_name = NULL;
 	struct igt_ktap_result *r, *rn;
 	struct igt_ktap_results *ktap;
+	unsigned long taints;
 	int flags, err;
 
 	igt_skip_on_f(tst->kmsg < 0, "Could not open /dev/kmsg\n");
@@ -1192,6 +1193,7 @@ static void kunit_get_tests(struct igt_list_head *tests,
 	}
 
 	igt_skip_on(modprobe(tst->kmod, opts));
+	igt_skip_on(igt_kernel_tainted(&taints));
 
 	ktap = igt_ktap_alloc(tests);
 	igt_require(ktap);
-- 
2.43.0


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

* [PATCH i-g-t v2 5/6] lib/kunit: Report early kernel taints explicitly
@ 2024-01-31 18:03   ` Janusz Krzysztofik
  0 siblings, 0 replies; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-01-31 18:03 UTC (permalink / raw)
  To: igt-dev; +Cc: Lucas De Marchi, intel-xe

When we find the kernel tainted after loading a KUnit test module in
list only mode, report that taint immediately as the reason for skip
instead of executing and blaming our KTAP parser.

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

diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
index 1d57ea708d..53c54b1a0d 100644
--- a/lib/igt_kmod.c
+++ b/lib/igt_kmod.c
@@ -1165,6 +1165,7 @@ static void kunit_get_tests(struct igt_list_head *tests,
 	char *suite_name = NULL, *case_name = NULL;
 	struct igt_ktap_result *r, *rn;
 	struct igt_ktap_results *ktap;
+	unsigned long taints;
 	int flags, err;
 
 	igt_skip_on_f(tst->kmsg < 0, "Could not open /dev/kmsg\n");
@@ -1192,6 +1193,7 @@ static void kunit_get_tests(struct igt_list_head *tests,
 	}
 
 	igt_skip_on(modprobe(tst->kmod, opts));
+	igt_skip_on(igt_kernel_tainted(&taints));
 
 	ktap = igt_ktap_alloc(tests);
 	igt_require(ktap);
-- 
2.43.0


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

* [PATCH i-g-t v2 6/6] lib/kunit: Process module remove error after list errors
  2024-01-31 18:03 ` Janusz Krzysztofik
@ 2024-01-31 18:03   ` Janusz Krzysztofik
  -1 siblings, 0 replies; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-01-31 18:03 UTC (permalink / raw)
  To: igt-dev; +Cc: Kamil Konieczny, Janusz Krzysztofik, Lucas De Marchi, intel-xe

Skip on any error from test case list gathering first, then, in
preparation for executing those test cases, on an error from unloading the
test module loaded in list only mode, so it is more clear if listing the
test cases was successful or not.

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

diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
index 53c54b1a0d..741c7fd055 100644
--- a/lib/igt_kmod.c
+++ b/lib/igt_kmod.c
@@ -1225,11 +1225,11 @@ static void kunit_get_tests(struct igt_list_head *tests,
 		free(case_name);
 	}
 
-	igt_skip_on(kmod_module_remove_module(tst->kmod, KMOD_REMOVE_FORCE));
-
 	igt_skip_on_f(err,
 		      "KTAP parser failed while getting a list of test cases\n");
 	igt_skip_on(igt_list_empty(tests));
+
+	igt_skip_on(kmod_module_remove_module(tst->kmod, KMOD_REMOVE_FORCE));
 }
 
 static void __igt_kunit(struct igt_ktest *tst,
-- 
2.43.0


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

* [PATCH i-g-t v2 6/6] lib/kunit: Process module remove error after list errors
@ 2024-01-31 18:03   ` Janusz Krzysztofik
  0 siblings, 0 replies; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-01-31 18:03 UTC (permalink / raw)
  To: igt-dev; +Cc: Lucas De Marchi, intel-xe

Skip on any error from test case list gathering first, then, in
preparation for executing those test cases, on an error from unloading the
test module loaded in list only mode, so it is more clear if listing the
test cases was successful or not.

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

diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
index 53c54b1a0d..741c7fd055 100644
--- a/lib/igt_kmod.c
+++ b/lib/igt_kmod.c
@@ -1225,11 +1225,11 @@ static void kunit_get_tests(struct igt_list_head *tests,
 		free(case_name);
 	}
 
-	igt_skip_on(kmod_module_remove_module(tst->kmod, KMOD_REMOVE_FORCE));
-
 	igt_skip_on_f(err,
 		      "KTAP parser failed while getting a list of test cases\n");
 	igt_skip_on(igt_list_empty(tests));
+
+	igt_skip_on(kmod_module_remove_module(tst->kmod, KMOD_REMOVE_FORCE));
 }
 
 static void __igt_kunit(struct igt_ktest *tst,
-- 
2.43.0


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

* ✗ CI.Patch_applied: failure for lib/kunit: Support writable filter* parameters of kunit module (rev2)
  2024-01-31 18:03 ` Janusz Krzysztofik
                   ` (6 preceding siblings ...)
  (?)
@ 2024-01-31 18:16 ` Patchwork
  -1 siblings, 0 replies; 41+ messages in thread
From: Patchwork @ 2024-01-31 18:16 UTC (permalink / raw)
  To: Janusz Krzysztofik; +Cc: intel-xe

== Series Details ==

Series: lib/kunit: Support writable filter* parameters of kunit module (rev2)
URL   : https://patchwork.freedesktop.org/series/129175/
State : failure

== Summary ==

=== Applying kernel patches on branch 'drm-tip' with base: ===
Base commit: 8327dc2a5 drm-tip: 2024y-01m-31d-16h-12m-57s UTC integration manifest
=== git am output follows ===
error: lib/igt_kmod.c: does not exist in index
hint: Use 'git am --show-current-patch' to see the failed patch
Applying: lib/kunit: Skip on empty list of test cases
Patch failed at 0001 lib/kunit: Skip on empty list of test cases
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] 41+ messages in thread

* ✗ CI.xeBAT: failure for lib/kunit: Support writable filter* parameters of kunit module (rev2)
  2024-01-31 18:03 ` Janusz Krzysztofik
                   ` (7 preceding siblings ...)
  (?)
@ 2024-01-31 18:36 ` Patchwork
  2024-01-31 19:22   ` Janusz Krzysztofik
  -1 siblings, 1 reply; 41+ messages in thread
From: Patchwork @ 2024-01-31 18:36 UTC (permalink / raw)
  To: Janusz Krzysztofik; +Cc: igt-dev

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

== Series Details ==

Series: lib/kunit: Support writable filter* parameters of kunit module (rev2)
URL   : https://patchwork.freedesktop.org/series/129174/
State : failure

== Summary ==

CI Bug Log - changes from XEIGT_7699_BAT -> XEIGTPW_10613_BAT
====================================================

Summary
-------

  **FAILURE**

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

  

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

  No changes in participating hosts

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@xe_live_ktest@bo:
    - bat-adlp-7:         [PASS][1] -> [SKIP][2] +2 other tests skip
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-adlp-7/igt@xe_live_ktest@bo.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-adlp-7/igt@xe_live_ktest@bo.html

  * igt@xe_live_ktest@migrate:
    - bat-pvc-2:          [PASS][3] -> [SKIP][4] +2 other tests skip
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-pvc-2/igt@xe_live_ktest@migrate.html
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-pvc-2/igt@xe_live_ktest@migrate.html
    - bat-dg2-oem2:       [PASS][5] -> [SKIP][6] +2 other tests skip
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-dg2-oem2/igt@xe_live_ktest@migrate.html
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-dg2-oem2/igt@xe_live_ktest@migrate.html
    - bat-atsm-2:         [PASS][7] -> [SKIP][8] +2 other tests skip
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-atsm-2/igt@xe_live_ktest@migrate.html
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-atsm-2/igt@xe_live_ktest@migrate.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@kms_addfb_basic@invalid-set-prop:
    - bat-adlp-7:         [PASS][9] -> [SKIP][10] ([i915#6077]) +30 other tests skip
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-adlp-7/igt@kms_addfb_basic@invalid-set-prop.html
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-adlp-7/igt@kms_addfb_basic@invalid-set-prop.html

  * igt@kms_flip@basic-flip-vs-dpms:
    - bat-adlp-7:         [PASS][11] -> [SKIP][12] ([Intel XE#1219]) +9 other tests skip
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-adlp-7/igt@kms_flip@basic-flip-vs-dpms.html
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-adlp-7/igt@kms_flip@basic-flip-vs-dpms.html

  * igt@kms_force_connector_basic@force-connector-state:
    - bat-adlp-7:         [PASS][13] -> [SKIP][14] ([Intel XE#540]) +3 other tests skip
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-adlp-7/igt@kms_force_connector_basic@force-connector-state.html
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-adlp-7/igt@kms_force_connector_basic@force-connector-state.html

  * igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence:
    - bat-adlp-7:         [PASS][15] -> [SKIP][16] ([Intel XE#829]) +6 other tests skip
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-adlp-7/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-adlp-7/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html

  * igt@kms_prop_blob@basic:
    - bat-adlp-7:         [PASS][17] -> [SKIP][18] ([Intel XE#780])
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-adlp-7/igt@kms_prop_blob@basic.html
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-adlp-7/igt@kms_prop_blob@basic.html

  
#### Possible fixes ####

  * igt@xe_module_load@load:
    - bat-pvc-2:          [SKIP][19] ([Intel XE#378]) -> [PASS][20]
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-pvc-2/igt@xe_module_load@load.html
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-pvc-2/igt@xe_module_load@load.html

  
#### Warnings ####

  * igt@kms_dsc@dsc-basic:
    - bat-adlp-7:         [SKIP][21] ([Intel XE#455]) -> [SKIP][22] ([Intel XE#1219])
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-adlp-7/igt@kms_dsc@dsc-basic.html
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-adlp-7/igt@kms_dsc@dsc-basic.html

  * igt@kms_frontbuffer_tracking@basic:
    - bat-adlp-7:         [DMESG-FAIL][23] ([Intel XE#1033]) -> [SKIP][24] ([Intel XE#783])
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-adlp-7/igt@kms_frontbuffer_tracking@basic.html
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-adlp-7/igt@kms_frontbuffer_tracking@basic.html

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

  [Intel XE#1033]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1033
  [Intel XE#1219]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1219
  [Intel XE#378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/378
  [Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
  [Intel XE#540]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/540
  [Intel XE#780]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/780
  [Intel XE#783]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/783
  [Intel XE#829]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/829
  [i915#6077]: https://gitlab.freedesktop.org/drm/intel/issues/6077


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

  * IGT: IGT_7699 -> IGTPW_10613
  * Linux: xe-699-c655e0fd28045dbaa581d04bf7cc266eec1c3457 -> xe-711-8327dc2a5a26f82a8700035c6259f57e9299d6a2

  IGTPW_10613: 10613
  IGT_7699: 7699
  xe-699-c655e0fd28045dbaa581d04bf7cc266eec1c3457: c655e0fd28045dbaa581d04bf7cc266eec1c3457
  xe-711-8327dc2a5a26f82a8700035c6259f57e9299d6a2: 8327dc2a5a26f82a8700035c6259f57e9299d6a2

== Logs ==

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

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

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

* ✓ Fi.CI.BAT: success for lib/kunit: Support writable filter* parameters of kunit module (rev2)
  2024-01-31 18:03 ` Janusz Krzysztofik
                   ` (8 preceding siblings ...)
  (?)
@ 2024-01-31 18:55 ` Patchwork
  -1 siblings, 0 replies; 41+ messages in thread
From: Patchwork @ 2024-01-31 18:55 UTC (permalink / raw)
  To: Janusz Krzysztofik; +Cc: igt-dev

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

== Series Details ==

Series: lib/kunit: Support writable filter* parameters of kunit module (rev2)
URL   : https://patchwork.freedesktop.org/series/129174/
State : success

== Summary ==

CI Bug Log - changes from IGT_7699 -> IGTPW_10613
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (38 -> 38)
------------------------------

  Additional (2): bat-arls-1 bat-arls-2 
  Missing    (2): bat-kbl-2 fi-snb-2520m 

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

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

### IGT changes ###

#### Suppressed ####

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

  * igt@core_hotunplug@unbind-rebind:
    - {bat-arls-1}:       NOTRUN -> [SKIP][1] +144 other tests skip
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/bat-arls-1/igt@core_hotunplug@unbind-rebind.html

  * igt@gem_exec_create@basic@smem:
    - {bat-arls-2}:       NOTRUN -> [DMESG-WARN][2] +28 other tests dmesg-warn
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/bat-arls-2/igt@gem_exec_create@basic@smem.html

  * igt@i915_selftest@live@objects:
    - {bat-arls-1}:       NOTRUN -> [DMESG-FAIL][3] +38 other tests dmesg-fail
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/bat-arls-1/igt@i915_selftest@live@objects.html

  * igt@prime_vgem@basic-fence-read:
    - {bat-arls-2}:       NOTRUN -> [SKIP][4] +32 other tests skip
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/bat-arls-2/igt@prime_vgem@basic-fence-read.html

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

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

### IGT changes ###

#### Issues hit ####

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

  * igt@gem_huc_copy@huc-copy:
    - bat-jsl-1:          NOTRUN -> [SKIP][6] ([i915#2190])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/bat-jsl-1/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@verify-random:
    - bat-mtlp-6:         NOTRUN -> [SKIP][7] ([i915#4613]) +3 other tests skip
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/bat-mtlp-6/igt@gem_lmem_swapping@verify-random.html
    - bat-jsl-1:          NOTRUN -> [SKIP][8] ([i915#4613]) +3 other tests skip
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/bat-jsl-1/igt@gem_lmem_swapping@verify-random.html

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

  * igt@i915_selftest@live@sanitycheck:
    - fi-kbl-7567u:       [PASS][10] -> [DMESG-WARN][11] ([i915#9730]) +36 other tests dmesg-warn
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/fi-kbl-7567u/igt@i915_selftest@live@sanitycheck.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/fi-kbl-7567u/igt@i915_selftest@live@sanitycheck.html

  * igt@kms_addfb_basic@invalid-set-prop:
    - fi-kbl-7567u:       [PASS][12] -> [DMESG-WARN][13] ([i915#8585]) +41 other tests dmesg-warn
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/fi-kbl-7567u/igt@kms_addfb_basic@invalid-set-prop.html
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/fi-kbl-7567u/igt@kms_addfb_basic@invalid-set-prop.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_10613/bat-jsl-1/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html

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

  * igt@kms_force_connector_basic@force-load-detect:
    - bat-mtlp-6:         NOTRUN -> [SKIP][16] ([fdo#109285] / [i915#9792])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/bat-mtlp-6/igt@kms_force_connector_basic@force-load-detect.html
    - bat-jsl-1:          NOTRUN -> [SKIP][17] ([fdo#109285])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/bat-jsl-1/igt@kms_force_connector_basic@force-load-detect.html

  * igt@kms_force_connector_basic@prune-stale-modes:
    - bat-mtlp-6:         NOTRUN -> [SKIP][18] ([i915#5274] / [i915#9792])
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/bat-mtlp-6/igt@kms_force_connector_basic@prune-stale-modes.html

  * igt@kms_frontbuffer_tracking@basic:
    - bat-mtlp-6:         NOTRUN -> [SKIP][19] ([i915#4342] / [i915#5354] / [i915#9792])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/bat-mtlp-6/igt@kms_frontbuffer_tracking@basic.html

  * igt@kms_pipe_crc_basic@hang-read-crc:
    - bat-mtlp-6:         NOTRUN -> [SKIP][20] ([i915#9792]) +6 other tests skip
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/bat-mtlp-6/igt@kms_pipe_crc_basic@hang-read-crc.html

  * igt@kms_pm_backlight@basic-brightness:
    - bat-mtlp-6:         NOTRUN -> [SKIP][21] ([i915#5354] / [i915#9792])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/bat-mtlp-6/igt@kms_pm_backlight@basic-brightness.html

  * igt@kms_pm_rpm@basic-pci-d3-state:
    - fi-kbl-7567u:       [PASS][22] -> [DMESG-WARN][23] ([i915#180] / [i915#8585]) +45 other tests dmesg-warn
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/fi-kbl-7567u/igt@kms_pm_rpm@basic-pci-d3-state.html
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/fi-kbl-7567u/igt@kms_pm_rpm@basic-pci-d3-state.html

  * igt@kms_setmode@basic-clone-single-crtc:
    - bat-jsl-1:          NOTRUN -> [SKIP][24] ([i915#3555])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/bat-jsl-1/igt@kms_setmode@basic-clone-single-crtc.html
    - bat-mtlp-6:         NOTRUN -> [SKIP][25] ([i915#3555] / [i915#8809] / [i915#9792])
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/bat-mtlp-6/igt@kms_setmode@basic-clone-single-crtc.html

  * igt@prime_vgem@basic-fence-flip:
    - bat-mtlp-6:         NOTRUN -> [SKIP][26] ([i915#3708] / [i915#9792])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/bat-mtlp-6/igt@prime_vgem@basic-fence-flip.html

  * igt@prime_vgem@basic-fence-mmap:
    - bat-mtlp-6:         NOTRUN -> [SKIP][27] ([i915#3708] / [i915#4077]) +1 other test skip
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/bat-mtlp-6/igt@prime_vgem@basic-fence-mmap.html

  * igt@prime_vgem@basic-write:
    - bat-mtlp-6:         NOTRUN -> [SKIP][28] ([i915#3708]) +2 other tests skip
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/bat-mtlp-6/igt@prime_vgem@basic-write.html

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

  [fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285
  [i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180
  [i915#1849]: https://gitlab.freedesktop.org/drm/intel/issues/1849
  [i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
  [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
  [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
  [i915#4342]: https://gitlab.freedesktop.org/drm/intel/issues/4342
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#5274]: https://gitlab.freedesktop.org/drm/intel/issues/5274
  [i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354
  [i915#6621]: https://gitlab.freedesktop.org/drm/intel/issues/6621
  [i915#8585]: https://gitlab.freedesktop.org/drm/intel/issues/8585
  [i915#8809]: https://gitlab.freedesktop.org/drm/intel/issues/8809
  [i915#9318]: https://gitlab.freedesktop.org/drm/intel/issues/9318
  [i915#9673]: https://gitlab.freedesktop.org/drm/intel/issues/9673
  [i915#9730]: https://gitlab.freedesktop.org/drm/intel/issues/9730
  [i915#9732]: https://gitlab.freedesktop.org/drm/intel/issues/9732
  [i915#9792]: https://gitlab.freedesktop.org/drm/intel/issues/9792
  [i915#9886]: https://gitlab.freedesktop.org/drm/intel/issues/9886


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

  * CI: CI-20190529 -> None
  * IGT: IGT_7699 -> IGTPW_10613

  CI-20190529: 20190529
  CI_DRM_14193: c655e0fd28045dbaa581d04bf7cc266eec1c3457 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_10613: 10613
  IGT_7699: 7699


Testlist changes
----------------

-igt@xe_ccs@block-copy-compressed-inc-dimension
-igt@xe_ccs@block-copy-uncompressed-inc-dimension

== Logs ==

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

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

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

* Re: ✗ CI.xeBAT: failure for lib/kunit: Support writable filter* parameters of kunit module (rev2)
  2024-01-31 18:36 ` ✗ CI.xeBAT: " Patchwork
@ 2024-01-31 19:22   ` Janusz Krzysztofik
  2024-01-31 20:51     ` Lucas De Marchi
  0 siblings, 1 reply; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-01-31 19:22 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev, intel-xe

On Wednesday, 31 January 2024 19:36:57 CET Patchwork wrote:
> == Series Details ==
> 
> Series: lib/kunit: Support writable filter* parameters of kunit module 
(rev2)
> URL   : https://patchwork.freedesktop.org/series/129174/
> State : failure
> 
> == Summary ==
> 
> CI Bug Log - changes from XEIGT_7699_BAT -> XEIGTPW_10613_BAT
> ====================================================
> 
> Summary
> -------
> 
>   **FAILURE**
> 
>   Serious unknown changes coming with XEIGTPW_10613_BAT absolutely need to 
be
>   verified manually.
>   
>   If you think the reported changes have nothing to do with the changes
>   introduced in XEIGTPW_10613_BAT, please notify your bug team (I915-ci-
infra@lists.freedesktop.org) to allow them
>   to document this new failure mode, which will reduce false positives in 
CI.
> 
>   
> 
> Participating hosts (4 -> 4)
> ------------------------------
> 
>   No changes in participating hosts
> 
> Possible new issues
> -------------------
> 
>   Here are the unknown changes that may have been introduced in 
XEIGTPW_10613_BAT:
> 
> ### IGT changes ###
> 
> #### Possible regressions ####
> 
>   * igt@xe_live_ktest@bo:
>     - bat-adlp-7:         [PASS][1] -> [SKIP][2] +2 other tests skip
>    [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-adlp-7/
igt@xe_live_ktest@bo.html
>    [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-adlp-7/
igt@xe_live_ktest@bo.html

Hi Lucas,

We've got an empty list of test cases because the current algorithm of IGT 
KUnit implementation expects subtest name provided via struct kunit_tests 
to be the same as name of a test suite provided by the KUnit test module.  As 
a special case, if the module provides only one test suite (most do) and the 
name of it is the same as the module name with the _test or _kunit suffix 
truncated (also the most common case) then subtest name may be omitted (i.e., 
.name field may be NULL).

I have to document the above, but we also have to use the same names on both 
sides (KUnit test module and its corresponding IGT test).  Now we don't, e.g. 
test suite named "xe_bo" is provided by xe_bo_test module while subtest name 
"bo" is specified for that module in IGT xe_live_ktest.

Thanks,
Janusz

> 
>   * igt@xe_live_ktest@migrate:
>     - bat-pvc-2:          [PASS][3] -> [SKIP][4] +2 other tests skip
>    [3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-pvc-2/
igt@xe_live_ktest@migrate.html
>    [4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-pvc-2/
igt@xe_live_ktest@migrate.html
>     - bat-dg2-oem2:       [PASS][5] -> [SKIP][6] +2 other tests skip
>    [5]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-dg2-oem2/
igt@xe_live_ktest@migrate.html
>    [6]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-dg2-oem2/
igt@xe_live_ktest@migrate.html
>     - bat-atsm-2:         [PASS][7] -> [SKIP][8] +2 other tests skip
>    [7]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-atsm-2/
igt@xe_live_ktest@migrate.html
>    [8]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-atsm-2/
igt@xe_live_ktest@migrate.html
> 
>   
> Known issues
> ------------
> 
>   Here are the changes found in XEIGTPW_10613_BAT that come from known 
issues:
> 
> ### IGT changes ###
> 
> #### Issues hit ####
> 
>   * igt@kms_addfb_basic@invalid-set-prop:
>     - bat-adlp-7:         [PASS][9] -> [SKIP][10] ([i915#6077]) +30 other 
tests skip
>    [9]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-adlp-7/
igt@kms_addfb_basic@invalid-set-prop.html
>    [10]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-adlp-7/
igt@kms_addfb_basic@invalid-set-prop.html
> 
>   * igt@kms_flip@basic-flip-vs-dpms:
>     - bat-adlp-7:         [PASS][11] -> [SKIP][12] ([Intel XE#1219]) +9 
other tests skip
>    [11]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-adlp-7/
igt@kms_flip@basic-flip-vs-dpms.html
>    [12]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-adlp-7/
igt@kms_flip@basic-flip-vs-dpms.html
> 
>   * igt@kms_force_connector_basic@force-connector-state:
>     - bat-adlp-7:         [PASS][13] -> [SKIP][14] ([Intel XE#540]) +3 other 
tests skip
>    [13]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-adlp-7/
igt@kms_force_connector_basic@force-connector-state.html
>    [14]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-adlp-7/
igt@kms_force_connector_basic@force-connector-state.html
> 
>   * igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence:
>     - bat-adlp-7:         [PASS][15] -> [SKIP][16] ([Intel XE#829]) +6 other 
tests skip
>    [15]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-adlp-7/
igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html
>    [16]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-adlp-7/
igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html
> 
>   * igt@kms_prop_blob@basic:
>     - bat-adlp-7:         [PASS][17] -> [SKIP][18] ([Intel XE#780])
>    [17]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-adlp-7/
igt@kms_prop_blob@basic.html
>    [18]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-adlp-7/
igt@kms_prop_blob@basic.html
> 
>   
> #### Possible fixes ####
> 
>   * igt@xe_module_load@load:
>     - bat-pvc-2:          [SKIP][19] ([Intel XE#378]) -> [PASS][20]
>    [19]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-pvc-2/
igt@xe_module_load@load.html
>    [20]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-pvc-2/
igt@xe_module_load@load.html
> 
>   
> #### Warnings ####
> 
>   * igt@kms_dsc@dsc-basic:
>     - bat-adlp-7:         [SKIP][21] ([Intel XE#455]) -> [SKIP][22] ([Intel 
XE#1219])
>    [21]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-adlp-7/
igt@kms_dsc@dsc-basic.html
>    [22]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-adlp-7/
igt@kms_dsc@dsc-basic.html
> 
>   * igt@kms_frontbuffer_tracking@basic:
>     - bat-adlp-7:         [DMESG-FAIL][23] ([Intel XE#1033]) -> [SKIP][24] 
([Intel XE#783])
>    [23]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-adlp-7/
igt@kms_frontbuffer_tracking@basic.html
>    [24]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-adlp-7/
igt@kms_frontbuffer_tracking@basic.html
> 
>   
>   {name}: This element is suppressed. This means it is ignored when 
computing
>           the status of the difference (SUCCESS, WARNING, or FAILURE).
> 
>   [Intel XE#1033]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1033
>   [Intel XE#1219]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1219
>   [Intel XE#378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/378
>   [Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
>   [Intel XE#540]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/540
>   [Intel XE#780]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/780
>   [Intel XE#783]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/783
>   [Intel XE#829]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/829
>   [i915#6077]: https://gitlab.freedesktop.org/drm/intel/issues/6077
> 
> 
> Build changes
> -------------
> 
>   * IGT: IGT_7699 -> IGTPW_10613
>   * Linux: xe-699-c655e0fd28045dbaa581d04bf7cc266eec1c3457 -> 
xe-711-8327dc2a5a26f82a8700035c6259f57e9299d6a2
> 
>   IGTPW_10613: 10613
>   IGT_7699: 7699
>   xe-699-c655e0fd28045dbaa581d04bf7cc266eec1c3457: 
c655e0fd28045dbaa581d04bf7cc266eec1c3457
>   xe-711-8327dc2a5a26f82a8700035c6259f57e9299d6a2: 
8327dc2a5a26f82a8700035c6259f57e9299d6a2
> 
> == Logs ==
> 
> For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/
index.html
> 





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

* ✗ Fi.CI.IGT: failure for lib/kunit: Support writable filter* parameters of kunit module (rev2)
  2024-01-31 18:03 ` Janusz Krzysztofik
                   ` (9 preceding siblings ...)
  (?)
@ 2024-01-31 20:04 ` Patchwork
  -1 siblings, 0 replies; 41+ messages in thread
From: Patchwork @ 2024-01-31 20:04 UTC (permalink / raw)
  To: Janusz Krzysztofik; +Cc: igt-dev

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

== Series Details ==

Series: lib/kunit: Support writable filter* parameters of kunit module (rev2)
URL   : https://patchwork.freedesktop.org/series/129174/
State : failure

== Summary ==

CI Bug Log - changes from IGT_7699_full -> IGTPW_10613_full
====================================================

Summary
-------

  **FAILURE**

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

Participating hosts (8 -> 7)
------------------------------

  Missing    (1): shard-glk-0 

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@gem_ctx_freq@sysfs@gt0:
    - shard-mtlp:         [PASS][1] -> [FAIL][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-mtlp-4/igt@gem_ctx_freq@sysfs@gt0.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-3/igt@gem_ctx_freq@sysfs@gt0.html

  
#### Warnings ####

  * igt@i915_hangman@gt-engine-hang:
    - shard-snb:          [SKIP][3] ([fdo#109271]) -> [ABORT][4]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-snb2/igt@i915_hangman@gt-engine-hang.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-snb1/igt@i915_hangman@gt-engine-hang.html

  
New tests
---------

  New tests have been introduced between IGT_7699_full and IGTPW_10613_full:

### New IGT tests (1) ###

  * igt@kms_big_fb:
    - Statuses :
    - Exec time: [None] s

  

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

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

### IGT changes ###

#### Issues hit ####

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

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

  * igt@drm_fdinfo@busy@rcs0:
    - shard-dg2:          NOTRUN -> [SKIP][7] ([i915#8414]) +23 other tests skip
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-2/igt@drm_fdinfo@busy@rcs0.html

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

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

  * igt@gem_ccs@suspend-resume@tile4-compressed-compfmt0-lmem0-lmem0:
    - shard-dg2:          NOTRUN -> [INCOMPLETE][10] ([i915#10137] / [i915#7297])
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-7/igt@gem_ccs@suspend-resume@tile4-compressed-compfmt0-lmem0-lmem0.html

  * igt@gem_close_race@multigpu-basic-threads:
    - shard-dg1:          NOTRUN -> [SKIP][11] ([i915#7697])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-12/igt@gem_close_race@multigpu-basic-threads.html
    - shard-tglu:         NOTRUN -> [SKIP][12] ([i915#7697])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-8/igt@gem_close_race@multigpu-basic-threads.html

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

  * igt@gem_ctx_param@set-priority-not-supported:
    - shard-rkl:          NOTRUN -> [SKIP][14] ([fdo#109314])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-3/igt@gem_ctx_param@set-priority-not-supported.html

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

  * igt@gem_ctx_persistence@legacy-engines-persistence:
    - shard-snb:          NOTRUN -> [SKIP][16] ([fdo#109271] / [i915#1099])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-snb6/igt@gem_ctx_persistence@legacy-engines-persistence.html

  * igt@gem_ctx_sseu@invalid-args:
    - shard-tglu:         NOTRUN -> [SKIP][17] ([i915#280])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-6/igt@gem_ctx_sseu@invalid-args.html

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

  * igt@gem_eio@hibernate:
    - shard-dg2:          NOTRUN -> [ABORT][19] ([i915#10030] / [i915#7975] / [i915#8213])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-10/igt@gem_eio@hibernate.html
    - shard-rkl:          NOTRUN -> [ABORT][20] ([i915#7975] / [i915#8213])
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-1/igt@gem_eio@hibernate.html

  * igt@gem_eio@in-flight-contexts-10ms:
    - shard-mtlp:         [PASS][21] -> [FAIL][22] ([i915#10173])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-mtlp-4/igt@gem_eio@in-flight-contexts-10ms.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-5/igt@gem_eio@in-flight-contexts-10ms.html

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

  * igt@gem_exec_balancer@bonded-true-hang:
    - shard-dg2:          NOTRUN -> [SKIP][24] ([i915#4812])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-5/igt@gem_exec_balancer@bonded-true-hang.html

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

  * igt@gem_exec_capture@capture-recoverable:
    - shard-rkl:          NOTRUN -> [SKIP][26] ([i915#6344])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-7/igt@gem_exec_capture@capture-recoverable.html

  * igt@gem_exec_capture@many-4k-incremental:
    - shard-glk:          NOTRUN -> [FAIL][27] ([i915#9606])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-glk7/igt@gem_exec_capture@many-4k-incremental.html
    - shard-dg2:          NOTRUN -> [FAIL][28] ([i915#9606])
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-1/igt@gem_exec_capture@many-4k-incremental.html
    - shard-tglu:         NOTRUN -> [FAIL][29] ([i915#9606])
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-7/igt@gem_exec_capture@many-4k-incremental.html

  * igt@gem_exec_fair@basic-deadline:
    - shard-rkl:          [PASS][30] -> [FAIL][31] ([i915#2846])
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-rkl-5/igt@gem_exec_fair@basic-deadline.html
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-6/igt@gem_exec_fair@basic-deadline.html
    - shard-glk:          NOTRUN -> [FAIL][32] ([i915#2846])
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-glk2/igt@gem_exec_fair@basic-deadline.html

  * igt@gem_exec_fair@basic-none-rrul@rcs0:
    - shard-rkl:          [PASS][33] -> [FAIL][34] ([i915#2842])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-rkl-2/igt@gem_exec_fair@basic-none-rrul@rcs0.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-7/igt@gem_exec_fair@basic-none-rrul@rcs0.html

  * igt@gem_exec_fair@basic-none-share@rcs0:
    - shard-tglu:         [PASS][35] -> [FAIL][36] ([i915#2842]) +2 other tests fail
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-tglu-7/igt@gem_exec_fair@basic-none-share@rcs0.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-2/igt@gem_exec_fair@basic-none-share@rcs0.html

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

  * igt@gem_exec_fair@basic-none-vip@rcs0:
    - shard-rkl:          NOTRUN -> [FAIL][38] ([i915#2842]) +1 other test fail
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-5/igt@gem_exec_fair@basic-none-vip@rcs0.html

  * igt@gem_exec_fair@basic-pace:
    - shard-mtlp:         NOTRUN -> [SKIP][39] ([i915#4473] / [i915#4771]) +1 other test skip
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-8/igt@gem_exec_fair@basic-pace.html

  * igt@gem_exec_fair@basic-pace-share@rcs0:
    - shard-glk:          [PASS][40] -> [FAIL][41] ([i915#2842])
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-glk3/igt@gem_exec_fair@basic-pace-share@rcs0.html
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-glk1/igt@gem_exec_fair@basic-pace-share@rcs0.html

  * igt@gem_exec_fair@basic-throttle:
    - shard-dg2:          NOTRUN -> [SKIP][42] ([i915#3539]) +2 other tests skip
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-1/igt@gem_exec_fair@basic-throttle.html

  * igt@gem_exec_flush@basic-batch-kernel-default-cmd:
    - shard-rkl:          NOTRUN -> [SKIP][43] ([fdo#109313])
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-1/igt@gem_exec_flush@basic-batch-kernel-default-cmd.html

  * igt@gem_exec_params@rsvd2-dirt:
    - shard-rkl:          NOTRUN -> [SKIP][44] ([fdo#109283])
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-4/igt@gem_exec_params@rsvd2-dirt.html

  * igt@gem_exec_params@secure-non-master:
    - shard-rkl:          NOTRUN -> [SKIP][45] ([fdo#112283])
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-4/igt@gem_exec_params@secure-non-master.html

  * igt@gem_exec_params@secure-non-root:
    - shard-tglu:         NOTRUN -> [SKIP][46] ([fdo#112283])
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-4/igt@gem_exec_params@secure-non-root.html

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

  * igt@gem_exec_reloc@basic-wc-gtt-active:
    - shard-dg1:          NOTRUN -> [SKIP][48] ([i915#3281])
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-12/igt@gem_exec_reloc@basic-wc-gtt-active.html

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

  * igt@gem_exec_schedule@preempt-queue-chain:
    - shard-dg2:          NOTRUN -> [SKIP][50] ([i915#4537] / [i915#4812])
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-1/igt@gem_exec_schedule@preempt-queue-chain.html

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

  * igt@gem_fenced_exec_thrash@2-spare-fences:
    - shard-dg2:          NOTRUN -> [SKIP][52] ([i915#4860]) +2 other tests skip
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-10/igt@gem_fenced_exec_thrash@2-spare-fences.html

  * igt@gem_fenced_exec_thrash@no-spare-fences-interruptible:
    - shard-mtlp:         NOTRUN -> [SKIP][53] ([i915#4860]) +1 other test skip
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-5/igt@gem_fenced_exec_thrash@no-spare-fences-interruptible.html

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

  * igt@gem_lmem_swapping@basic:
    - shard-mtlp:         NOTRUN -> [SKIP][55] ([i915#4613]) +2 other tests skip
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-1/igt@gem_lmem_swapping@basic.html

  * igt@gem_lmem_swapping@parallel-random:
    - shard-glk:          NOTRUN -> [SKIP][56] ([fdo#109271] / [i915#4613]) +1 other test skip
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-glk4/igt@gem_lmem_swapping@parallel-random.html

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

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

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

  * igt@gem_mmap@big-bo:
    - shard-mtlp:         NOTRUN -> [SKIP][60] ([i915#4083]) +3 other tests skip
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-4/igt@gem_mmap@big-bo.html

  * igt@gem_mmap_gtt@cpuset-medium-copy-odd:
    - shard-mtlp:         NOTRUN -> [SKIP][61] ([i915#4077]) +1 other test skip
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-7/igt@gem_mmap_gtt@cpuset-medium-copy-odd.html

  * igt@gem_mmap_wc@invalid-flags:
    - shard-dg2:          NOTRUN -> [SKIP][62] ([i915#4083]) +7 other tests skip
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-3/igt@gem_mmap_wc@invalid-flags.html

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

  * igt@gem_partial_pwrite_pread@reads:
    - shard-dg2:          NOTRUN -> [SKIP][64] ([i915#3282]) +5 other tests skip
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-1/igt@gem_partial_pwrite_pread@reads.html

  * igt@gem_partial_pwrite_pread@reads-snoop:
    - shard-mtlp:         NOTRUN -> [SKIP][65] ([i915#3282]) +5 other tests skip
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-5/igt@gem_partial_pwrite_pread@reads-snoop.html

  * igt@gem_pwrite@basic-exhaustion:
    - shard-rkl:          NOTRUN -> [SKIP][66] ([i915#3282]) +6 other tests skip
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-3/igt@gem_pwrite@basic-exhaustion.html

  * igt@gem_pxp@create-regular-context-1:
    - shard-mtlp:         NOTRUN -> [SKIP][67] ([i915#4270])
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-6/igt@gem_pxp@create-regular-context-1.html

  * igt@gem_pxp@create-regular-context-2:
    - shard-tglu:         NOTRUN -> [SKIP][68] ([i915#4270]) +4 other tests skip
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-7/igt@gem_pxp@create-regular-context-2.html

  * igt@gem_pxp@display-protected-crc:
    - shard-dg1:          NOTRUN -> [SKIP][69] ([i915#4270]) +1 other test skip
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-13/igt@gem_pxp@display-protected-crc.html

  * igt@gem_pxp@fail-invalid-protected-context:
    - shard-rkl:          NOTRUN -> [SKIP][70] ([i915#4270]) +3 other tests skip
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-3/igt@gem_pxp@fail-invalid-protected-context.html

  * igt@gem_pxp@regular-baseline-src-copy-readible:
    - shard-dg2:          NOTRUN -> [SKIP][71] ([i915#4270]) +6 other tests skip
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-5/igt@gem_pxp@regular-baseline-src-copy-readible.html

  * igt@gem_render_copy@y-tiled-ccs-to-y-tiled-mc-ccs:
    - shard-glk:          NOTRUN -> [SKIP][72] ([fdo#109271]) +188 other tests skip
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-glk4/igt@gem_render_copy@y-tiled-ccs-to-y-tiled-mc-ccs.html

  * igt@gem_render_copy@yf-tiled-ccs-to-yf-tiled:
    - shard-mtlp:         NOTRUN -> [SKIP][73] ([i915#8428]) +2 other tests skip
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-7/igt@gem_render_copy@yf-tiled-ccs-to-yf-tiled.html

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

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

  * igt@gem_tiled_partial_pwrite_pread@writes-after-reads:
    - shard-dg1:          NOTRUN -> [SKIP][76] ([i915#4077]) +5 other tests skip
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-19/igt@gem_tiled_partial_pwrite_pread@writes-after-reads.html

  * igt@gem_tiled_pread_basic:
    - shard-mtlp:         NOTRUN -> [SKIP][77] ([i915#4079]) +1 other test skip
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-5/igt@gem_tiled_pread_basic.html

  * igt@gem_userptr_blits@access-control:
    - shard-mtlp:         NOTRUN -> [SKIP][78] ([i915#3297]) +1 other test skip
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-1/igt@gem_userptr_blits@access-control.html

  * igt@gem_userptr_blits@coherency-sync:
    - shard-rkl:          NOTRUN -> [SKIP][79] ([fdo#110542])
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-6/igt@gem_userptr_blits@coherency-sync.html

  * igt@gem_userptr_blits@create-destroy-unsync:
    - shard-rkl:          NOTRUN -> [SKIP][80] ([i915#3297]) +1 other test skip
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-6/igt@gem_userptr_blits@create-destroy-unsync.html

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

  * igt@gem_userptr_blits@map-fixed-invalidate:
    - shard-dg2:          NOTRUN -> [SKIP][82] ([i915#3297] / [i915#4880]) +1 other test skip
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-1/igt@gem_userptr_blits@map-fixed-invalidate.html

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

  * igt@gem_userptr_blits@unsync-unmap-after-close:
    - shard-dg1:          NOTRUN -> [SKIP][84] ([i915#3297])
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-16/igt@gem_userptr_blits@unsync-unmap-after-close.html
    - shard-tglu:         NOTRUN -> [SKIP][85] ([i915#3297])
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-10/igt@gem_userptr_blits@unsync-unmap-after-close.html

  * igt@gen3_render_tiledx_blits:
    - shard-dg2:          NOTRUN -> [SKIP][86] ([fdo#109289]) +5 other tests skip
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-10/igt@gen3_render_tiledx_blits.html
    - shard-rkl:          NOTRUN -> [SKIP][87] ([fdo#109289]) +3 other tests skip
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-1/igt@gen3_render_tiledx_blits.html

  * igt@gen7_exec_parse@batch-without-end:
    - shard-tglu:         NOTRUN -> [SKIP][88] ([fdo#109289]) +4 other tests skip
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-3/igt@gen7_exec_parse@batch-without-end.html

  * igt@gen9_exec_parse@allowed-all:
    - shard-dg1:          NOTRUN -> [SKIP][89] ([i915#2527]) +1 other test skip
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-19/igt@gen9_exec_parse@allowed-all.html

  * igt@gen9_exec_parse@basic-rejected:
    - shard-mtlp:         NOTRUN -> [SKIP][90] ([i915#2856])
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-2/igt@gen9_exec_parse@basic-rejected.html

  * igt@gen9_exec_parse@bb-start-cmd:
    - shard-rkl:          NOTRUN -> [SKIP][91] ([i915#2527]) +1 other test skip
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-7/igt@gen9_exec_parse@bb-start-cmd.html

  * igt@gen9_exec_parse@cmd-crossing-page:
    - shard-tglu:         NOTRUN -> [SKIP][92] ([i915#2527] / [i915#2856]) +1 other test skip
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-2/igt@gen9_exec_parse@cmd-crossing-page.html

  * igt@gen9_exec_parse@valid-registers:
    - shard-dg2:          NOTRUN -> [SKIP][93] ([i915#2856]) +2 other tests skip
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-5/igt@gen9_exec_parse@valid-registers.html

  * igt@i915_fb_tiling:
    - shard-dg2:          NOTRUN -> [SKIP][94] ([i915#4881])
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-10/igt@i915_fb_tiling.html

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

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-rkl:          [PASS][97] -> [INCOMPLETE][98] ([i915#10137] / [i915#9820] / [i915#9849])
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-rkl-2/igt@i915_module_load@reload-with-fault-injection.html
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-7/igt@i915_module_load@reload-with-fault-injection.html

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

  * igt@i915_pm_freq_mult@media-freq@gt0:
    - shard-rkl:          NOTRUN -> [SKIP][100] ([i915#6590])
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-7/igt@i915_pm_freq_mult@media-freq@gt0.html

  * igt@i915_pm_rps@thresholds@gt0:
    - shard-dg2:          NOTRUN -> [SKIP][101] ([i915#8925])
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-6/igt@i915_pm_rps@thresholds@gt0.html

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

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

  * igt@kms_addfb_basic@tile-pitch-mismatch:
    - shard-mtlp:         NOTRUN -> [SKIP][104] ([i915#4212])
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-5/igt@kms_addfb_basic@tile-pitch-mismatch.html

  * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-d-hdmi-a-2-4-mc-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][105] ([i915#8709]) +11 other tests skip
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-2/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-d-hdmi-a-2-4-mc-ccs.html

  * igt@kms_atomic@plane-primary-overlay-mutable-zpos:
    - shard-dg2:          NOTRUN -> [SKIP][106] ([i915#9531])
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-1/igt@kms_atomic@plane-primary-overlay-mutable-zpos.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels:
    - shard-snb:          NOTRUN -> [SKIP][107] ([fdo#109271] / [i915#1769])
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-snb2/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html
    - shard-tglu:         NOTRUN -> [SKIP][108] ([i915#1769] / [i915#3555])
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-6/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html
    - shard-glk:          NOTRUN -> [SKIP][109] ([fdo#109271] / [i915#1769])
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-glk7/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html
    - shard-dg2:          NOTRUN -> [SKIP][110] ([i915#1769] / [i915#3555])
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-6/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html

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

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip:
    - shard-dg1:          NOTRUN -> [SKIP][112] ([i915#4538] / [i915#5286]) +1 other test skip
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-15/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip.html
    - shard-tglu:         NOTRUN -> [SKIP][113] ([fdo#111615] / [i915#5286]) +1 other test skip
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-3/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0:
    - shard-mtlp:         [PASS][114] -> [FAIL][115] ([i915#5138])
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-mtlp-8/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0.html
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-5/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0.html

  * igt@kms_big_fb@linear-16bpp-rotate-90:
    - shard-mtlp:         NOTRUN -> [SKIP][116] ([fdo#111614]) +1 other test skip
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-6/igt@kms_big_fb@linear-16bpp-rotate-90.html

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

  * igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-0:
    - shard-mtlp:         [PASS][118] -> [DMESG-WARN][119] ([i915#9157])
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-mtlp-3/igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-0.html
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-8/igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-0.html

  * igt@kms_big_fb@x-tiled-32bpp-rotate-270:
    - shard-dg2:          NOTRUN -> [SKIP][120] ([fdo#111614]) +4 other tests skip
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-1/igt@kms_big_fb@x-tiled-32bpp-rotate-270.html
    - shard-tglu:         NOTRUN -> [SKIP][121] ([fdo#111614])
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-7/igt@kms_big_fb@x-tiled-32bpp-rotate-270.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
    - shard-tglu:         [PASS][122] -> [FAIL][123] ([i915#3743])
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-tglu-7/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-4/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html

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

  * igt@kms_big_fb@yf-tiled-addfb:
    - shard-rkl:          NOTRUN -> [SKIP][125] ([fdo#111615])
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-6/igt@kms_big_fb@yf-tiled-addfb.html

  * igt@kms_big_fb@yf-tiled-addfb-size-overflow:
    - shard-dg2:          NOTRUN -> [SKIP][126] ([i915#5190]) +9 other tests skip
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-5/igt@kms_big_fb@yf-tiled-addfb-size-overflow.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180:
    - shard-rkl:          NOTRUN -> [SKIP][127] ([fdo#110723]) +7 other tests skip
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-1/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0:
    - shard-mtlp:         NOTRUN -> [SKIP][128] ([fdo#111615]) +5 other tests skip
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-1/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-hflip:
    - shard-tglu:         NOTRUN -> [SKIP][129] ([fdo#111615]) +3 other tests skip
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-6/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-hflip.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180:
    - shard-dg1:          NOTRUN -> [SKIP][130] ([i915#4538]) +1 other test skip
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-16/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180.html

  * igt@kms_big_joiner@2x-modeset:
    - shard-rkl:          NOTRUN -> [SKIP][131] ([i915#2705])
   [131]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-2/igt@kms_big_joiner@2x-modeset.html

  * igt@kms_big_joiner@basic:
    - shard-dg2:          NOTRUN -> [SKIP][132] ([i915#2705])
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-7/igt@kms_big_joiner@basic.html

  * igt@kms_ccs@pipe-a-bad-pixel-format-y-tiled-ccs:
    - shard-tglu:         NOTRUN -> [SKIP][133] ([i915#5354] / [i915#6095]) +34 other tests skip
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-2/igt@kms_ccs@pipe-a-bad-pixel-format-y-tiled-ccs.html

  * igt@kms_ccs@pipe-b-missing-ccs-buffer-y-tiled-gen12-mc-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][134] ([i915#5354] / [i915#6095]) +27 other tests skip
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-1/igt@kms_ccs@pipe-b-missing-ccs-buffer-y-tiled-gen12-mc-ccs.html

  * igt@kms_ccs@pipe-b-random-ccs-data-y-tiled-gen12-mc-ccs:
    - shard-dg1:          NOTRUN -> [SKIP][135] ([i915#5354] / [i915#6095]) +9 other tests skip
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-19/igt@kms_ccs@pipe-b-random-ccs-data-y-tiled-gen12-mc-ccs.html

  * igt@kms_ccs@pipe-c-bad-pixel-format-yf-tiled-ccs:
    - shard-mtlp:         NOTRUN -> [SKIP][136] ([i915#5354] / [i915#6095]) +15 other tests skip
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-7/igt@kms_ccs@pipe-c-bad-pixel-format-yf-tiled-ccs.html

  * igt@kms_ccs@pipe-d-bad-aux-stride-y-tiled-gen12-mc-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][137] ([i915#5354]) +31 other tests skip
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-4/igt@kms_ccs@pipe-d-bad-aux-stride-y-tiled-gen12-mc-ccs.html

  * igt@kms_ccs@pipe-d-crc-sprite-planes-basic-4-tiled-mtl-rc-ccs-cc:
    - shard-dg2:          NOTRUN -> [SKIP][138] ([i915#5354]) +87 other tests skip
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-7/igt@kms_ccs@pipe-d-crc-sprite-planes-basic-4-tiled-mtl-rc-ccs-cc.html

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

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

  * igt@kms_cdclk@plane-scaling:
    - shard-tglu:         NOTRUN -> [SKIP][141] ([i915#3742])
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-4/igt@kms_cdclk@plane-scaling.html

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

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

  * igt@kms_chamelium_color@ctm-blue-to-red:
    - shard-mtlp:         NOTRUN -> [SKIP][144] ([fdo#111827])
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-5/igt@kms_chamelium_color@ctm-blue-to-red.html
    - shard-dg2:          NOTRUN -> [SKIP][145] ([fdo#111827]) +3 other tests skip
   [145]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-1/igt@kms_chamelium_color@ctm-blue-to-red.html

  * igt@kms_chamelium_color@ctm-max:
    - shard-tglu:         NOTRUN -> [SKIP][146] ([fdo#111827])
   [146]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-10/igt@kms_chamelium_color@ctm-max.html

  * igt@kms_chamelium_color@gamma:
    - shard-rkl:          NOTRUN -> [SKIP][147] ([fdo#111827]) +1 other test skip
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-4/igt@kms_chamelium_color@gamma.html

  * igt@kms_chamelium_edid@dp-edid-resolution-list:
    - shard-dg1:          NOTRUN -> [SKIP][148] ([i915#7828])
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-13/igt@kms_chamelium_edid@dp-edid-resolution-list.html

  * igt@kms_chamelium_edid@hdmi-edid-change-during-suspend:
    - shard-rkl:          NOTRUN -> [SKIP][149] ([i915#7828]) +8 other tests skip
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-6/igt@kms_chamelium_edid@hdmi-edid-change-during-suspend.html

  * igt@kms_chamelium_edid@vga-edid-read:
    - shard-tglu:         NOTRUN -> [SKIP][150] ([i915#7828]) +4 other tests skip
   [150]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-2/igt@kms_chamelium_edid@vga-edid-read.html

  * igt@kms_chamelium_frames@hdmi-crc-fast:
    - shard-dg2:          NOTRUN -> [SKIP][151] ([i915#7828]) +11 other tests skip
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-3/igt@kms_chamelium_frames@hdmi-crc-fast.html

  * igt@kms_content_protection@atomic:
    - shard-dg2:          NOTRUN -> [SKIP][152] ([i915#7118])
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-2/igt@kms_content_protection@atomic.html

  * igt@kms_content_protection@content-type-change:
    - shard-dg2:          NOTRUN -> [SKIP][153] ([i915#9424])
   [153]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-7/igt@kms_content_protection@content-type-change.html

  * igt@kms_content_protection@dp-mst-lic-type-0:
    - shard-dg2:          NOTRUN -> [SKIP][154] ([i915#3299])
   [154]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-3/igt@kms_content_protection@dp-mst-lic-type-0.html
    - shard-rkl:          NOTRUN -> [SKIP][155] ([i915#3116])
   [155]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-6/igt@kms_content_protection@dp-mst-lic-type-0.html

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

  * igt@kms_content_protection@dp-mst-type-1:
    - shard-mtlp:         NOTRUN -> [SKIP][157] ([i915#3299])
   [157]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-8/igt@kms_content_protection@dp-mst-type-1.html

  * igt@kms_cursor_crc@cursor-onscreen-512x170:
    - shard-tglu:         NOTRUN -> [SKIP][158] ([fdo#109279] / [i915#3359])
   [158]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-6/igt@kms_cursor_crc@cursor-onscreen-512x170.html

  * igt@kms_cursor_crc@cursor-random-128x42:
    - shard-mtlp:         NOTRUN -> [SKIP][159] ([i915#8814])
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-6/igt@kms_cursor_crc@cursor-random-128x42.html

  * igt@kms_cursor_crc@cursor-random-32x10:
    - shard-mtlp:         NOTRUN -> [SKIP][160] ([i915#3555] / [i915#8814]) +1 other test skip
   [160]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-8/igt@kms_cursor_crc@cursor-random-32x10.html

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

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

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

  * igt@kms_cursor_crc@cursor-rapid-movement-512x170:
    - shard-mtlp:         NOTRUN -> [SKIP][164] ([i915#3359])
   [164]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-7/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html

  * igt@kms_cursor_crc@cursor-sliding-32x10:
    - shard-dg2:          NOTRUN -> [SKIP][165] ([i915#3555]) +5 other tests skip
   [165]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-6/igt@kms_cursor_crc@cursor-sliding-32x10.html

  * igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy:
    - shard-snb:          [PASS][166] -> [SKIP][167] ([fdo#109271]) +7 other tests skip
   [166]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-snb7/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html
   [167]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-snb6/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic:
    - shard-rkl:          NOTRUN -> [SKIP][168] ([i915#4103]) +1 other test skip
   [168]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-3/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size:
    - shard-dg2:          NOTRUN -> [SKIP][169] ([i915#4103] / [i915#4213])
   [169]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-7/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html

  * igt@kms_cursor_legacy@cursora-vs-flipb-toggle:
    - shard-dg2:          NOTRUN -> [SKIP][170] ([fdo#109274] / [i915#5354]) +5 other tests skip
   [170]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-3/igt@kms_cursor_legacy@cursora-vs-flipb-toggle.html

  * igt@kms_cursor_legacy@cursorb-vs-flipa-legacy:
    - shard-rkl:          NOTRUN -> [SKIP][171] ([fdo#111825]) +13 other tests skip
   [171]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-7/igt@kms_cursor_legacy@cursorb-vs-flipa-legacy.html

  * igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions:
    - shard-dg2:          NOTRUN -> [SKIP][172] ([fdo#109274] / [fdo#111767] / [i915#5354]) +1 other test skip
   [172]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-3/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions.html

  * igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size:
    - shard-tglu:         NOTRUN -> [SKIP][173] ([fdo#109274])
   [173]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-2/igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size.html

  * igt@kms_cursor_legacy@torture-bo@pipe-a:
    - shard-snb:          [PASS][174] -> [DMESG-WARN][175] ([i915#10166])
   [174]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-snb2/igt@kms_cursor_legacy@torture-bo@pipe-a.html
   [175]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-snb6/igt@kms_cursor_legacy@torture-bo@pipe-a.html

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

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

  * igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-hdmi-a-3:
    - shard-dg1:          NOTRUN -> [SKIP][178] ([fdo#110189] / [i915#9723])
   [178]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-12/igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-hdmi-a-3.html

  * igt@kms_display_modes@extended-mode-basic:
    - shard-tglu:         NOTRUN -> [SKIP][179] ([i915#3555]) +4 other tests skip
   [179]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-7/igt@kms_display_modes@extended-mode-basic.html

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

  * igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][181] ([i915#3804])
   [181]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-6/igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-2.html

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

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

  * igt@kms_feature_discovery@chamelium:
    - shard-tglu:         NOTRUN -> [SKIP][184] ([i915#2065] / [i915#4854])
   [184]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-6/igt@kms_feature_discovery@chamelium.html
    - shard-dg1:          NOTRUN -> [SKIP][185] ([i915#4854])
   [185]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-15/igt@kms_feature_discovery@chamelium.html

  * igt@kms_feature_discovery@display-3x:
    - shard-dg2:          NOTRUN -> [SKIP][186] ([i915#1839]) +2 other tests skip
   [186]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-10/igt@kms_feature_discovery@display-3x.html
    - shard-rkl:          NOTRUN -> [SKIP][187] ([i915#1839])
   [187]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-6/igt@kms_feature_discovery@display-3x.html

  * igt@kms_feature_discovery@display-4x:
    - shard-tglu:         NOTRUN -> [SKIP][188] ([i915#1839]) +1 other test skip
   [188]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-6/igt@kms_feature_discovery@display-4x.html

  * igt@kms_flip@2x-blocking-wf_vblank:
    - shard-dg1:          NOTRUN -> [SKIP][189] ([fdo#111825] / [i915#9934]) +2 other tests skip
   [189]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-13/igt@kms_flip@2x-blocking-wf_vblank.html

  * igt@kms_flip@2x-dpms-vs-vblank-race:
    - shard-mtlp:         NOTRUN -> [SKIP][190] ([i915#3637]) +2 other tests skip
   [190]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-6/igt@kms_flip@2x-dpms-vs-vblank-race.html

  * igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible:
    - shard-dg2:          NOTRUN -> [SKIP][191] ([fdo#109274]) +8 other tests skip
   [191]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-6/igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible.html

  * igt@kms_flip@2x-flip-vs-blocking-wf-vblank:
    - shard-dg2:          NOTRUN -> [SKIP][192] ([fdo#109274] / [fdo#111767]) +1 other test skip
   [192]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-10/igt@kms_flip@2x-flip-vs-blocking-wf-vblank.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible:
    - shard-mtlp:         NOTRUN -> [SKIP][193] ([fdo#111767] / [i915#3637])
   [193]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-3/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html

  * igt@kms_flip@2x-nonexisting-fb:
    - shard-tglu:         NOTRUN -> [SKIP][194] ([fdo#109274] / [i915#3637]) +7 other tests skip
   [194]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-8/igt@kms_flip@2x-nonexisting-fb.html

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

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

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-downscaling@pipe-a-valid-mode:
    - shard-dg2:          NOTRUN -> [SKIP][199] ([i915#2672]) +8 other tests skip
   [199]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-10/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-downscaling@pipe-a-valid-mode.html

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

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

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-upscaling@pipe-a-default-mode:
    - shard-mtlp:         NOTRUN -> [SKIP][202] ([i915#2672] / [i915#3555])
   [202]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-5/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-upscaling@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][203] ([i915#2672] / [i915#3555])
   [203]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-7/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode.html

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

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-blt:
    - shard-tglu:         NOTRUN -> [SKIP][205] ([fdo#109280] / [fdo#111767])
   [205]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-8/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-blt.html
    - shard-dg2:          NOTRUN -> [SKIP][206] ([fdo#111767] / [i915#5354]) +1 other test skip
   [206]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-10/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-pwrite:
    - shard-dg1:          NOTRUN -> [SKIP][207] ([fdo#111825]) +4 other tests skip
   [207]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-18/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-msflip-blt:
    - shard-rkl:          NOTRUN -> [SKIP][208] ([fdo#111825] / [i915#1825]) +36 other tests skip
   [208]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-1/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@fbc-tiling-y:
    - shard-mtlp:         NOTRUN -> [SKIP][209] ([i915#10055])
   [209]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-7/igt@kms_frontbuffer_tracking@fbc-tiling-y.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-shrfb-draw-blt:
    - shard-dg2:          NOTRUN -> [SKIP][210] ([i915#3458]) +21 other tests skip
   [210]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][211] ([i915#8708]) +21 other tests skip
   [211]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-move:
    - shard-tglu:         NOTRUN -> [SKIP][212] ([fdo#110189]) +10 other tests skip
   [212]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-5/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-move.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-mmap-gtt:
    - shard-dg1:          NOTRUN -> [SKIP][213] ([i915#8708]) +6 other tests skip
   [213]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-17/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-render:
    - shard-tglu:         NOTRUN -> [SKIP][214] ([fdo#109280]) +34 other tests skip
   [214]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-3/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcpsr-tiling-y:
    - shard-dg1:          NOTRUN -> [SKIP][215] ([i915#3458]) +1 other test skip
   [215]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-16/igt@kms_frontbuffer_tracking@fbcpsr-tiling-y.html

  * igt@kms_frontbuffer_tracking@pipe-fbc-rte:
    - shard-tglu:         NOTRUN -> [SKIP][216] ([i915#9766])
   [216]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-2/igt@kms_frontbuffer_tracking@pipe-fbc-rte.html
    - shard-dg2:          NOTRUN -> [SKIP][217] ([i915#9766])
   [217]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-6/igt@kms_frontbuffer_tracking@pipe-fbc-rte.html

  * igt@kms_frontbuffer_tracking@plane-fbc-rte:
    - shard-dg1:          NOTRUN -> [SKIP][218] ([i915#10070])
   [218]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-16/igt@kms_frontbuffer_tracking@plane-fbc-rte.html
    - shard-tglu:         NOTRUN -> [SKIP][219] ([i915#10070])
   [219]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-2/igt@kms_frontbuffer_tracking@plane-fbc-rte.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-indfb-draw-render:
    - shard-rkl:          NOTRUN -> [SKIP][220] ([i915#3023]) +24 other tests skip
   [220]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-1/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-onoff:
    - shard-rkl:          NOTRUN -> [SKIP][221] ([fdo#111767] / [fdo#111825] / [i915#1825]) +5 other tests skip
   [221]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-5/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-spr-indfb-draw-mmap-cpu:
    - shard-mtlp:         NOTRUN -> [SKIP][222] ([i915#1825]) +13 other tests skip
   [222]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-3/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-spr-indfb-draw-mmap-cpu.html

  * igt@kms_hdr@invalid-metadata-sizes:
    - shard-rkl:          NOTRUN -> [SKIP][223] ([i915#3555] / [i915#8228]) +1 other test skip
   [223]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-6/igt@kms_hdr@invalid-metadata-sizes.html

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

  * igt@kms_invalid_mode@clock-too-high@pipe-a-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][226] ([i915#9457]) +3 other tests skip
   [226]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-2/igt@kms_invalid_mode@clock-too-high@pipe-a-edp-1.html

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

  * igt@kms_panel_fitting@legacy:
    - shard-dg2:          NOTRUN -> [SKIP][228] ([i915#6301])
   [228]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-5/igt@kms_panel_fitting@legacy.html

  * igt@kms_pipe_b_c_ivb@from-pipe-c-to-b-with-3-lanes:
    - shard-dg1:          NOTRUN -> [SKIP][229] ([fdo#109289]) +1 other test skip
   [229]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-12/igt@kms_pipe_b_c_ivb@from-pipe-c-to-b-with-3-lanes.html

  * igt@kms_pipe_b_c_ivb@pipe-b-dpms-off-modeset-pipe-c:
    - shard-mtlp:         NOTRUN -> [SKIP][230] ([fdo#109289]) +2 other tests skip
   [230]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-2/igt@kms_pipe_b_c_ivb@pipe-b-dpms-off-modeset-pipe-c.html

  * igt@kms_plane_alpha_blend@alpha-transparent-fb@pipe-a-hdmi-a-1:
    - shard-glk:          NOTRUN -> [FAIL][231] ([i915#4573]) +1 other test fail
   [231]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-glk3/igt@kms_plane_alpha_blend@alpha-transparent-fb@pipe-a-hdmi-a-1.html

  * igt@kms_plane_lowres@tiling-y:
    - shard-mtlp:         NOTRUN -> [SKIP][232] ([i915#3555] / [i915#8821])
   [232]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-7/igt@kms_plane_lowres@tiling-y.html

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

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

  * igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-b-hdmi-a-1:
    - shard-tglu:         NOTRUN -> [SKIP][235] ([i915#9423]) +3 other tests skip
   [235]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-3/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-b-hdmi-a-1.html

  * igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-d-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [SKIP][236] ([i915#9423]) +11 other tests skip
   [236]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-17/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-d-hdmi-a-4.html

  * igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-b-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][237] ([i915#5176]) +5 other tests skip
   [237]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-1/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-b-edp-1.html

  * igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation@pipe-a-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][238] ([i915#5176] / [i915#9423]) +1 other test skip
   [238]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-4/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation@pipe-a-hdmi-a-1.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25@pipe-b-hdmi-a-3:
    - shard-dg1:          NOTRUN -> [SKIP][239] ([i915#5235]) +15 other tests skip
   [239]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-12/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25@pipe-b-hdmi-a-3.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][240] ([i915#5235]) +3 other tests skip
   [240]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-3/igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-a-hdmi-a-2.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-d-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][241] ([i915#5235] / [i915#9423]) +7 other tests skip
   [241]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-1/igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-d-hdmi-a-3.html

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

  * igt@kms_pm_dc@dc6-dpms:
    - shard-mtlp:         NOTRUN -> [SKIP][243] ([i915#10139])
   [243]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-2/igt@kms_pm_dc@dc6-dpms.html
    - shard-dg2:          NOTRUN -> [SKIP][244] ([i915#5978])
   [244]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-6/igt@kms_pm_dc@dc6-dpms.html

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

  * igt@kms_pm_rpm@dpms-mode-unset-non-lpsp:
    - shard-rkl:          [PASS][246] -> [SKIP][247] ([i915#9519]) +1 other test skip
   [246]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-rkl-1/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
   [247]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-5/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html

  * igt@kms_pm_rpm@modeset-pc8-residency-stress:
    - shard-mtlp:         NOTRUN -> [SKIP][248] ([fdo#109293])
   [248]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-1/igt@kms_pm_rpm@modeset-pc8-residency-stress.html

  * igt@kms_pm_rpm@pm-tiling:
    - shard-dg2:          NOTRUN -> [SKIP][249] ([i915#4077]) +16 other tests skip
   [249]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-1/igt@kms_pm_rpm@pm-tiling.html

  * igt@kms_prime@basic-crc-hybrid:
    - shard-dg2:          NOTRUN -> [SKIP][250] ([i915#6524] / [i915#6805]) +1 other test skip
   [250]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-7/igt@kms_prime@basic-crc-hybrid.html
    - shard-tglu:         NOTRUN -> [SKIP][251] ([i915#6524])
   [251]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-10/igt@kms_prime@basic-crc-hybrid.html

  * igt@kms_psr2_sf@primary-plane-update-sf-dmg-area:
    - shard-rkl:          NOTRUN -> [SKIP][252] ([fdo#111068] / [i915#9683])
   [252]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-6/igt@kms_psr2_sf@primary-plane-update-sf-dmg-area.html

  * igt@kms_psr2_su@frontbuffer-xrgb8888:
    - shard-mtlp:         NOTRUN -> [SKIP][253] ([i915#4348])
   [253]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-3/igt@kms_psr2_su@frontbuffer-xrgb8888.html

  * igt@kms_psr2_su@page_flip-p010:
    - shard-dg2:          NOTRUN -> [SKIP][254] ([i915#9683]) +5 other tests skip
   [254]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-5/igt@kms_psr2_su@page_flip-p010.html
    - shard-tglu:         NOTRUN -> [SKIP][255] ([fdo#109642] / [fdo#111068] / [i915#9683]) +1 other test skip
   [255]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-2/igt@kms_psr2_su@page_flip-p010.html

  * igt@kms_psr2_su@page_flip-xrgb8888:
    - shard-dg1:          NOTRUN -> [SKIP][256] ([fdo#111068] / [i915#9683])
   [256]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-13/igt@kms_psr2_su@page_flip-xrgb8888.html

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

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

  * igt@kms_rotation_crc@primary-rotation-90:
    - shard-mtlp:         NOTRUN -> [SKIP][259] ([i915#4235])
   [259]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-8/igt@kms_rotation_crc@primary-rotation-90.html

  * igt@kms_rotation_crc@primary-y-tiled-reflect-x-90:
    - shard-rkl:          [PASS][260] -> [ABORT][261] ([i915#8875] / [i915#9926])
   [260]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-rkl-1/igt@kms_rotation_crc@primary-y-tiled-reflect-x-90.html
   [261]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-3/igt@kms_rotation_crc@primary-y-tiled-reflect-x-90.html

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

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270:
    - shard-rkl:          NOTRUN -> [SKIP][263] ([fdo#111615] / [i915#5289])
   [263]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-6/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90:
    - shard-dg2:          NOTRUN -> [SKIP][264] ([i915#4235] / [i915#5190])
   [264]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-3/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90.html

  * igt@kms_rotation_crc@sprite-rotation-90-pos-100-0:
    - shard-dg2:          NOTRUN -> [SKIP][265] ([i915#4235]) +2 other tests skip
   [265]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-2/igt@kms_rotation_crc@sprite-rotation-90-pos-100-0.html

  * igt@kms_setmode@basic@pipe-a-vga-1-pipe-b-hdmi-a-1:
    - shard-snb:          NOTRUN -> [FAIL][266] ([i915#5465]) +3 other tests fail
   [266]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-snb7/igt@kms_setmode@basic@pipe-a-vga-1-pipe-b-hdmi-a-1.html

  * igt@kms_tiled_display@basic-test-pattern-with-chamelium:
    - shard-rkl:          NOTRUN -> [SKIP][267] ([i915#8623]) +1 other test skip
   [267]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-6/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-b-hdmi-a-1:
    - shard-snb:          [PASS][268] -> [FAIL][269] ([i915#9196])
   [268]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-snb4/igt@kms_universal_plane@cursor-fb-leak@pipe-b-hdmi-a-1.html
   [269]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-snb7/igt@kms_universal_plane@cursor-fb-leak@pipe-b-hdmi-a-1.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-c-edp-1:
    - shard-mtlp:         NOTRUN -> [FAIL][270] ([i915#9196])
   [270]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-8/igt@kms_universal_plane@cursor-fb-leak@pipe-c-edp-1.html

  * igt@kms_vrr@flip-basic:
    - shard-dg1:          NOTRUN -> [SKIP][271] ([i915#3555])
   [271]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-12/igt@kms_vrr@flip-basic.html

  * igt@kms_vrr@flip-basic-fastset:
    - shard-dg2:          NOTRUN -> [SKIP][272] ([i915#9906])
   [272]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-2/igt@kms_vrr@flip-basic-fastset.html
    - shard-rkl:          NOTRUN -> [SKIP][273] ([i915#9906])
   [273]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-4/igt@kms_vrr@flip-basic-fastset.html

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

  * igt@kms_writeback@writeback-pixel-formats:
    - shard-glk:          NOTRUN -> [SKIP][275] ([fdo#109271] / [i915#2437]) +2 other tests skip
   [275]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-glk2/igt@kms_writeback@writeback-pixel-formats.html

  * igt@perf@global-sseu-config:
    - shard-mtlp:         NOTRUN -> [SKIP][276] ([i915#7387])
   [276]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-5/igt@perf@global-sseu-config.html

  * igt@perf_pmu@busy-double-start@ccs0:
    - shard-mtlp:         NOTRUN -> [FAIL][277] ([i915#4349])
   [277]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-7/igt@perf_pmu@busy-double-start@ccs0.html

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

  * igt@perf_pmu@event-wait@rcs0:
    - shard-dg2:          NOTRUN -> [SKIP][279] ([fdo#112283])
   [279]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-1/igt@perf_pmu@event-wait@rcs0.html

  * igt@perf_pmu@module-unload:
    - shard-dg2:          NOTRUN -> [FAIL][280] ([i915#5793])
   [280]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-10/igt@perf_pmu@module-unload.html

  * igt@prime_vgem@basic-fence-mmap:
    - shard-mtlp:         NOTRUN -> [SKIP][281] ([i915#3708] / [i915#4077])
   [281]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-8/igt@prime_vgem@basic-fence-mmap.html

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

  * igt@prime_vgem@basic-read:
    - shard-dg2:          NOTRUN -> [SKIP][283] ([i915#3291] / [i915#3708])
   [283]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-7/igt@prime_vgem@basic-read.html

  * igt@prime_vgem@coherency-gtt:
    - shard-rkl:          NOTRUN -> [SKIP][284] ([fdo#109295] / [fdo#111656] / [i915#3708])
   [284]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-4/igt@prime_vgem@coherency-gtt.html

  * igt@prime_vgem@fence-write-hang:
    - shard-dg2:          NOTRUN -> [SKIP][285] ([i915#3708])
   [285]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-2/igt@prime_vgem@fence-write-hang.html

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

  * igt@sriov_basic@enable-vfs-autoprobe-on:
    - shard-dg2:          NOTRUN -> [SKIP][287] ([i915#9917]) +1 other test skip
   [287]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-3/igt@sriov_basic@enable-vfs-autoprobe-on.html

  * igt@sriov_basic@enable-vfs-bind-unbind-each:
    - shard-tglu:         NOTRUN -> [SKIP][288] ([i915#9917])
   [288]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-10/igt@sriov_basic@enable-vfs-bind-unbind-each.html

  * igt@syncobj_timeline@invalid-wait-zero-handles:
    - shard-dg2:          NOTRUN -> [FAIL][289] ([i915#9781])
   [289]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-2/igt@syncobj_timeline@invalid-wait-zero-handles.html

  * igt@syncobj_wait@invalid-wait-zero-handles:
    - shard-rkl:          NOTRUN -> [FAIL][290] ([i915#9779])
   [290]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-6/igt@syncobj_wait@invalid-wait-zero-handles.html

  * igt@v3d/v3d_get_param@get-bad-flags:
    - shard-mtlp:         NOTRUN -> [SKIP][291] ([i915#2575]) +6 other tests skip
   [291]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-5/igt@v3d/v3d_get_param@get-bad-flags.html

  * igt@v3d/v3d_job_submission@array-job-submission:
    - shard-dg1:          NOTRUN -> [SKIP][292] ([i915#2575]) +3 other tests skip
   [292]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-13/igt@v3d/v3d_job_submission@array-job-submission.html

  * igt@v3d/v3d_submit_cl@bad-multisync-out-sync:
    - shard-dg2:          NOTRUN -> [SKIP][293] ([i915#2575]) +13 other tests skip
   [293]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-10/igt@v3d/v3d_submit_cl@bad-multisync-out-sync.html

  * igt@v3d/v3d_submit_cl@simple-flush-cache:
    - shard-rkl:          NOTRUN -> [SKIP][294] ([fdo#109315]) +12 other tests skip
   [294]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-6/igt@v3d/v3d_submit_cl@simple-flush-cache.html

  * igt@v3d/v3d_submit_csd@multi-and-single-sync:
    - shard-snb:          NOTRUN -> [SKIP][295] ([fdo#109271]) +42 other tests skip
   [295]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-snb4/igt@v3d/v3d_submit_csd@multi-and-single-sync.html
    - shard-tglu:         NOTRUN -> [SKIP][296] ([fdo#109315] / [i915#2575]) +9 other tests skip
   [296]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-2/igt@v3d/v3d_submit_csd@multi-and-single-sync.html

  * igt@vc4/vc4_perfmon@get-values-invalid-perfmon:
    - shard-dg2:          NOTRUN -> [SKIP][297] ([i915#7711]) +9 other tests skip
   [297]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-1/igt@vc4/vc4_perfmon@get-values-invalid-perfmon.html

  * igt@vc4/vc4_tiling@set-bad-flags:
    - shard-tglu:         NOTRUN -> [SKIP][298] ([i915#2575]) +5 other tests skip
   [298]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-2/igt@vc4/vc4_tiling@set-bad-flags.html

  * igt@vc4/vc4_tiling@set-bad-modifier:
    - shard-rkl:          NOTRUN -> [SKIP][299] ([i915#7711]) +8 other tests skip
   [299]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-1/igt@vc4/vc4_tiling@set-bad-modifier.html

  * igt@vc4/vc4_wait_bo@used-bo-0ns:
    - shard-mtlp:         NOTRUN -> [SKIP][300] ([i915#7711]) +3 other tests skip
   [300]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-6/igt@vc4/vc4_wait_bo@used-bo-0ns.html

  * igt@vc4/vc4_wait_seqno@bad-seqno-1ns:
    - shard-dg1:          NOTRUN -> [SKIP][301] ([i915#7711]) +1 other test skip
   [301]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-12/igt@vc4/vc4_wait_seqno@bad-seqno-1ns.html

  
#### Possible fixes ####

  * igt@drm_buddy@drm_buddy@drm_test_buddy_alloc_limit:
    - shard-tglu:         [DMESG-WARN][302] ([i915#10140]) -> [PASS][303] +1 other test pass
   [302]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-tglu-7/igt@drm_buddy@drm_buddy@drm_test_buddy_alloc_limit.html
   [303]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-2/igt@drm_buddy@drm_buddy@drm_test_buddy_alloc_limit.html
    - shard-glk:          [DMESG-WARN][304] ([i915#10140]) -> [PASS][305] +1 other test pass
   [304]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-glk1/igt@drm_buddy@drm_buddy@drm_test_buddy_alloc_limit.html
   [305]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-glk3/igt@drm_buddy@drm_buddy@drm_test_buddy_alloc_limit.html
    - shard-mtlp:         [DMESG-WARN][306] ([i915#10140]) -> [PASS][307] +1 other test pass
   [306]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-mtlp-4/igt@drm_buddy@drm_buddy@drm_test_buddy_alloc_limit.html
   [307]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-1/igt@drm_buddy@drm_buddy@drm_test_buddy_alloc_limit.html
    - shard-rkl:          [DMESG-WARN][308] ([i915#10140]) -> [PASS][309] +1 other test pass
   [308]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-rkl-5/igt@drm_buddy@drm_buddy@drm_test_buddy_alloc_limit.html
   [309]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-5/igt@drm_buddy@drm_buddy@drm_test_buddy_alloc_limit.html

  * igt@drm_fdinfo@context-close-stress:
    - shard-rkl:          [ABORT][310] ([i915#10154]) -> [PASS][311]
   [310]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-rkl-1/igt@drm_fdinfo@context-close-stress.html
   [311]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-2/igt@drm_fdinfo@context-close-stress.html

  * igt@drm_mm@drm_mm@drm_test_mm_init:
    - shard-dg1:          [DMESG-WARN][312] ([i915#10140]) -> [PASS][313] +1 other test pass
   [312]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-dg1-15/igt@drm_mm@drm_mm@drm_test_mm_init.html
   [313]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-19/igt@drm_mm@drm_mm@drm_test_mm_init.html
    - shard-snb:          [DMESG-WARN][314] ([i915#10140]) -> [PASS][315] +1 other test pass
   [314]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-snb6/igt@drm_mm@drm_mm@drm_test_mm_init.html
   [315]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-snb2/igt@drm_mm@drm_mm@drm_test_mm_init.html

  * igt@gem_ccs@suspend-resume@linear-compressed-compfmt0-lmem0-lmem0:
    - shard-dg2:          [INCOMPLETE][316] ([i915#7297]) -> [PASS][317]
   [316]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-dg2-2/igt@gem_ccs@suspend-resume@linear-compressed-compfmt0-lmem0-lmem0.html
   [317]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-7/igt@gem_ccs@suspend-resume@linear-compressed-compfmt0-lmem0-lmem0.html

  * igt@gem_eio@kms:
    - shard-dg2:          [FAIL][318] ([i915#5784]) -> [PASS][319]
   [318]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-dg2-7/igt@gem_eio@kms.html
   [319]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-7/igt@gem_eio@kms.html

  * igt@gem_eio@unwedge-stress:
    - shard-dg1:          [FAIL][320] ([i915#5784]) -> [PASS][321]
   [320]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-dg1-17/igt@gem_eio@unwedge-stress.html
   [321]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-13/igt@gem_eio@unwedge-stress.html

  * igt@gem_exec_fair@basic-pace@vecs0:
    - shard-rkl:          [FAIL][322] ([i915#2842]) -> [PASS][323] +2 other tests pass
   [322]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-rkl-7/igt@gem_exec_fair@basic-pace@vecs0.html
   [323]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-3/igt@gem_exec_fair@basic-pace@vecs0.html

  * igt@gem_exec_gttfill@engines@vcs0:
    - shard-glk:          [INCOMPLETE][324] ([i915#10137]) -> [PASS][325]
   [324]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-glk5/igt@gem_exec_gttfill@engines@vcs0.html
   [325]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-glk4/igt@gem_exec_gttfill@engines@vcs0.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-snb:          [INCOMPLETE][326] ([i915#10137] / [i915#9200] / [i915#9849]) -> [PASS][327]
   [326]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-snb5/igt@i915_module_load@reload-with-fault-injection.html
   [327]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-snb6/igt@i915_module_load@reload-with-fault-injection.html

  * igt@i915_pm_rc6_residency@rc6-idle@gt0-vcs0:
    - shard-dg1:          [FAIL][328] ([i915#3591]) -> [PASS][329]
   [328]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-dg1-14/igt@i915_pm_rc6_residency@rc6-idle@gt0-vcs0.html
   [329]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-17/igt@i915_pm_rc6_residency@rc6-idle@gt0-vcs0.html

  * igt@i915_suspend@basic-s3-without-i915:
    - shard-snb:          [INCOMPLETE][330] ([i915#10044]) -> [PASS][331]
   [330]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-snb5/igt@i915_suspend@basic-s3-without-i915.html
   [331]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-snb1/igt@i915_suspend@basic-s3-without-i915.html

  * igt@kms_addfb_basic@basic:
    - shard-dg1:          [DMESG-WARN][332] ([i915#4423]) -> [PASS][333]
   [332]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-dg1-16/igt@kms_addfb_basic@basic.html
   [333]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-19/igt@kms_addfb_basic@basic.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip:
    - shard-mtlp:         [FAIL][334] ([i915#5138]) -> [PASS][335]
   [334]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-mtlp-3/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html
   [335]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-7/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html

  * igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
    - shard-tglu:         [FAIL][336] ([i915#3743]) -> [PASS][337] +1 other test pass
   [336]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-tglu-9/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
   [337]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-8/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html

  * igt@kms_cursor_legacy@cursorb-vs-flipa-legacy:
    - shard-snb:          [SKIP][338] ([fdo#109271]) -> [PASS][339] +9 other tests pass
   [338]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-snb6/igt@kms_cursor_legacy@cursorb-vs-flipa-legacy.html
   [339]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-snb7/igt@kms_cursor_legacy@cursorb-vs-flipa-legacy.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions:
    - shard-glk:          [FAIL][340] ([i915#2346]) -> [PASS][341]
   [340]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-glk1/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html
   [341]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-glk4/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ac-hdmi-a1-hdmi-a2:
    - shard-glk:          [FAIL][342] ([i915#79]) -> [PASS][343]
   [342]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-glk7/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ac-hdmi-a1-hdmi-a2.html
   [343]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-glk1/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ac-hdmi-a1-hdmi-a2.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-msflip-blt:
    - shard-dg2:          [FAIL][344] ([i915#6880]) -> [PASS][345]
   [344]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-dg2-6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-msflip-blt.html
   [345]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-7/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@fbc-rgb565-draw-render:
    - shard-dg1:          [DMESG-WARN][346] ([i915#1982] / [i915#4423]) -> [PASS][347]
   [346]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-dg1-16/igt@kms_frontbuffer_tracking@fbc-rgb565-draw-render.html
   [347]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-18/igt@kms_frontbuffer_tracking@fbc-rgb565-draw-render.html

  * igt@kms_pm_dc@dc9-dpms:
    - shard-tglu:         [SKIP][348] ([i915#4281]) -> [PASS][349]
   [348]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-tglu-8/igt@kms_pm_dc@dc9-dpms.html
   [349]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-10/igt@kms_pm_dc@dc9-dpms.html

  * igt@kms_pm_rpm@dpms-lpsp:
    - shard-dg2:          [SKIP][350] ([i915#9519]) -> [PASS][351]
   [350]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-dg2-1/igt@kms_pm_rpm@dpms-lpsp.html
   [351]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-10/igt@kms_pm_rpm@dpms-lpsp.html

  * igt@kms_pm_rpm@i2c:
    - shard-dg2:          [FAIL][352] ([i915#8717]) -> [PASS][353]
   [352]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-dg2-2/igt@kms_pm_rpm@i2c.html
   [353]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-5/igt@kms_pm_rpm@i2c.html

  * igt@kms_pm_rpm@modeset-non-lpsp-stress:
    - shard-rkl:          [SKIP][354] ([i915#9519]) -> [PASS][355]
   [354]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-rkl-7/igt@kms_pm_rpm@modeset-non-lpsp-stress.html
   [355]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-1/igt@kms_pm_rpm@modeset-non-lpsp-stress.html

  * {igt@kms_psr@psr2-cursor-plane-move@edp-1}:
    - shard-mtlp:         [FAIL][356] -> [PASS][357]
   [356]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-mtlp-1/igt@kms_psr@psr2-cursor-plane-move@edp-1.html
   [357]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-6/igt@kms_psr@psr2-cursor-plane-move@edp-1.html

  * igt@kms_rotation_crc@sprite-rotation-90-pos-100-0:
    - shard-rkl:          [ABORT][358] ([i915#8875]) -> [PASS][359]
   [358]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-rkl-3/igt@kms_rotation_crc@sprite-rotation-90-pos-100-0.html
   [359]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-4/igt@kms_rotation_crc@sprite-rotation-90-pos-100-0.html

  * igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_build_fourcc_list:
    - shard-dg1:          [FAIL][360] ([i915#10136]) -> [PASS][361]
   [360]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-dg1-12/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_build_fourcc_list.html
   [361]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-12/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_build_fourcc_list.html
    - shard-snb:          [FAIL][362] ([i915#10136]) -> [PASS][363]
   [362]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-snb2/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_build_fourcc_list.html
   [363]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-snb1/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_build_fourcc_list.html
    - shard-tglu:         [DMESG-FAIL][364] ([i915#10143]) -> [PASS][365]
   [364]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-tglu-6/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_build_fourcc_list.html
   [365]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-7/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_build_fourcc_list.html
    - shard-glk:          [FAIL][366] ([i915#10136]) -> [PASS][367]
   [366]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-glk9/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_build_fourcc_list.html
   [367]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-glk7/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_build_fourcc_list.html
    - shard-mtlp:         [DMESG-FAIL][368] ([i915#10143]) -> [PASS][369]
   [368]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-mtlp-5/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_build_fourcc_list.html
   [369]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-5/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_build_fourcc_list.html
    - shard-dg2:          [FAIL][370] ([i915#10136]) -> [PASS][371]
   [370]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-dg2-7/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_build_fourcc_list.html
   [371]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-1/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_build_fourcc_list.html

  * igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_clip_offset:
    - shard-tglu:         [DMESG-WARN][372] ([i915#10143]) -> [PASS][373]
   [372]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-tglu-6/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_clip_offset.html
   [373]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-7/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_clip_offset.html
    - shard-mtlp:         [DMESG-WARN][374] ([i915#10143]) -> [PASS][375]
   [374]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-mtlp-5/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_clip_offset.html
   [375]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-5/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_clip_offset.html

  * igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_swab:
    - shard-dg1:          [DMESG-WARN][376] ([i915#10143]) -> [PASS][377] +1 other test pass
   [376]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-dg1-12/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_swab.html
   [377]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-12/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_swab.html
    - shard-snb:          [DMESG-WARN][378] ([i915#10143]) -> [PASS][379] +1 other test pass
   [378]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-snb2/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_swab.html
   [379]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-snb1/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_swab.html
    - shard-glk:          [DMESG-WARN][380] ([i915#10143] / [i915#10165]) -> [PASS][381] +1 other test pass
   [380]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-glk9/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_swab.html
   [381]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-glk7/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_swab.html

  * igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_xrgb8888_to_abgr8888:
    - shard-dg2:          [DMESG-WARN][382] ([i915#10143]) -> [PASS][383] +1 other test pass
   [382]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-dg2-7/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_xrgb8888_to_abgr8888.html
   [383]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg2-1/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_xrgb8888_to_abgr8888.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-1:
    - shard-tglu:         [FAIL][384] ([i915#9196]) -> [PASS][385]
   [384]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-tglu-10/igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-1.html
   [385]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-4/igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-1.html

  * igt@kms_vblank@ts-continuation-dpms-suspend@pipe-d-hdmi-a-1:
    - shard-tglu:         [ABORT][386] -> [PASS][387] +1 other test pass
   [386]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-tglu-9/igt@kms_vblank@ts-continuation-dpms-suspend@pipe-d-hdmi-a-1.html
   [387]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-10/igt@kms_vblank@ts-continuation-dpms-suspend@pipe-d-hdmi-a-1.html

  * igt@perf_pmu@busy-idle-check-all@bcs0:
    - shard-mtlp:         [FAIL][388] ([i915#4349]) -> [PASS][389] +4 other tests pass
   [388]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-mtlp-8/igt@perf_pmu@busy-idle-check-all@bcs0.html
   [389]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-mtlp-2/igt@perf_pmu@busy-idle-check-all@bcs0.html

  * igt@perf_pmu@busy-idle-check-all@vcs0:
    - shard-dg1:          [FAIL][390] ([i915#4349]) -> [PASS][391] +4 other tests pass
   [390]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-dg1-19/igt@perf_pmu@busy-idle-check-all@vcs0.html
   [391]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-19/igt@perf_pmu@busy-idle-check-all@vcs0.html

  
#### Warnings ####

  * igt@gem_pread@exhaustion:
    - shard-glk:          [INCOMPLETE][392] ([i915#10042] / [i915#10137]) -> [WARN][393] ([i915#2658])
   [392]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-glk4/igt@gem_pread@exhaustion.html
   [393]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-glk6/igt@gem_pread@exhaustion.html

  * igt@gem_pwrite@basic-exhaustion:
    - shard-tglu:         [WARN][394] ([i915#2658]) -> [INCOMPLETE][395] ([i915#10042] / [i915#10137])
   [394]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-tglu-10/igt@gem_pwrite@basic-exhaustion.html
   [395]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-tglu-7/igt@gem_pwrite@basic-exhaustion.html
    - shard-glk:          [WARN][396] ([i915#2658]) -> [INCOMPLETE][397] ([i915#10042] / [i915#10137])
   [396]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-glk3/igt@gem_pwrite@basic-exhaustion.html
   [397]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-glk7/igt@gem_pwrite@basic-exhaustion.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-dg1:          [INCOMPLETE][398] ([i915#10137] / [i915#9820] / [i915#9849]) -> [ABORT][399] ([i915#9820])
   [398]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-dg1-17/igt@i915_module_load@reload-with-fault-injection.html
   [399]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-dg1-13/igt@i915_module_load@reload-with-fault-injection.html

  * igt@kms_content_protection@atomic-dpms:
    - shard-snb:          [INCOMPLETE][400] ([i915#8816]) -> [SKIP][401] ([fdo#109271])
   [400]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-snb7/igt@kms_content_protection@atomic-dpms.html
   [401]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-snb6/igt@kms_content_protection@atomic-dpms.html

  * igt@kms_fbcon_fbt@psr-suspend:
    - shard-rkl:          [SKIP][402] ([fdo#110189] / [i915#3955]) -> [SKIP][403] ([i915#3955])
   [402]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-rkl-2/igt@kms_fbcon_fbt@psr-suspend.html
   [403]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-rkl-6/igt@kms_fbcon_fbt@psr-suspend.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-cur-indfb-draw-render:
    - shard-snb:          [SKIP][404] ([fdo#109271]) -> [SKIP][405] ([fdo#109271] / [fdo#111767])
   [404]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-snb7/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-cur-indfb-draw-render.html
   [405]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-snb2/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-cur-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-pwrite:
    - shard-snb:          [SKIP][406] ([fdo#109271] / [fdo#111767]) -> [SKIP][407] ([fdo#109271]) +2 other tests skip
   [406]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7699/shard-snb6/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-pwrite.html
   [407]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/shard-snb7/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-pwrite.html

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

  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
  [fdo#109279]: https://bugs.freedesktop.org/show_bug.cgi?id=109279
  [fdo#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280
  [fdo#109283]: https://bugs.freedesktop.org/show_bug.cgi?id=109283
  [fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
  [fdo#109293]: https://bugs.freedesktop.org/show_bug.cgi?id=109293
  [fdo#109295]: https://bugs.freedesktop.org/show_bug.cgi?id=109295
  [fdo#109313]: https://bugs.freedesktop.org/show_bug.cgi?id=109313
  [fdo#109314]: https://bugs.freedesktop.org/show_bug.cgi?id=109314
  [fdo#109315]: https://bugs.freedesktop.org/show_bug.cgi?id=109315
  [fdo#109642]: https://bugs.freedesktop.org/show_bug.cgi?id=109642
  [fdo#110189]: https://bugs.freedesktop.org/show_bug.cgi?id=110189
  [fdo#110542]: https://bugs.freedesktop.org/show_bug.cgi?id=110542
  [fdo#110723]: https://bugs.freedesktop.org/show_bug.cgi?id=110723
  [fdo#111068]: https://bugs.freedesktop.org/show_bug.cgi?id=111068
  [fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614
  [fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615
  [fdo#111656]: https://bugs.freedesktop.org/show_bug.cgi?id=111656
  [fdo#111767]: https://bugs.freedesktop.org/show_bug.cgi?id=111767
  [fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
  [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
  [fdo#112283]: https://bugs.freedesktop.org/show_bug.cgi?id=112283
  [i915#10030]: https://gitlab.freedesktop.org/drm/intel/issues/10030
  [i915#10042]: https://gitlab.freedesktop.org/drm/intel/issues/10042
  [i915#10044]: https://gitlab.freedesktop.org/drm/intel/issues/10044
  [i915#10055]: https://gitlab.freedesktop.org/drm/intel/issues/10055
  [i915#10070]: https://gitlab.freedesktop.org/drm/intel/issues/10070
  [i915#10136]: https://gitlab.freedesktop.org/drm/intel/issues/10136
  [i915#10137]: https://gitlab.freedesktop.org/drm/intel/issues/10137
  [i915#10139]: https://gitlab.freedesktop.org/drm/intel/issues/10139
  [i915#10140]: https://gitlab.freedesktop.org/drm/intel/issues/10140
  [i915#10143]: https://gitlab.freedesktop.org/drm/intel/issues/10143
  [i915#10154]: https://gitlab.freedesktop.org/drm/intel/issues/10154
  [i915#10165]: https://gitlab.freedesktop.org/drm/intel/issues/10165
  [i915#10166]: https://gitlab.freedesktop.org/drm/intel/issues/10166
  [i915#10173]: https://gitlab.freedesktop.org/drm/intel/issues/10173
  [i915#1099]: https://gitlab.freedesktop.org/drm/intel/issues/1099
  [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#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982
  [i915#2065]: https://gitlab.freedesktop.org/drm/intel/issues/2065
  [i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346
  [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#2658]: https://gitlab.freedesktop.org/drm/intel/issues/2658
  [i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
  [i915#2705]: https://gitlab.freedesktop.org/drm/intel/issues/2705
  [i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280
  [i915#284]: https://gitlab.freedesktop.org/drm/intel/issues/284
  [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#3323]: https://gitlab.freedesktop.org/drm/intel/issues/3323
  [i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
  [i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458
  [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#3742]: https://gitlab.freedesktop.org/drm/intel/issues/3742
  [i915#3743]: https://gitlab.freedesktop.org/drm/intel/issues/3743
  [i915#3804]: https://gitlab.freedesktop.org/drm/intel/issues/3804
  [i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840
  [i915#3955]: https://gitlab.freedesktop.org/drm/intel/issues/3955
  [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#4087]: https://gitlab.freedesktop.org/drm/intel/issues/4087
  [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#4281]: https://gitlab.freedesktop.org/drm/intel/issues/4281
  [i915#4

== Logs ==

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

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

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

* Re: Re: ✗ CI.xeBAT: failure for lib/kunit: Support writable filter* parameters of kunit module (rev2)
  2024-01-31 19:22   ` Janusz Krzysztofik
@ 2024-01-31 20:51     ` Lucas De Marchi
  2024-02-01 11:06       ` Janusz Krzysztofik
  0 siblings, 1 reply; 41+ messages in thread
From: Lucas De Marchi @ 2024-01-31 20:51 UTC (permalink / raw)
  To: Janusz Krzysztofik; +Cc: igt-dev, intel-xe

On Wed, Jan 31, 2024 at 08:22:35PM +0100, Janusz Krzysztofik wrote:
>On Wednesday, 31 January 2024 19:36:57 CET Patchwork wrote:
>> == Series Details ==
>>
>> Series: lib/kunit: Support writable filter* parameters of kunit module
>(rev2)
>> URL   : https://patchwork.freedesktop.org/series/129174/
>> State : failure
>>
>> == Summary ==
>>
>> CI Bug Log - changes from XEIGT_7699_BAT -> XEIGTPW_10613_BAT
>> ====================================================
>>
>> Summary
>> -------
>>
>>   **FAILURE**
>>
>>   Serious unknown changes coming with XEIGTPW_10613_BAT absolutely need to
>be
>>   verified manually.
>>
>>   If you think the reported changes have nothing to do with the changes
>>   introduced in XEIGTPW_10613_BAT, please notify your bug team (I915-ci-
>infra@lists.freedesktop.org) to allow them
>>   to document this new failure mode, which will reduce false positives in
>CI.
>>
>>
>>
>> Participating hosts (4 -> 4)
>> ------------------------------
>>
>>   No changes in participating hosts
>>
>> Possible new issues
>> -------------------
>>
>>   Here are the unknown changes that may have been introduced in
>XEIGTPW_10613_BAT:
>>
>> ### IGT changes ###
>>
>> #### Possible regressions ####
>>
>>   * igt@xe_live_ktest@bo:
>>     - bat-adlp-7:         [PASS][1] -> [SKIP][2] +2 other tests skip
>>    [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-adlp-7/
>igt@xe_live_ktest@bo.html
>>    [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-adlp-7/
>igt@xe_live_ktest@bo.html
>
>Hi Lucas,
>
>We've got an empty list of test cases because the current algorithm of IGT
>KUnit implementation expects subtest name provided via struct kunit_tests
>to be the same as name of a test suite provided by the KUnit test module.  As
>a special case, if the module provides only one test suite (most do) and the
>name of it is the same as the module name with the _test or _kunit suffix
>truncated (also the most common case) then subtest name may be omitted (i.e.,
>.name field may be NULL).
>
>I have to document the above, but we also have to use the same names on both
>sides (KUnit test module and its corresponding IGT test).  Now we don't, e.g.
>test suite named "xe_bo" is provided by xe_bo_test module while subtest name
>"bo" is specified for that module in IGT xe_live_ktest.

in the end we want to have only one module: xe_live_test.ko and then
filter out by the testunit. From what I've seen previously in igt, it
would be a matter of always reloading the same module, but passing a
different name.

Lucas De Marchi

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

* Re: [PATCH i-g-t v2 3/6] lib/kunit: Unload base KUnit module only before reloading it
  2024-01-31 18:03   ` Janusz Krzysztofik
@ 2024-01-31 22:46     ` Lucas De Marchi
  -1 siblings, 0 replies; 41+ messages in thread
From: Lucas De Marchi @ 2024-01-31 22:46 UTC (permalink / raw)
  To: Janusz Krzysztofik; +Cc: igt-dev, Kamil Konieczny, intel-xe

On Wed, Jan 31, 2024 at 07:03:50PM +0100, Janusz Krzysztofik wrote:
>In preparation for replacement of the current method of reloading base
>KUnit module when a new set of module parameters is needed with updating
>those parameters via sysfs, unload the module right before it is now
>reloaded with new parameters, and stop unloading it in other places.
>Follow-up patches will remove some of the code added here, but even then
>they will be shorter and more clean with that adjustment already in place.
>
>Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
>---
> lib/igt_kmod.c | 23 ++++++++++++-----------
> 1 file changed, 12 insertions(+), 11 deletions(-)
>
>diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
>index d1091bdc79..d2c28d0a64 100644
>--- a/lib/igt_kmod.c
>+++ b/lib/igt_kmod.c
>@@ -1130,6 +1130,7 @@ static void kunit_get_tests(struct igt_list_head *tests,
> 	 * iterating over KTAP results collected from blind execution of all
> 	 * Kunit test cases provided by a Kunit test module.
> 	 */
>+	igt_ignore_warn(igt_kmod_unload("kunit", KMOD_REMOVE_FORCE));

with the rw params, we should be able to run with a built-in kunit. Will
we be able to with this call here?

Lucas De Marchi

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

* Re: [PATCH i-g-t v2 3/6] lib/kunit: Unload base KUnit module only before reloading it
@ 2024-01-31 22:46     ` Lucas De Marchi
  0 siblings, 0 replies; 41+ messages in thread
From: Lucas De Marchi @ 2024-01-31 22:46 UTC (permalink / raw)
  To: Janusz Krzysztofik; +Cc: igt-dev, intel-xe

On Wed, Jan 31, 2024 at 07:03:50PM +0100, Janusz Krzysztofik wrote:
>In preparation for replacement of the current method of reloading base
>KUnit module when a new set of module parameters is needed with updating
>those parameters via sysfs, unload the module right before it is now
>reloaded with new parameters, and stop unloading it in other places.
>Follow-up patches will remove some of the code added here, but even then
>they will be shorter and more clean with that adjustment already in place.
>
>Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
>---
> lib/igt_kmod.c | 23 ++++++++++++-----------
> 1 file changed, 12 insertions(+), 11 deletions(-)
>
>diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
>index d1091bdc79..d2c28d0a64 100644
>--- a/lib/igt_kmod.c
>+++ b/lib/igt_kmod.c
>@@ -1130,6 +1130,7 @@ static void kunit_get_tests(struct igt_list_head *tests,
> 	 * iterating over KTAP results collected from blind execution of all
> 	 * Kunit test cases provided by a Kunit test module.
> 	 */
>+	igt_ignore_warn(igt_kmod_unload("kunit", KMOD_REMOVE_FORCE));

with the rw params, we should be able to run with a built-in kunit. Will
we be able to with this call here?

Lucas De Marchi

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

* Re: [PATCH i-g-t v2 4/6] lib/kunit: Support writable filter* parameters of kunit module
  2024-01-31 18:03   ` Janusz Krzysztofik
@ 2024-02-01  1:01     ` Lucas De Marchi
  -1 siblings, 0 replies; 41+ messages in thread
From: Lucas De Marchi @ 2024-02-01  1:01 UTC (permalink / raw)
  To: Janusz Krzysztofik; +Cc: igt-dev, Kamil Konieczny, intel-xe

On Wed, Jan 31, 2024 at 07:03:51PM +0100, Janusz Krzysztofik wrote:
>Instead of wasting resources on reloading the base Kunit module each time
>a different set of filter parameters is needed, try to write the required
>values to sysfs representation of those parameters.  If that fails (e.g.
>on older LTS kernels with read-only filter parameters), fall back to
>legacy "no list of test cases available" mode as we do on kernels with
>those module parameters not supported at all.
>
>This modification will also serve as a workaround for the issue of
>impossibility to unload the base Kunit module on Xe platforms, available
>to IGT as soon as the module supports writable filter parameters.
>
>v2: Work around ineffective writes of empty strings to sysfs module
>    parameter files (Lucas) by using human readable non-empty strings that
>    give the same results as default NULLs,
>  - drop fallback to reload of base Kunit module method if assigning new
>    values to module parameters via sysfs fails (Lucas), instead use the
>    existing fallback to blind execution like if getting a list of test
>    cases was not supported at all,
>  - split move of open_parameters() helper up in the source file as well
>    as cleanup of base KUnit module unloading to separate patches (Kamil),
>  - address the issue of the second paragraph of commit description
>    suggesting two separate changes combined in one patch (Kamil) by
>    rewording the description.
>
>Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>
>---
> lib/igt_kmod.c | 114 ++++++++++++++++++++++++++++++++++++-------------
> 1 file changed, 84 insertions(+), 30 deletions(-)
>
>diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
>index d2c28d0a64..1d57ea708d 100644
>--- a/lib/igt_kmod.c
>+++ b/lib/igt_kmod.c
>@@ -811,6 +811,56 @@ static int open_parameters(const char *module_name)
> 	return open(path, O_RDONLY);
> }
>
>+static const char *kunit_params[3] = {
>+	"filter_glob", "filter", "filter_action",
>+};
>+
>+static bool kunit_set_params(const char **values)
>+{
>+	/*
>+	 * Reapplying default NULLs to module parameters via sysfs seems not
>+	 * possible, and applying empty strings doesn't work as expected,
>+	 * leaving current values untouched.  As a workaround, use
>+	 * human-readable non-empty strings that exhibit the same behaviour
>+	 * as if default NULLs were in place.  In case of filter_action
>+	 * parameter there is no such obvious non-empty string, however,
>+	 * that's not a problem for us since even if it was previously set
>+	 * to "skip" and we leave it as is, our "module!=none" default filter
>+	 * guarantees that no test cases are filtered out to be skipped.
>+	 */
>+	const char *defaults[ARRAY_SIZE(kunit_params)] = {
>+	     /* filter_glob, filter,	     filter_action */
>+		"*",	     "module!=none", "",
>+	};
>+	int i, params;
>+	bool ret;
>+
>+	params = open_parameters("kunit");
>+	ret = !igt_debug_on(params < 0);
>+
>+	for (i = 0; ret && i < ARRAY_SIZE(kunit_params); i++) {
>+		char *param = igt_sysfs_get(params, kunit_params[i]);

why do we read-modify-write? I'd rather just write the values. An
optimization by checking previous value belongs in the kernel, when it
makes an actual difference. Something like this (but with error
handling):

	int dirfd = open("/sys/modules/kunit/parameters", O_RDONLY);
	igt_sysfs_set(dirfd, "filter_glob", ...);
	igt_sysfs_set(dirfd, "filter", ...);
	igt_sysfs_set(dirfd, "filter_action", ...);
	close(dirfd);

an abstraction could better be something like:

	igt_sysfs_set_all("/sys/modules/kunit/parameters",
			  attr1, val1,
			  attr2, val2,
			  attr3, val2,
			  NULL);
>+
>+		if (igt_debug_on_f(!param, "param: %s\n", kunit_params[i])) {
>+			ret = false;
>+			break;
>+		}
>+
>+		ret = !strcmp(param, values[i] ?: defaults[i]);
>+		free(param);
>+		if (!ret)
>+			ret = !igt_debug_on(!igt_sysfs_set(params,
>+							   kunit_params[i],
>+							   values[i] ?:
>+							   defaults[i]));


filter_action is "". How does this fix the issue of writing a 0-length
string? If we try to go back and forth between "skip" and "", this will
fail.  A workaround would be to make defaults above to be something else
like "run", but we should really fix this in igt.  I'm submitting a
patch for that.

Lucas de Marchi

>+	}
>+
>+	if (params >= 0)
>+		close(params);
>+
>+	return ret;
>+}
>+
> struct modprobe_data {
> 	struct kmod_module *kmod;
> 	const char *opts;
>@@ -1100,6 +1150,18 @@ static void kunit_get_tests(struct igt_list_head *tests,
> 			    const char *filter,
> 			    const char *opts)
> {
>+	/*
>+	 * To get a list of test cases provided by a kunit test module, ask the
>+	 * generic kunit module to respond with SKIP result for each test found.
>+	 * We could also try to use action=list kunit parameter to get the
>+	 * listing, however, parsing a KTAP report -- something that we already
>+	 * can do perfectly -- seems to be more safe than extracting a test case
>+	 * list of unknown length from /dev/kmsg.
>+	 */
>+	const char *values[ARRAY_SIZE(kunit_params)] = {
>+	     /* filter_glob, filter,	    filter_action */
>+		NULL,	     "module=none", "skip",
>+	};
> 	char *suite_name = NULL, *case_name = NULL;
> 	struct igt_ktap_result *r, *rn;
> 	struct igt_ktap_results *ktap;
>@@ -1113,27 +1175,21 @@ static void kunit_get_tests(struct igt_list_head *tests,
>
> 	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
>
>-	/*
>-	 * To get a list of test cases provided by a kunit test module, ask the
>-	 * generic kunit module to respond with SKIP result for each test found.
>-	 * We could also use action=list kunit parameter to get the listing,
>-	 * however, parsing a KTAP report -- something that we already can do
>-	 * perfectly -- seems to be more safe than extracting a test case list
>-	 * of unknown length from /dev/kmsg.
>-	 *
>-	 * TODO: drop the following workaround, which is required by LTS kernel
>-	 *       v6.1 not capable of listing test cases when built as a module.
>-	 * If loading the kunit module with required parameters fails then
>-	 * assume that we are running on a kernel with missing test case listing
>-	 * capabilities.  Dont's skip but just return with empty list of test
>-	 * cases, that should tell the caller to use a legacy method of
>-	 * iterating over KTAP results collected from blind execution of all
>-	 * Kunit test cases provided by a Kunit test module.
>-	 */
>-	igt_ignore_warn(igt_kmod_unload("kunit", KMOD_REMOVE_FORCE));
>-	if (igt_debug_on(igt_kmod_load("kunit",
>-				       "filter=module=none filter_action=skip")))
>+	if (igt_debug_on(!kunit_set_params(values))) {
>+		/*
>+		 * TODO: drop the following workaround, required by LTS kernel
>+		 *       v6.1 not capable of listing test cases when built as as
>+		 *       module, when no longer needed.
>+		 * If updating writable filter parameters of the kunit base
>+		 * module with required values then assume that we are running
>+		 * on a kernel with missing test case listing capabilities.
>+		 * Don't skip but just return with empty list of test cases,
>+		 * which should tell the caller to use a legacy method of
>+		 * iterating over KTAP results collected from blind execution
>+		 * of all Kunit test cases provided by a Kunit test module.
>+		 */
> 		return;
>+	}
>
> 	igt_skip_on(modprobe(tst->kmod, opts));
>
>@@ -1200,16 +1256,11 @@ static void __igt_kunit(struct igt_ktest *tst,
> 			      t->case_name) {
>
> 			if (!modprobe.thread) {
>-				/*
>-				 * Since we have successfully loaded the kunit
>-				 * base module with non-default parameters in
>-				 * order to get a list of test cases, now we
>-				 * have to unload it so it is then automatically
>-				 * reloaded with default parameter values when
>-				 * we load the test module again for execution.
>-				 */
>-				igt_skip_on(igt_kmod_unload("kunit",
>-							    KMOD_REMOVE_FORCE));
>+				const char *values[ARRAY_SIZE(kunit_params)] = {
>+					NULL, NULL, NULL,
>+				};
>+
>+				igt_require(kunit_set_params(values));
>
> 				igt_assert_eq(pthread_mutexattr_init(&attr), 0);
> 				igt_assert_eq(pthread_mutexattr_setrobust(&attr,
>@@ -1378,6 +1429,9 @@ void igt_kunit(const char *module_name, const char *name, const char *opts)
> 		igt_assert(igt_list_empty(&tests));
> 	}
>
>+	/* We need the base KUnit module loaded if not built-in */
>+	igt_ignore_warn(igt_kmod_load("kunit", NULL));
>+
> 	/*
> 	 * We need to use igt_subtest here, as otherwise it may crash with:
> 	 *  skipping is allowed only in fixtures, subtests or igt_simple_main
>-- 
>2.43.0
>

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

* Re: [PATCH i-g-t v2 4/6] lib/kunit: Support writable filter* parameters of kunit module
@ 2024-02-01  1:01     ` Lucas De Marchi
  0 siblings, 0 replies; 41+ messages in thread
From: Lucas De Marchi @ 2024-02-01  1:01 UTC (permalink / raw)
  To: Janusz Krzysztofik; +Cc: igt-dev, intel-xe

On Wed, Jan 31, 2024 at 07:03:51PM +0100, Janusz Krzysztofik wrote:
>Instead of wasting resources on reloading the base Kunit module each time
>a different set of filter parameters is needed, try to write the required
>values to sysfs representation of those parameters.  If that fails (e.g.
>on older LTS kernels with read-only filter parameters), fall back to
>legacy "no list of test cases available" mode as we do on kernels with
>those module parameters not supported at all.
>
>This modification will also serve as a workaround for the issue of
>impossibility to unload the base Kunit module on Xe platforms, available
>to IGT as soon as the module supports writable filter parameters.
>
>v2: Work around ineffective writes of empty strings to sysfs module
>    parameter files (Lucas) by using human readable non-empty strings that
>    give the same results as default NULLs,
>  - drop fallback to reload of base Kunit module method if assigning new
>    values to module parameters via sysfs fails (Lucas), instead use the
>    existing fallback to blind execution like if getting a list of test
>    cases was not supported at all,
>  - split move of open_parameters() helper up in the source file as well
>    as cleanup of base KUnit module unloading to separate patches (Kamil),
>  - address the issue of the second paragraph of commit description
>    suggesting two separate changes combined in one patch (Kamil) by
>    rewording the description.
>
>Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>
>---
> lib/igt_kmod.c | 114 ++++++++++++++++++++++++++++++++++++-------------
> 1 file changed, 84 insertions(+), 30 deletions(-)
>
>diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
>index d2c28d0a64..1d57ea708d 100644
>--- a/lib/igt_kmod.c
>+++ b/lib/igt_kmod.c
>@@ -811,6 +811,56 @@ static int open_parameters(const char *module_name)
> 	return open(path, O_RDONLY);
> }
>
>+static const char *kunit_params[3] = {
>+	"filter_glob", "filter", "filter_action",
>+};
>+
>+static bool kunit_set_params(const char **values)
>+{
>+	/*
>+	 * Reapplying default NULLs to module parameters via sysfs seems not
>+	 * possible, and applying empty strings doesn't work as expected,
>+	 * leaving current values untouched.  As a workaround, use
>+	 * human-readable non-empty strings that exhibit the same behaviour
>+	 * as if default NULLs were in place.  In case of filter_action
>+	 * parameter there is no such obvious non-empty string, however,
>+	 * that's not a problem for us since even if it was previously set
>+	 * to "skip" and we leave it as is, our "module!=none" default filter
>+	 * guarantees that no test cases are filtered out to be skipped.
>+	 */
>+	const char *defaults[ARRAY_SIZE(kunit_params)] = {
>+	     /* filter_glob, filter,	     filter_action */
>+		"*",	     "module!=none", "",
>+	};
>+	int i, params;
>+	bool ret;
>+
>+	params = open_parameters("kunit");
>+	ret = !igt_debug_on(params < 0);
>+
>+	for (i = 0; ret && i < ARRAY_SIZE(kunit_params); i++) {
>+		char *param = igt_sysfs_get(params, kunit_params[i]);

why do we read-modify-write? I'd rather just write the values. An
optimization by checking previous value belongs in the kernel, when it
makes an actual difference. Something like this (but with error
handling):

	int dirfd = open("/sys/modules/kunit/parameters", O_RDONLY);
	igt_sysfs_set(dirfd, "filter_glob", ...);
	igt_sysfs_set(dirfd, "filter", ...);
	igt_sysfs_set(dirfd, "filter_action", ...);
	close(dirfd);

an abstraction could better be something like:

	igt_sysfs_set_all("/sys/modules/kunit/parameters",
			  attr1, val1,
			  attr2, val2,
			  attr3, val2,
			  NULL);
>+
>+		if (igt_debug_on_f(!param, "param: %s\n", kunit_params[i])) {
>+			ret = false;
>+			break;
>+		}
>+
>+		ret = !strcmp(param, values[i] ?: defaults[i]);
>+		free(param);
>+		if (!ret)
>+			ret = !igt_debug_on(!igt_sysfs_set(params,
>+							   kunit_params[i],
>+							   values[i] ?:
>+							   defaults[i]));


filter_action is "". How does this fix the issue of writing a 0-length
string? If we try to go back and forth between "skip" and "", this will
fail.  A workaround would be to make defaults above to be something else
like "run", but we should really fix this in igt.  I'm submitting a
patch for that.

Lucas de Marchi

>+	}
>+
>+	if (params >= 0)
>+		close(params);
>+
>+	return ret;
>+}
>+
> struct modprobe_data {
> 	struct kmod_module *kmod;
> 	const char *opts;
>@@ -1100,6 +1150,18 @@ static void kunit_get_tests(struct igt_list_head *tests,
> 			    const char *filter,
> 			    const char *opts)
> {
>+	/*
>+	 * To get a list of test cases provided by a kunit test module, ask the
>+	 * generic kunit module to respond with SKIP result for each test found.
>+	 * We could also try to use action=list kunit parameter to get the
>+	 * listing, however, parsing a KTAP report -- something that we already
>+	 * can do perfectly -- seems to be more safe than extracting a test case
>+	 * list of unknown length from /dev/kmsg.
>+	 */
>+	const char *values[ARRAY_SIZE(kunit_params)] = {
>+	     /* filter_glob, filter,	    filter_action */
>+		NULL,	     "module=none", "skip",
>+	};
> 	char *suite_name = NULL, *case_name = NULL;
> 	struct igt_ktap_result *r, *rn;
> 	struct igt_ktap_results *ktap;
>@@ -1113,27 +1175,21 @@ static void kunit_get_tests(struct igt_list_head *tests,
>
> 	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
>
>-	/*
>-	 * To get a list of test cases provided by a kunit test module, ask the
>-	 * generic kunit module to respond with SKIP result for each test found.
>-	 * We could also use action=list kunit parameter to get the listing,
>-	 * however, parsing a KTAP report -- something that we already can do
>-	 * perfectly -- seems to be more safe than extracting a test case list
>-	 * of unknown length from /dev/kmsg.
>-	 *
>-	 * TODO: drop the following workaround, which is required by LTS kernel
>-	 *       v6.1 not capable of listing test cases when built as a module.
>-	 * If loading the kunit module with required parameters fails then
>-	 * assume that we are running on a kernel with missing test case listing
>-	 * capabilities.  Dont's skip but just return with empty list of test
>-	 * cases, that should tell the caller to use a legacy method of
>-	 * iterating over KTAP results collected from blind execution of all
>-	 * Kunit test cases provided by a Kunit test module.
>-	 */
>-	igt_ignore_warn(igt_kmod_unload("kunit", KMOD_REMOVE_FORCE));
>-	if (igt_debug_on(igt_kmod_load("kunit",
>-				       "filter=module=none filter_action=skip")))
>+	if (igt_debug_on(!kunit_set_params(values))) {
>+		/*
>+		 * TODO: drop the following workaround, required by LTS kernel
>+		 *       v6.1 not capable of listing test cases when built as as
>+		 *       module, when no longer needed.
>+		 * If updating writable filter parameters of the kunit base
>+		 * module with required values then assume that we are running
>+		 * on a kernel with missing test case listing capabilities.
>+		 * Don't skip but just return with empty list of test cases,
>+		 * which should tell the caller to use a legacy method of
>+		 * iterating over KTAP results collected from blind execution
>+		 * of all Kunit test cases provided by a Kunit test module.
>+		 */
> 		return;
>+	}
>
> 	igt_skip_on(modprobe(tst->kmod, opts));
>
>@@ -1200,16 +1256,11 @@ static void __igt_kunit(struct igt_ktest *tst,
> 			      t->case_name) {
>
> 			if (!modprobe.thread) {
>-				/*
>-				 * Since we have successfully loaded the kunit
>-				 * base module with non-default parameters in
>-				 * order to get a list of test cases, now we
>-				 * have to unload it so it is then automatically
>-				 * reloaded with default parameter values when
>-				 * we load the test module again for execution.
>-				 */
>-				igt_skip_on(igt_kmod_unload("kunit",
>-							    KMOD_REMOVE_FORCE));
>+				const char *values[ARRAY_SIZE(kunit_params)] = {
>+					NULL, NULL, NULL,
>+				};
>+
>+				igt_require(kunit_set_params(values));
>
> 				igt_assert_eq(pthread_mutexattr_init(&attr), 0);
> 				igt_assert_eq(pthread_mutexattr_setrobust(&attr,
>@@ -1378,6 +1429,9 @@ void igt_kunit(const char *module_name, const char *name, const char *opts)
> 		igt_assert(igt_list_empty(&tests));
> 	}
>
>+	/* We need the base KUnit module loaded if not built-in */
>+	igt_ignore_warn(igt_kmod_load("kunit", NULL));
>+
> 	/*
> 	 * We need to use igt_subtest here, as otherwise it may crash with:
> 	 *  skipping is allowed only in fixtures, subtests or igt_simple_main
>-- 
>2.43.0
>

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

* Re: [PATCH i-g-t v2 3/6] lib/kunit: Unload base KUnit module only before reloading it
  2024-01-31 22:46     ` Lucas De Marchi
@ 2024-02-01 10:24       ` Janusz Krzysztofik
  -1 siblings, 0 replies; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-02-01 10:24 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev, Kamil Konieczny, intel-xe

Hi Lucas,

On Wednesday, 31 January 2024 23:46:59 CET Lucas De Marchi wrote:
> On Wed, Jan 31, 2024 at 07:03:50PM +0100, Janusz Krzysztofik wrote:
> >In preparation for replacement of the current method of reloading base
> >KUnit module when a new set of module parameters is needed with updating
> >those parameters via sysfs, unload the module right before it is now
> >reloaded with new parameters, and stop unloading it in other places.
> >Follow-up patches will remove some of the code added here, but even then
> >they will be shorter and more clean with that adjustment already in place.
> >
> >Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
> >---
> > lib/igt_kmod.c | 23 ++++++++++++-----------
> > 1 file changed, 12 insertions(+), 11 deletions(-)
> >
> >diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> >index d1091bdc79..d2c28d0a64 100644
> >--- a/lib/igt_kmod.c
> >+++ b/lib/igt_kmod.c
> >@@ -1130,6 +1130,7 @@ static void kunit_get_tests(struct igt_list_head *tests,
> > 	 * iterating over KTAP results collected from blind execution of all
> > 	 * Kunit test cases provided by a Kunit test module.
> > 	 */
> >+	igt_ignore_warn(igt_kmod_unload("kunit", KMOD_REMOVE_FORCE));
> 
> with the rw params, we should be able to run with a built-in kunit. Will
> we be able to with this call here?

Please note that next patch drops module unloading completely from the code.  

This patch has been added to the series on request from Kamil (IGT maintainer) 
for splitting the initially single patch into four.  I partially objected that 
requirement, but since there was no response from Kamil, I found the way to do 
it.

The idea is to place calls to igt_kmod_unload("kunit", ...) only in front of 
igt_kmod_load("kunit", ...) or a block of code that results in the module 
being loaded automatically, so next patch can replace those operations with 
kunit_set_parameters() more clearly, not touching other code chunks.

Thanks,
Janusz

> 
> Lucas De Marchi
> 





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

* Re: [PATCH i-g-t v2 3/6] lib/kunit: Unload base KUnit module only before reloading it
@ 2024-02-01 10:24       ` Janusz Krzysztofik
  0 siblings, 0 replies; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-02-01 10:24 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev, intel-xe

Hi Lucas,

On Wednesday, 31 January 2024 23:46:59 CET Lucas De Marchi wrote:
> On Wed, Jan 31, 2024 at 07:03:50PM +0100, Janusz Krzysztofik wrote:
> >In preparation for replacement of the current method of reloading base
> >KUnit module when a new set of module parameters is needed with updating
> >those parameters via sysfs, unload the module right before it is now
> >reloaded with new parameters, and stop unloading it in other places.
> >Follow-up patches will remove some of the code added here, but even then
> >they will be shorter and more clean with that adjustment already in place.
> >
> >Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
> >---
> > lib/igt_kmod.c | 23 ++++++++++++-----------
> > 1 file changed, 12 insertions(+), 11 deletions(-)
> >
> >diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> >index d1091bdc79..d2c28d0a64 100644
> >--- a/lib/igt_kmod.c
> >+++ b/lib/igt_kmod.c
> >@@ -1130,6 +1130,7 @@ static void kunit_get_tests(struct igt_list_head *tests,
> > 	 * iterating over KTAP results collected from blind execution of all
> > 	 * Kunit test cases provided by a Kunit test module.
> > 	 */
> >+	igt_ignore_warn(igt_kmod_unload("kunit", KMOD_REMOVE_FORCE));
> 
> with the rw params, we should be able to run with a built-in kunit. Will
> we be able to with this call here?

Please note that next patch drops module unloading completely from the code.  

This patch has been added to the series on request from Kamil (IGT maintainer) 
for splitting the initially single patch into four.  I partially objected that 
requirement, but since there was no response from Kamil, I found the way to do 
it.

The idea is to place calls to igt_kmod_unload("kunit", ...) only in front of 
igt_kmod_load("kunit", ...) or a block of code that results in the module 
being loaded automatically, so next patch can replace those operations with 
kunit_set_parameters() more clearly, not touching other code chunks.

Thanks,
Janusz

> 
> Lucas De Marchi
> 





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

* Re: [PATCH i-g-t v2 4/6] lib/kunit: Support writable filter* parameters of kunit module
  2024-02-01  1:01     ` Lucas De Marchi
@ 2024-02-01 11:03       ` Janusz Krzysztofik
  -1 siblings, 0 replies; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-02-01 11:03 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev, Kamil Konieczny, intel-xe

Hi Lucas,

On Thursday, 1 February 2024 02:01:17 CET Lucas De Marchi wrote:
> On Wed, Jan 31, 2024 at 07:03:51PM +0100, Janusz Krzysztofik wrote:
> >Instead of wasting resources on reloading the base Kunit module each time
> >a different set of filter parameters is needed, try to write the required
> >values to sysfs representation of those parameters.  If that fails (e.g.
> >on older LTS kernels with read-only filter parameters), fall back to
> >legacy "no list of test cases available" mode as we do on kernels with
> >those module parameters not supported at all.
> >
> >This modification will also serve as a workaround for the issue of
> >impossibility to unload the base Kunit module on Xe platforms, available
> >to IGT as soon as the module supports writable filter parameters.
> >
> >v2: Work around ineffective writes of empty strings to sysfs module
> >    parameter files (Lucas) by using human readable non-empty strings that
> >    give the same results as default NULLs,
> >  - drop fallback to reload of base Kunit module method if assigning new
> >    values to module parameters via sysfs fails (Lucas), instead use the
> >    existing fallback to blind execution like if getting a list of test
> >    cases was not supported at all,
> >  - split move of open_parameters() helper up in the source file as well
> >    as cleanup of base KUnit module unloading to separate patches (Kamil),
> >  - address the issue of the second paragraph of commit description
> >    suggesting two separate changes combined in one patch (Kamil) by
> >    rewording the description.
> >
> >Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
> >Cc: Lucas De Marchi <lucas.demarchi@intel.com>
> >Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>
> >---
> > lib/igt_kmod.c | 114 ++++++++++++++++++++++++++++++++++++-------------
> > 1 file changed, 84 insertions(+), 30 deletions(-)
> >
> >diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> >index d2c28d0a64..1d57ea708d 100644
> >--- a/lib/igt_kmod.c
> >+++ b/lib/igt_kmod.c
> >@@ -811,6 +811,56 @@ static int open_parameters(const char *module_name)
> > 	return open(path, O_RDONLY);
> > }
> >
> >+static const char *kunit_params[3] = {
> >+	"filter_glob", "filter", "filter_action",
> >+};
> >+
> >+static bool kunit_set_params(const char **values)
> >+{
> >+	/*
> >+	 * Reapplying default NULLs to module parameters via sysfs seems not
> >+	 * possible, and applying empty strings doesn't work as expected,
> >+	 * leaving current values untouched.  As a workaround, use
> >+	 * human-readable non-empty strings that exhibit the same behaviour
> >+	 * as if default NULLs were in place.  In case of filter_action
> >+	 * parameter there is no such obvious non-empty string, however,
> >+	 * that's not a problem for us since even if it was previously set
> >+	 * to "skip" and we leave it as is, our "module!=none" default filter
> >+	 * guarantees that no test cases are filtered out to be skipped.
> >+	 */
> >+	const char *defaults[ARRAY_SIZE(kunit_params)] = {
> >+	     /* filter_glob, filter,	     filter_action */
> >+		"*",	     "module!=none", "",
> >+	};
> >+	int i, params;
> >+	bool ret;
> >+
> >+	params = open_parameters("kunit");
> >+	ret = !igt_debug_on(params < 0);
> >+
> >+	for (i = 0; ret && i < ARRAY_SIZE(kunit_params); i++) {
> >+		char *param = igt_sysfs_get(params, kunit_params[i]);
> 
> why do we read-modify-write? I'd rather just write the values. An
> optimization by checking previous value belongs in the kernel, when it
> makes an actual difference. Something like this (but with error
> handling):
> 
> 	int dirfd = open("/sys/modules/kunit/parameters", O_RDONLY);
> 	igt_sysfs_set(dirfd, "filter_glob", ...);
> 	igt_sysfs_set(dirfd, "filter", ...);
> 	igt_sysfs_set(dirfd, "filter_action", ...);
> 	close(dirfd);

OK.

> 
> an abstraction could better be something like:
> 
> 	igt_sysfs_set_all("/sys/modules/kunit/parameters",
> 			  attr1, val1,
> 			  attr2, val2,
> 			  attr3, val2,
> 			  NULL);
> >+
> >+		if (igt_debug_on_f(!param, "param: %s\n", kunit_params[i])) {
> >+			ret = false;
> >+			break;
> >+		}
> >+
> >+		ret = !strcmp(param, values[i] ?: defaults[i]);
> >+		free(param);
> >+		if (!ret)
> >+			ret = !igt_debug_on(!igt_sysfs_set(params,
> >+							   kunit_params[i],
> >+							   values[i] ?:
> >+							   defaults[i]));
> 
> 
> filter_action is "". How does this fix the issue of writing a 0-length
> string? If we try to go back and forth between "skip" and "", this will
> fail.  

I think I've explained that in a comment to "defaults" variable (see above, 
here quoted again for your convenience):
> >+	/*
> >+	 * Reapplying default NULLs to module parameters via sysfs seems not
> >+	 * possible, and applying empty strings doesn't work as expected,
> >+	 * leaving current values untouched.  As a workaround, use
> >+	 * human-readable non-empty strings that exhibit the same behaviour
> >+	 * as if default NULLs were in place.  In case of filter_action
> >+	 * parameter there is no such obvious non-empty string, however,
> >+	 * that's not a problem for us since even if it was previously set
> >+	 * to "skip" and we leave it as is, our "module!=none" default filter
> >+	 * guarantees that no test cases are filtered out to be skipped.
> >+	 */

If still not convinced then please have a look at results from other KUnit 
based IGT tests executed within the pre-merge CI run for this series:
https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/index.html?testfilter=drm_mm%7Cdrm_buddy%7Ckms_selftest
to see how it works (please note that IGT output is still not in sync with 
KTAP output, then results are still not easily human-readable, which is a 
known issue that will be fixed by a series planned as next, i.e.,
https://patchwork.freedesktop.org/series/126017/ refreshed on top of this 
one).

> A workaround would be to make defaults above to be something else
> like "run", 

But won't that require a respective modification on the kernel side?  Do we 
know if KUnit will accept "run" as filter_action value, now and in the future?  
And if it is accepted then do we know how KUnit filtering algorithm will 
respond to that value, now and in the future?

> but we should really fix this in igt.  I'm submitting a
> patch for that.

Do we know if KUnit will accept an empty string as filter_action value, now 
and in the future?  And if it is accepted then do we know if, when filtering 
test cases, KUnit will respond to it, now and in the future, the same way as 
if it was NULL (the default)?

That would be nice if default values of those module parameters were not NULL 
(presented by sysfs as "(null)"), then perfectly possible to be restored via 
sysfs (with your IGT fix if empty strings), without guessing or inventing 
default equivalents.

Thanks,
Janusz

> 
> Lucas de Marchi
> 
> >+	}
> >+
> >+	if (params >= 0)
> >+		close(params);
> >+
> >+	return ret;
> >+}
> >+
> > struct modprobe_data {
> > 	struct kmod_module *kmod;
> > 	const char *opts;
> >@@ -1100,6 +1150,18 @@ static void kunit_get_tests(struct igt_list_head *tests,
> > 			    const char *filter,
> > 			    const char *opts)
> > {
> >+	/*
> >+	 * To get a list of test cases provided by a kunit test module, ask the
> >+	 * generic kunit module to respond with SKIP result for each test found.
> >+	 * We could also try to use action=list kunit parameter to get the
> >+	 * listing, however, parsing a KTAP report -- something that we already
> >+	 * can do perfectly -- seems to be more safe than extracting a test case
> >+	 * list of unknown length from /dev/kmsg.
> >+	 */
> >+	const char *values[ARRAY_SIZE(kunit_params)] = {
> >+	     /* filter_glob, filter,	    filter_action */
> >+		NULL,	     "module=none", "skip",
> >+	};
> > 	char *suite_name = NULL, *case_name = NULL;
> > 	struct igt_ktap_result *r, *rn;
> > 	struct igt_ktap_results *ktap;
> >@@ -1113,27 +1175,21 @@ static void kunit_get_tests(struct igt_list_head *tests,
> >
> > 	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
> >
> >-	/*
> >-	 * To get a list of test cases provided by a kunit test module, ask the
> >-	 * generic kunit module to respond with SKIP result for each test found.
> >-	 * We could also use action=list kunit parameter to get the listing,
> >-	 * however, parsing a KTAP report -- something that we already can do
> >-	 * perfectly -- seems to be more safe than extracting a test case list
> >-	 * of unknown length from /dev/kmsg.
> >-	 *
> >-	 * TODO: drop the following workaround, which is required by LTS kernel
> >-	 *       v6.1 not capable of listing test cases when built as a module.
> >-	 * If loading the kunit module with required parameters fails then
> >-	 * assume that we are running on a kernel with missing test case listing
> >-	 * capabilities.  Dont's skip but just return with empty list of test
> >-	 * cases, that should tell the caller to use a legacy method of
> >-	 * iterating over KTAP results collected from blind execution of all
> >-	 * Kunit test cases provided by a Kunit test module.
> >-	 */
> >-	igt_ignore_warn(igt_kmod_unload("kunit", KMOD_REMOVE_FORCE));
> >-	if (igt_debug_on(igt_kmod_load("kunit",
> >-				       "filter=module=none filter_action=skip")))
> >+	if (igt_debug_on(!kunit_set_params(values))) {
> >+		/*
> >+		 * TODO: drop the following workaround, required by LTS kernel
> >+		 *       v6.1 not capable of listing test cases when built as as
> >+		 *       module, when no longer needed.
> >+		 * If updating writable filter parameters of the kunit base
> >+		 * module with required values then assume that we are running
> >+		 * on a kernel with missing test case listing capabilities.
> >+		 * Don't skip but just return with empty list of test cases,
> >+		 * which should tell the caller to use a legacy method of
> >+		 * iterating over KTAP results collected from blind execution
> >+		 * of all Kunit test cases provided by a Kunit test module.
> >+		 */
> > 		return;
> >+	}
> >
> > 	igt_skip_on(modprobe(tst->kmod, opts));
> >
> >@@ -1200,16 +1256,11 @@ static void __igt_kunit(struct igt_ktest *tst,
> > 			      t->case_name) {
> >
> > 			if (!modprobe.thread) {
> >-				/*
> >-				 * Since we have successfully loaded the kunit
> >-				 * base module with non-default parameters in
> >-				 * order to get a list of test cases, now we
> >-				 * have to unload it so it is then automatically
> >-				 * reloaded with default parameter values when
> >-				 * we load the test module again for execution.
> >-				 */
> >-				igt_skip_on(igt_kmod_unload("kunit",
> >-							    KMOD_REMOVE_FORCE));
> >+				const char *values[ARRAY_SIZE(kunit_params)] = {
> >+					NULL, NULL, NULL,
> >+				};
> >+
> >+				igt_require(kunit_set_params(values));
> >
> > 				igt_assert_eq(pthread_mutexattr_init(&attr), 0);
> > 				igt_assert_eq(pthread_mutexattr_setrobust(&attr,
> >@@ -1378,6 +1429,9 @@ void igt_kunit(const char *module_name, const char *name, const char *opts)
> > 		igt_assert(igt_list_empty(&tests));
> > 	}
> >
> >+	/* We need the base KUnit module loaded if not built-in */
> >+	igt_ignore_warn(igt_kmod_load("kunit", NULL));
> >+
> > 	/*
> > 	 * We need to use igt_subtest here, as otherwise it may crash with:
> > 	 *  skipping is allowed only in fixtures, subtests or igt_simple_main
> 





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

* Re: [PATCH i-g-t v2 4/6] lib/kunit: Support writable filter* parameters of kunit module
@ 2024-02-01 11:03       ` Janusz Krzysztofik
  0 siblings, 0 replies; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-02-01 11:03 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev, intel-xe

Hi Lucas,

On Thursday, 1 February 2024 02:01:17 CET Lucas De Marchi wrote:
> On Wed, Jan 31, 2024 at 07:03:51PM +0100, Janusz Krzysztofik wrote:
> >Instead of wasting resources on reloading the base Kunit module each time
> >a different set of filter parameters is needed, try to write the required
> >values to sysfs representation of those parameters.  If that fails (e.g.
> >on older LTS kernels with read-only filter parameters), fall back to
> >legacy "no list of test cases available" mode as we do on kernels with
> >those module parameters not supported at all.
> >
> >This modification will also serve as a workaround for the issue of
> >impossibility to unload the base Kunit module on Xe platforms, available
> >to IGT as soon as the module supports writable filter parameters.
> >
> >v2: Work around ineffective writes of empty strings to sysfs module
> >    parameter files (Lucas) by using human readable non-empty strings that
> >    give the same results as default NULLs,
> >  - drop fallback to reload of base Kunit module method if assigning new
> >    values to module parameters via sysfs fails (Lucas), instead use the
> >    existing fallback to blind execution like if getting a list of test
> >    cases was not supported at all,
> >  - split move of open_parameters() helper up in the source file as well
> >    as cleanup of base KUnit module unloading to separate patches (Kamil),
> >  - address the issue of the second paragraph of commit description
> >    suggesting two separate changes combined in one patch (Kamil) by
> >    rewording the description.
> >
> >Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
> >Cc: Lucas De Marchi <lucas.demarchi@intel.com>
> >Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>
> >---
> > lib/igt_kmod.c | 114 ++++++++++++++++++++++++++++++++++++-------------
> > 1 file changed, 84 insertions(+), 30 deletions(-)
> >
> >diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> >index d2c28d0a64..1d57ea708d 100644
> >--- a/lib/igt_kmod.c
> >+++ b/lib/igt_kmod.c
> >@@ -811,6 +811,56 @@ static int open_parameters(const char *module_name)
> > 	return open(path, O_RDONLY);
> > }
> >
> >+static const char *kunit_params[3] = {
> >+	"filter_glob", "filter", "filter_action",
> >+};
> >+
> >+static bool kunit_set_params(const char **values)
> >+{
> >+	/*
> >+	 * Reapplying default NULLs to module parameters via sysfs seems not
> >+	 * possible, and applying empty strings doesn't work as expected,
> >+	 * leaving current values untouched.  As a workaround, use
> >+	 * human-readable non-empty strings that exhibit the same behaviour
> >+	 * as if default NULLs were in place.  In case of filter_action
> >+	 * parameter there is no such obvious non-empty string, however,
> >+	 * that's not a problem for us since even if it was previously set
> >+	 * to "skip" and we leave it as is, our "module!=none" default filter
> >+	 * guarantees that no test cases are filtered out to be skipped.
> >+	 */
> >+	const char *defaults[ARRAY_SIZE(kunit_params)] = {
> >+	     /* filter_glob, filter,	     filter_action */
> >+		"*",	     "module!=none", "",
> >+	};
> >+	int i, params;
> >+	bool ret;
> >+
> >+	params = open_parameters("kunit");
> >+	ret = !igt_debug_on(params < 0);
> >+
> >+	for (i = 0; ret && i < ARRAY_SIZE(kunit_params); i++) {
> >+		char *param = igt_sysfs_get(params, kunit_params[i]);
> 
> why do we read-modify-write? I'd rather just write the values. An
> optimization by checking previous value belongs in the kernel, when it
> makes an actual difference. Something like this (but with error
> handling):
> 
> 	int dirfd = open("/sys/modules/kunit/parameters", O_RDONLY);
> 	igt_sysfs_set(dirfd, "filter_glob", ...);
> 	igt_sysfs_set(dirfd, "filter", ...);
> 	igt_sysfs_set(dirfd, "filter_action", ...);
> 	close(dirfd);

OK.

> 
> an abstraction could better be something like:
> 
> 	igt_sysfs_set_all("/sys/modules/kunit/parameters",
> 			  attr1, val1,
> 			  attr2, val2,
> 			  attr3, val2,
> 			  NULL);
> >+
> >+		if (igt_debug_on_f(!param, "param: %s\n", kunit_params[i])) {
> >+			ret = false;
> >+			break;
> >+		}
> >+
> >+		ret = !strcmp(param, values[i] ?: defaults[i]);
> >+		free(param);
> >+		if (!ret)
> >+			ret = !igt_debug_on(!igt_sysfs_set(params,
> >+							   kunit_params[i],
> >+							   values[i] ?:
> >+							   defaults[i]));
> 
> 
> filter_action is "". How does this fix the issue of writing a 0-length
> string? If we try to go back and forth between "skip" and "", this will
> fail.  

I think I've explained that in a comment to "defaults" variable (see above, 
here quoted again for your convenience):
> >+	/*
> >+	 * Reapplying default NULLs to module parameters via sysfs seems not
> >+	 * possible, and applying empty strings doesn't work as expected,
> >+	 * leaving current values untouched.  As a workaround, use
> >+	 * human-readable non-empty strings that exhibit the same behaviour
> >+	 * as if default NULLs were in place.  In case of filter_action
> >+	 * parameter there is no such obvious non-empty string, however,
> >+	 * that's not a problem for us since even if it was previously set
> >+	 * to "skip" and we leave it as is, our "module!=none" default filter
> >+	 * guarantees that no test cases are filtered out to be skipped.
> >+	 */

If still not convinced then please have a look at results from other KUnit 
based IGT tests executed within the pre-merge CI run for this series:
https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/index.html?testfilter=drm_mm%7Cdrm_buddy%7Ckms_selftest
to see how it works (please note that IGT output is still not in sync with 
KTAP output, then results are still not easily human-readable, which is a 
known issue that will be fixed by a series planned as next, i.e.,
https://patchwork.freedesktop.org/series/126017/ refreshed on top of this 
one).

> A workaround would be to make defaults above to be something else
> like "run", 

But won't that require a respective modification on the kernel side?  Do we 
know if KUnit will accept "run" as filter_action value, now and in the future?  
And if it is accepted then do we know how KUnit filtering algorithm will 
respond to that value, now and in the future?

> but we should really fix this in igt.  I'm submitting a
> patch for that.

Do we know if KUnit will accept an empty string as filter_action value, now 
and in the future?  And if it is accepted then do we know if, when filtering 
test cases, KUnit will respond to it, now and in the future, the same way as 
if it was NULL (the default)?

That would be nice if default values of those module parameters were not NULL 
(presented by sysfs as "(null)"), then perfectly possible to be restored via 
sysfs (with your IGT fix if empty strings), without guessing or inventing 
default equivalents.

Thanks,
Janusz

> 
> Lucas de Marchi
> 
> >+	}
> >+
> >+	if (params >= 0)
> >+		close(params);
> >+
> >+	return ret;
> >+}
> >+
> > struct modprobe_data {
> > 	struct kmod_module *kmod;
> > 	const char *opts;
> >@@ -1100,6 +1150,18 @@ static void kunit_get_tests(struct igt_list_head *tests,
> > 			    const char *filter,
> > 			    const char *opts)
> > {
> >+	/*
> >+	 * To get a list of test cases provided by a kunit test module, ask the
> >+	 * generic kunit module to respond with SKIP result for each test found.
> >+	 * We could also try to use action=list kunit parameter to get the
> >+	 * listing, however, parsing a KTAP report -- something that we already
> >+	 * can do perfectly -- seems to be more safe than extracting a test case
> >+	 * list of unknown length from /dev/kmsg.
> >+	 */
> >+	const char *values[ARRAY_SIZE(kunit_params)] = {
> >+	     /* filter_glob, filter,	    filter_action */
> >+		NULL,	     "module=none", "skip",
> >+	};
> > 	char *suite_name = NULL, *case_name = NULL;
> > 	struct igt_ktap_result *r, *rn;
> > 	struct igt_ktap_results *ktap;
> >@@ -1113,27 +1175,21 @@ static void kunit_get_tests(struct igt_list_head *tests,
> >
> > 	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
> >
> >-	/*
> >-	 * To get a list of test cases provided by a kunit test module, ask the
> >-	 * generic kunit module to respond with SKIP result for each test found.
> >-	 * We could also use action=list kunit parameter to get the listing,
> >-	 * however, parsing a KTAP report -- something that we already can do
> >-	 * perfectly -- seems to be more safe than extracting a test case list
> >-	 * of unknown length from /dev/kmsg.
> >-	 *
> >-	 * TODO: drop the following workaround, which is required by LTS kernel
> >-	 *       v6.1 not capable of listing test cases when built as a module.
> >-	 * If loading the kunit module with required parameters fails then
> >-	 * assume that we are running on a kernel with missing test case listing
> >-	 * capabilities.  Dont's skip but just return with empty list of test
> >-	 * cases, that should tell the caller to use a legacy method of
> >-	 * iterating over KTAP results collected from blind execution of all
> >-	 * Kunit test cases provided by a Kunit test module.
> >-	 */
> >-	igt_ignore_warn(igt_kmod_unload("kunit", KMOD_REMOVE_FORCE));
> >-	if (igt_debug_on(igt_kmod_load("kunit",
> >-				       "filter=module=none filter_action=skip")))
> >+	if (igt_debug_on(!kunit_set_params(values))) {
> >+		/*
> >+		 * TODO: drop the following workaround, required by LTS kernel
> >+		 *       v6.1 not capable of listing test cases when built as as
> >+		 *       module, when no longer needed.
> >+		 * If updating writable filter parameters of the kunit base
> >+		 * module with required values then assume that we are running
> >+		 * on a kernel with missing test case listing capabilities.
> >+		 * Don't skip but just return with empty list of test cases,
> >+		 * which should tell the caller to use a legacy method of
> >+		 * iterating over KTAP results collected from blind execution
> >+		 * of all Kunit test cases provided by a Kunit test module.
> >+		 */
> > 		return;
> >+	}
> >
> > 	igt_skip_on(modprobe(tst->kmod, opts));
> >
> >@@ -1200,16 +1256,11 @@ static void __igt_kunit(struct igt_ktest *tst,
> > 			      t->case_name) {
> >
> > 			if (!modprobe.thread) {
> >-				/*
> >-				 * Since we have successfully loaded the kunit
> >-				 * base module with non-default parameters in
> >-				 * order to get a list of test cases, now we
> >-				 * have to unload it so it is then automatically
> >-				 * reloaded with default parameter values when
> >-				 * we load the test module again for execution.
> >-				 */
> >-				igt_skip_on(igt_kmod_unload("kunit",
> >-							    KMOD_REMOVE_FORCE));
> >+				const char *values[ARRAY_SIZE(kunit_params)] = {
> >+					NULL, NULL, NULL,
> >+				};
> >+
> >+				igt_require(kunit_set_params(values));
> >
> > 				igt_assert_eq(pthread_mutexattr_init(&attr), 0);
> > 				igt_assert_eq(pthread_mutexattr_setrobust(&attr,
> >@@ -1378,6 +1429,9 @@ void igt_kunit(const char *module_name, const char *name, const char *opts)
> > 		igt_assert(igt_list_empty(&tests));
> > 	}
> >
> >+	/* We need the base KUnit module loaded if not built-in */
> >+	igt_ignore_warn(igt_kmod_load("kunit", NULL));
> >+
> > 	/*
> > 	 * We need to use igt_subtest here, as otherwise it may crash with:
> > 	 *  skipping is allowed only in fixtures, subtests or igt_simple_main
> 





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

* Re: ✗ CI.xeBAT: failure for lib/kunit: Support writable filter* parameters of kunit module (rev2)
  2024-01-31 20:51     ` Lucas De Marchi
@ 2024-02-01 11:06       ` Janusz Krzysztofik
  2024-02-01 14:13         ` Lucas De Marchi
  0 siblings, 1 reply; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-02-01 11:06 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev, intel-xe

On Wednesday, 31 January 2024 21:51:15 CET Lucas De Marchi wrote:
> On Wed, Jan 31, 2024 at 08:22:35PM +0100, Janusz Krzysztofik wrote:
> >On Wednesday, 31 January 2024 19:36:57 CET Patchwork wrote:
> >> == Series Details ==
> >>
> >> Series: lib/kunit: Support writable filter* parameters of kunit module
> >(rev2)
> >> URL   : https://patchwork.freedesktop.org/series/129174/
> >> State : failure
> >>
> >> == Summary ==
> >>
> >> CI Bug Log - changes from XEIGT_7699_BAT -> XEIGTPW_10613_BAT
> >> ====================================================
> >>
> >> Summary
> >> -------
> >>
> >>   **FAILURE**
> >>
> >>   Serious unknown changes coming with XEIGTPW_10613_BAT absolutely need to
> >be
> >>   verified manually.
> >>
> >>   If you think the reported changes have nothing to do with the changes
> >>   introduced in XEIGTPW_10613_BAT, please notify your bug team (I915-ci-
> >infra@lists.freedesktop.org) to allow them
> >>   to document this new failure mode, which will reduce false positives in
> >CI.
> >>
> >>
> >>
> >> Participating hosts (4 -> 4)
> >> ------------------------------
> >>
> >>   No changes in participating hosts
> >>
> >> Possible new issues
> >> -------------------
> >>
> >>   Here are the unknown changes that may have been introduced in
> >XEIGTPW_10613_BAT:
> >>
> >> ### IGT changes ###
> >>
> >> #### Possible regressions ####
> >>
> >>   * igt@xe_live_ktest@bo:
> >>     - bat-adlp-7:         [PASS][1] -> [SKIP][2] +2 other tests skip
> >>    [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-adlp-7/
> >igt@xe_live_ktest@bo.html
> >>    [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-adlp-7/
> >igt@xe_live_ktest@bo.html
> >
> >Hi Lucas,
> >
> >We've got an empty list of test cases because the current algorithm of IGT
> >KUnit implementation expects subtest name provided via struct kunit_tests
> >to be the same as name of a test suite provided by the KUnit test module.  As
> >a special case, if the module provides only one test suite (most do) and the
> >name of it is the same as the module name with the _test or _kunit suffix
> >truncated (also the most common case) then subtest name may be omitted (i.e.,
> >.name field may be NULL).
> >
> >I have to document the above, but we also have to use the same names on both
> >sides (KUnit test module and its corresponding IGT test).  Now we don't, e.g.
> >test suite named "xe_bo" is provided by xe_bo_test module while subtest name
> >"bo" is specified for that module in IGT xe_live_ktest.
> 
> in the end we want to have only one module: xe_live_test.ko and then
> filter out by the testunit. From what I've seen previously in igt, it
> would be a matter of always reloading the same module, but passing a
> different name.

As long as the module will provide several test suites, each of those test 
suites can be mapped to a separate subtest with the same name as the test 
suite, and with its test cases discovered and executed automatically by IGT as 
dynamic sub-subtests, still selectable individually via IGT --dynamic command 
line option.  For that to work this way, populating .name fields of the struct 
kunit_tests table with subtest names that are the same as test suite names is 
mandatory, otherwise IGT will expose one subtest, named after the module name, 
with dynamic sub-subtests named <suite_name>-<case_name>.

Thanks,
Janusz

> 
> Lucas De Marchi
> 





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

* Re: Re: ✗ CI.xeBAT: failure for lib/kunit: Support writable filter* parameters of kunit module (rev2)
  2024-02-01 11:06       ` Janusz Krzysztofik
@ 2024-02-01 14:13         ` Lucas De Marchi
  2024-02-01 15:38           ` Janusz Krzysztofik
  0 siblings, 1 reply; 41+ messages in thread
From: Lucas De Marchi @ 2024-02-01 14:13 UTC (permalink / raw)
  To: Janusz Krzysztofik; +Cc: igt-dev, intel-xe

On Thu, Feb 01, 2024 at 12:06:35PM +0100, Janusz Krzysztofik wrote:
>On Wednesday, 31 January 2024 21:51:15 CET Lucas De Marchi wrote:
>> On Wed, Jan 31, 2024 at 08:22:35PM +0100, Janusz Krzysztofik wrote:
>> >On Wednesday, 31 January 2024 19:36:57 CET Patchwork wrote:
>> >> == Series Details ==
>> >>
>> >> Series: lib/kunit: Support writable filter* parameters of kunit module
>> >(rev2)
>> >> URL   : https://patchwork.freedesktop.org/series/129174/
>> >> State : failure
>> >>
>> >> == Summary ==
>> >>
>> >> CI Bug Log - changes from XEIGT_7699_BAT -> XEIGTPW_10613_BAT
>> >> ====================================================
>> >>
>> >> Summary
>> >> -------
>> >>
>> >>   **FAILURE**
>> >>
>> >>   Serious unknown changes coming with XEIGTPW_10613_BAT absolutely need to
>> >be
>> >>   verified manually.
>> >>
>> >>   If you think the reported changes have nothing to do with the changes
>> >>   introduced in XEIGTPW_10613_BAT, please notify your bug team (I915-ci-
>> >infra@lists.freedesktop.org) to allow them
>> >>   to document this new failure mode, which will reduce false positives in
>> >CI.
>> >>
>> >>
>> >>
>> >> Participating hosts (4 -> 4)
>> >> ------------------------------
>> >>
>> >>   No changes in participating hosts
>> >>
>> >> Possible new issues
>> >> -------------------
>> >>
>> >>   Here are the unknown changes that may have been introduced in
>> >XEIGTPW_10613_BAT:
>> >>
>> >> ### IGT changes ###
>> >>
>> >> #### Possible regressions ####
>> >>
>> >>   * igt@xe_live_ktest@bo:
>> >>     - bat-adlp-7:         [PASS][1] -> [SKIP][2] +2 other tests skip
>> >>    [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-adlp-7/
>> >igt@xe_live_ktest@bo.html
>> >>    [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-adlp-7/
>> >igt@xe_live_ktest@bo.html
>> >
>> >Hi Lucas,
>> >
>> >We've got an empty list of test cases because the current algorithm of IGT
>> >KUnit implementation expects subtest name provided via struct kunit_tests
>> >to be the same as name of a test suite provided by the KUnit test module.  As
>> >a special case, if the module provides only one test suite (most do) and the
>> >name of it is the same as the module name with the _test or _kunit suffix
>> >truncated (also the most common case) then subtest name may be omitted (i.e.,
>> >.name field may be NULL).
>> >
>> >I have to document the above, but we also have to use the same names on both
>> >sides (KUnit test module and its corresponding IGT test).  Now we don't, e.g.
>> >test suite named "xe_bo" is provided by xe_bo_test module while subtest name
>> >"bo" is specified for that module in IGT xe_live_ktest.
>>
>> in the end we want to have only one module: xe_live_test.ko and then
>> filter out by the testunit. From what I've seen previously in igt, it
>> would be a matter of always reloading the same module, but passing a
>> different name.
>
>As long as the module will provide several test suites, each of those test
>suites can be mapped to a separate subtest with the same name as the test
>suite, and with its test cases discovered and executed automatically by IGT as
>dynamic sub-subtests, still selectable individually via IGT --dynamic command
>line option.  For that to work this way, populating .name fields of the struct
>kunit_tests table with subtest names that are the same as test suite names is
>mandatory, otherwise IGT will expose one subtest, named after the module name,
>with dynamic sub-subtests named <suite_name>-<case_name>.

that's what I did when I submitted the module rename:
https://lore.kernel.org/igt-dev/20231205224926.2188996-1-lucas.demarchi@intel.com/

This one is to be applied on top of these fixes to kunit handling.

Lucas De Marchi

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

* Re: Re: [PATCH i-g-t v2 4/6] lib/kunit: Support writable filter* parameters of kunit module
  2024-02-01 11:03       ` Janusz Krzysztofik
  (?)
@ 2024-02-01 14:30       ` Lucas De Marchi
  -1 siblings, 0 replies; 41+ messages in thread
From: Lucas De Marchi @ 2024-02-01 14:30 UTC (permalink / raw)
  To: Janusz Krzysztofik; +Cc: igt-dev, intel-xe

On Thu, Feb 01, 2024 at 12:03:27PM +0100, Janusz Krzysztofik wrote:
>Hi Lucas,
>
>On Thursday, 1 February 2024 02:01:17 CET Lucas De Marchi wrote:
>> On Wed, Jan 31, 2024 at 07:03:51PM +0100, Janusz Krzysztofik wrote:
>> >Instead of wasting resources on reloading the base Kunit module each time
>> >a different set of filter parameters is needed, try to write the required
>> >values to sysfs representation of those parameters.  If that fails (e.g.
>> >on older LTS kernels with read-only filter parameters), fall back to
>> >legacy "no list of test cases available" mode as we do on kernels with
>> >those module parameters not supported at all.
>> >
>> >This modification will also serve as a workaround for the issue of
>> >impossibility to unload the base Kunit module on Xe platforms, available
>> >to IGT as soon as the module supports writable filter parameters.
>> >
>> >v2: Work around ineffective writes of empty strings to sysfs module
>> >    parameter files (Lucas) by using human readable non-empty strings that
>> >    give the same results as default NULLs,
>> >  - drop fallback to reload of base Kunit module method if assigning new
>> >    values to module parameters via sysfs fails (Lucas), instead use the
>> >    existing fallback to blind execution like if getting a list of test
>> >    cases was not supported at all,
>> >  - split move of open_parameters() helper up in the source file as well
>> >    as cleanup of base KUnit module unloading to separate patches (Kamil),
>> >  - address the issue of the second paragraph of commit description
>> >    suggesting two separate changes combined in one patch (Kamil) by
>> >    rewording the description.
>> >
>> >Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
>> >Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>> >Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>
>> >---
>> > lib/igt_kmod.c | 114 ++++++++++++++++++++++++++++++++++++-------------
>> > 1 file changed, 84 insertions(+), 30 deletions(-)
>> >
>> >diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
>> >index d2c28d0a64..1d57ea708d 100644
>> >--- a/lib/igt_kmod.c
>> >+++ b/lib/igt_kmod.c
>> >@@ -811,6 +811,56 @@ static int open_parameters(const char *module_name)
>> > 	return open(path, O_RDONLY);
>> > }
>> >
>> >+static const char *kunit_params[3] = {
>> >+	"filter_glob", "filter", "filter_action",
>> >+};
>> >+
>> >+static bool kunit_set_params(const char **values)
>> >+{
>> >+	/*
>> >+	 * Reapplying default NULLs to module parameters via sysfs seems not
>> >+	 * possible, and applying empty strings doesn't work as expected,
>> >+	 * leaving current values untouched.  As a workaround, use
>> >+	 * human-readable non-empty strings that exhibit the same behaviour
>> >+	 * as if default NULLs were in place.  In case of filter_action
>> >+	 * parameter there is no such obvious non-empty string, however,
>> >+	 * that's not a problem for us since even if it was previously set
>> >+	 * to "skip" and we leave it as is, our "module!=none" default filter
>> >+	 * guarantees that no test cases are filtered out to be skipped.
>> >+	 */
>> >+	const char *defaults[ARRAY_SIZE(kunit_params)] = {
>> >+	     /* filter_glob, filter,	     filter_action */
>> >+		"*",	     "module!=none", "",
>> >+	};
>> >+	int i, params;
>> >+	bool ret;
>> >+
>> >+	params = open_parameters("kunit");
>> >+	ret = !igt_debug_on(params < 0);
>> >+
>> >+	for (i = 0; ret && i < ARRAY_SIZE(kunit_params); i++) {
>> >+		char *param = igt_sysfs_get(params, kunit_params[i]);
>>
>> why do we read-modify-write? I'd rather just write the values. An
>> optimization by checking previous value belongs in the kernel, when it
>> makes an actual difference. Something like this (but with error
>> handling):
>>
>> 	int dirfd = open("/sys/modules/kunit/parameters", O_RDONLY);
>> 	igt_sysfs_set(dirfd, "filter_glob", ...);
>> 	igt_sysfs_set(dirfd, "filter", ...);
>> 	igt_sysfs_set(dirfd, "filter_action", ...);
>> 	close(dirfd);
>
>OK.
>
>>
>> an abstraction could better be something like:
>>
>> 	igt_sysfs_set_all("/sys/modules/kunit/parameters",
>> 			  attr1, val1,
>> 			  attr2, val2,
>> 			  attr3, val2,
>> 			  NULL);
>> >+
>> >+		if (igt_debug_on_f(!param, "param: %s\n", kunit_params[i])) {
>> >+			ret = false;
>> >+			break;
>> >+		}
>> >+
>> >+		ret = !strcmp(param, values[i] ?: defaults[i]);
>> >+		free(param);
>> >+		if (!ret)
>> >+			ret = !igt_debug_on(!igt_sysfs_set(params,
>> >+							   kunit_params[i],
>> >+							   values[i] ?:
>> >+							   defaults[i]));
>>
>>
>> filter_action is "". How does this fix the issue of writing a 0-length
>> string? If we try to go back and forth between "skip" and "", this will
>> fail.
>
>I think I've explained that in a comment to "defaults" variable (see above,
>here quoted again for your convenience):
>> >+	/*
>> >+	 * Reapplying default NULLs to module parameters via sysfs seems not
>> >+	 * possible, and applying empty strings doesn't work as expected,
>> >+	 * leaving current values untouched.  As a workaround, use
>> >+	 * human-readable non-empty strings that exhibit the same behaviour
>> >+	 * as if default NULLs were in place.  In case of filter_action
>> >+	 * parameter there is no such obvious non-empty string, however,
>> >+	 * that's not a problem for us since even if it was previously set
>> >+	 * to "skip" and we leave it as is, our "module!=none" default filter
>> >+	 * guarantees that no test cases are filtered out to be skipped.

ugh... I hate how these params have the same name but
different semantics. So yes, I think this works. We may
need to reword the comment above once we fix the 0-length write though.

/*
  * We don't care about writing to filter_action since filter guarantees
  * there will be nothing filtered out
  */
igt_sysfs_set_all("/sys/modules/kunit/parameters",
		  "filter", "module!=none",
		  "filter_glob", glob,
		  NULL);

We probably don't even need a kunit_set_params() in the end? Each
caller can just spell out the params it's writing.

>> >+	 */
>
>If still not convinced then please have a look at results from other KUnit
>based IGT tests executed within the pre-merge CI run for this series:
>https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10613/index.html?testfilter=drm_mm%7Cdrm_buddy%7Ckms_selftest
>to see how it works (please note that IGT output is still not in sync with
>KTAP output, then results are still not easily human-readable, which is a
>known issue that will be fixed by a series planned as next, i.e.,
>https://patchwork.freedesktop.org/series/126017/ refreshed on top of this
>one).
>
>> A workaround would be to make defaults above to be something else
>> like "run",
>
>But won't that require a respective modification on the kernel side?  Do we
>know if KUnit will accept "run" as filter_action value, now and in the future?
>And if it is accepted then do we know how KUnit filtering algorithm will
>respond to that value, now and in the future?
>
>> but we should really fix this in igt.  I'm submitting a
>> patch for that.
>
>Do we know if KUnit will accept an empty string as filter_action value, now
>and in the future?  And if it is accepted then do we know if, when filtering
>test cases, KUnit will respond to it, now and in the future, the same way as
>if it was NULL (the default)?

yes, should work. But I'm also ok with not writing anything as above if the
value passed to "filter" makes it not needed. However if we do write "",
then I'd prefer to make sure we have igt fixed to do the right thing and
really write that.

Lucas De Marchi

>
>That would be nice if default values of those module parameters were not NULL
>(presented by sysfs as "(null)"), then perfectly possible to be restored via
>sysfs (with your IGT fix if empty strings), without guessing or inventing
>default equivalents.
>
>Thanks,
>Janusz
>
>>
>> Lucas de Marchi
>>
>> >+	}
>> >+
>> >+	if (params >= 0)
>> >+		close(params);
>> >+
>> >+	return ret;
>> >+}
>> >+
>> > struct modprobe_data {
>> > 	struct kmod_module *kmod;
>> > 	const char *opts;
>> >@@ -1100,6 +1150,18 @@ static void kunit_get_tests(struct igt_list_head *tests,
>> > 			    const char *filter,
>> > 			    const char *opts)
>> > {
>> >+	/*
>> >+	 * To get a list of test cases provided by a kunit test module, ask the
>> >+	 * generic kunit module to respond with SKIP result for each test found.
>> >+	 * We could also try to use action=list kunit parameter to get the
>> >+	 * listing, however, parsing a KTAP report -- something that we already
>> >+	 * can do perfectly -- seems to be more safe than extracting a test case
>> >+	 * list of unknown length from /dev/kmsg.
>> >+	 */
>> >+	const char *values[ARRAY_SIZE(kunit_params)] = {
>> >+	     /* filter_glob, filter,	    filter_action */
>> >+		NULL,	     "module=none", "skip",
>> >+	};
>> > 	char *suite_name = NULL, *case_name = NULL;
>> > 	struct igt_ktap_result *r, *rn;
>> > 	struct igt_ktap_results *ktap;
>> >@@ -1113,27 +1175,21 @@ static void kunit_get_tests(struct igt_list_head *tests,
>> >
>> > 	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
>> >
>> >-	/*
>> >-	 * To get a list of test cases provided by a kunit test module, ask the
>> >-	 * generic kunit module to respond with SKIP result for each test found.
>> >-	 * We could also use action=list kunit parameter to get the listing,
>> >-	 * however, parsing a KTAP report -- something that we already can do
>> >-	 * perfectly -- seems to be more safe than extracting a test case list
>> >-	 * of unknown length from /dev/kmsg.
>> >-	 *
>> >-	 * TODO: drop the following workaround, which is required by LTS kernel
>> >-	 *       v6.1 not capable of listing test cases when built as a module.
>> >-	 * If loading the kunit module with required parameters fails then
>> >-	 * assume that we are running on a kernel with missing test case listing
>> >-	 * capabilities.  Dont's skip but just return with empty list of test
>> >-	 * cases, that should tell the caller to use a legacy method of
>> >-	 * iterating over KTAP results collected from blind execution of all
>> >-	 * Kunit test cases provided by a Kunit test module.
>> >-	 */
>> >-	igt_ignore_warn(igt_kmod_unload("kunit", KMOD_REMOVE_FORCE));
>> >-	if (igt_debug_on(igt_kmod_load("kunit",
>> >-				       "filter=module=none filter_action=skip")))
>> >+	if (igt_debug_on(!kunit_set_params(values))) {
>> >+		/*
>> >+		 * TODO: drop the following workaround, required by LTS kernel
>> >+		 *       v6.1 not capable of listing test cases when built as as
>> >+		 *       module, when no longer needed.
>> >+		 * If updating writable filter parameters of the kunit base
>> >+		 * module with required values then assume that we are running
>> >+		 * on a kernel with missing test case listing capabilities.
>> >+		 * Don't skip but just return with empty list of test cases,
>> >+		 * which should tell the caller to use a legacy method of
>> >+		 * iterating over KTAP results collected from blind execution
>> >+		 * of all Kunit test cases provided by a Kunit test module.
>> >+		 */
>> > 		return;
>> >+	}
>> >
>> > 	igt_skip_on(modprobe(tst->kmod, opts));
>> >
>> >@@ -1200,16 +1256,11 @@ static void __igt_kunit(struct igt_ktest *tst,
>> > 			      t->case_name) {
>> >
>> > 			if (!modprobe.thread) {
>> >-				/*
>> >-				 * Since we have successfully loaded the kunit
>> >-				 * base module with non-default parameters in
>> >-				 * order to get a list of test cases, now we
>> >-				 * have to unload it so it is then automatically
>> >-				 * reloaded with default parameter values when
>> >-				 * we load the test module again for execution.
>> >-				 */
>> >-				igt_skip_on(igt_kmod_unload("kunit",
>> >-							    KMOD_REMOVE_FORCE));
>> >+				const char *values[ARRAY_SIZE(kunit_params)] = {
>> >+					NULL, NULL, NULL,
>> >+				};
>> >+
>> >+				igt_require(kunit_set_params(values));
>> >
>> > 				igt_assert_eq(pthread_mutexattr_init(&attr), 0);
>> > 				igt_assert_eq(pthread_mutexattr_setrobust(&attr,
>> >@@ -1378,6 +1429,9 @@ void igt_kunit(const char *module_name, const char *name, const char *opts)
>> > 		igt_assert(igt_list_empty(&tests));
>> > 	}
>> >
>> >+	/* We need the base KUnit module loaded if not built-in */
>> >+	igt_ignore_warn(igt_kmod_load("kunit", NULL));
>> >+
>> > 	/*
>> > 	 * We need to use igt_subtest here, as otherwise it may crash with:
>> > 	 *  skipping is allowed only in fixtures, subtests or igt_simple_main
>>
>
>
>
>

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

* Re: [PATCH i-g-t v2 1/6] lib/kunit: Skip on empty list of test cases
  2024-01-31 18:03   ` Janusz Krzysztofik
  (?)
@ 2024-02-01 14:30   ` Kamil Konieczny
  -1 siblings, 0 replies; 41+ messages in thread
From: Kamil Konieczny @ 2024-02-01 14:30 UTC (permalink / raw)
  To: igt-dev
  Cc: Janusz Krzysztofik, intel-xe, Mauro Carvalho Chehab, Lucas De Marchi

Hi Janusz,
On 2024-01-31 at 19:03:48 +0100, Janusz Krzysztofik wrote:
> If loading the base KUnit module in list mode succeeds but our KTAP
> parser or test suite filter returns an empty list of test cases then,
> instead of calling igt_skip, we now unintentionally fall back to legacy
> mode as if the module didn't support filter parameters.  Fix it.
> 
> Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>

Reviewed-by: Kamil Konieczny <kamil.konieczny@linux.intel.com>

> ---
>  lib/igt_kmod.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> index 250ab2107b..ad69173151 100644
> --- a/lib/igt_kmod.c
> +++ b/lib/igt_kmod.c
> @@ -1163,6 +1163,7 @@ static void kunit_get_tests(struct igt_list_head *tests,
>  
>  	igt_skip_on_f(err,
>  		      "KTAP parser failed while getting a list of test cases\n");
> +	igt_skip_on(igt_list_empty(tests));
>  }
>  
>  static void __igt_kunit(struct igt_ktest *tst,
> -- 
> 2.43.0
> 

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

* Re: [PATCH i-g-t v2 2/6] lib/kmode: Prepare open_parameters() helper for reuse by kunit
  2024-01-31 18:03   ` Janusz Krzysztofik
  (?)
@ 2024-02-01 14:37   ` Kamil Konieczny
  -1 siblings, 0 replies; 41+ messages in thread
From: Kamil Konieczny @ 2024-02-01 14:37 UTC (permalink / raw)
  To: igt-dev
  Cc: Janusz Krzysztofik, intel-xe, Mauro Carvalho Chehab, Lucas De Marchi

Hi Janusz,
On 2024-01-31 at 19:03:49 +0100, Janusz Krzysztofik wrote:
> Move the open_parameters() helper code up in the source file, above the
> kunit related functions, so it is available to follow-up changes of the
> kunit code.
> 
> Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>

Reviewed-by: Kamil Konieczny <kamil.konieczny@linux.intel.com>

> ---
>  lib/igt_kmod.c | 16 ++++++++--------
>  1 file changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> index ad69173151..d1091bdc79 100644
> --- a/lib/igt_kmod.c
> +++ b/lib/igt_kmod.c
> @@ -803,6 +803,14 @@ void igt_kselftest_get_tests(struct kmod_module *kmod,
>  	kmod_module_info_free_list(pre);
>  }
>  
> +static int open_parameters(const char *module_name)
> +{
> +	char path[256];
> +
> +	snprintf(path, sizeof(path), "/sys/module/%s/parameters", module_name);
> +	return open(path, O_RDONLY);
> +}
> +
>  struct modprobe_data {
>  	struct kmod_module *kmod;
>  	const char *opts;
> @@ -1402,14 +1410,6 @@ void igt_kunit(const char *module_name, const char *name, const char *opts)
>  	igt_ktest_fini(&tst);
>  }
>  
> -static int open_parameters(const char *module_name)
> -{
> -	char path[256];
> -
> -	snprintf(path, sizeof(path), "/sys/module/%s/parameters", module_name);
> -	return open(path, O_RDONLY);
> -}
> -
>  int igt_ktest_init(struct igt_ktest *tst,
>  		   const char *module_name)
>  {
> -- 
> 2.43.0
> 

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

* Re: [PATCH i-g-t v2 5/6] lib/kunit: Report early kernel taints explicitly
  2024-01-31 18:03   ` Janusz Krzysztofik
  (?)
@ 2024-02-01 14:38   ` Kamil Konieczny
  -1 siblings, 0 replies; 41+ messages in thread
From: Kamil Konieczny @ 2024-02-01 14:38 UTC (permalink / raw)
  To: igt-dev
  Cc: Janusz Krzysztofik, intel-xe, Mauro Carvalho Chehab, Lucas De Marchi

Hi Janusz,
On 2024-01-31 at 19:03:52 +0100, Janusz Krzysztofik wrote:
> When we find the kernel tainted after loading a KUnit test module in
> list only mode, report that taint immediately as the reason for skip
> instead of executing and blaming our KTAP parser.
> 
> Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>

Reviewed-by: Kamil Konieczny <kamil.konieczny@linux.intel.com>

> ---
>  lib/igt_kmod.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> index 1d57ea708d..53c54b1a0d 100644
> --- a/lib/igt_kmod.c
> +++ b/lib/igt_kmod.c
> @@ -1165,6 +1165,7 @@ static void kunit_get_tests(struct igt_list_head *tests,
>  	char *suite_name = NULL, *case_name = NULL;
>  	struct igt_ktap_result *r, *rn;
>  	struct igt_ktap_results *ktap;
> +	unsigned long taints;
>  	int flags, err;
>  
>  	igt_skip_on_f(tst->kmsg < 0, "Could not open /dev/kmsg\n");
> @@ -1192,6 +1193,7 @@ static void kunit_get_tests(struct igt_list_head *tests,
>  	}
>  
>  	igt_skip_on(modprobe(tst->kmod, opts));
> +	igt_skip_on(igt_kernel_tainted(&taints));
>  
>  	ktap = igt_ktap_alloc(tests);
>  	igt_require(ktap);
> -- 
> 2.43.0
> 

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

* Re: [PATCH i-g-t v2 6/6] lib/kunit: Process module remove error after list errors
  2024-01-31 18:03   ` Janusz Krzysztofik
  (?)
@ 2024-02-01 14:55   ` Kamil Konieczny
  2024-02-01 16:02     ` Janusz Krzysztofik
  -1 siblings, 1 reply; 41+ messages in thread
From: Kamil Konieczny @ 2024-02-01 14:55 UTC (permalink / raw)
  To: igt-dev
  Cc: Janusz Krzysztofik, intel-xe, Mauro Carvalho Chehab, Lucas De Marchi

Hi Janusz,
On 2024-01-31 at 19:03:53 +0100, Janusz Krzysztofik wrote:
> Skip on any error from test case list gathering first, then, in
> preparation for executing those test cases, on an error from unloading the
> test module loaded in list only mode, so it is more clear if listing the
> test cases was successful or not.
> 
> Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
> ---
>  lib/igt_kmod.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> index 53c54b1a0d..741c7fd055 100644
> --- a/lib/igt_kmod.c
> +++ b/lib/igt_kmod.c
> @@ -1225,11 +1225,11 @@ static void kunit_get_tests(struct igt_list_head *tests,
>  		free(case_name);
>  	}
>  
> -	igt_skip_on(kmod_module_remove_module(tst->kmod, KMOD_REMOVE_FORCE));
> -
>  	igt_skip_on_f(err,
>  		      "KTAP parser failed while getting a list of test cases\n");
>  	igt_skip_on(igt_list_empty(tests));

This skip_on will prevent module unload below... What about
remembering both and skipping on list_empty() only after module unload?
For example:
    testslist_is_empty = igt_list_empty(tests);
    unload_failed = kmod_module_remove_module(tst->kmod, KMOD_REMOVE_FORCE);

    igt_skip_on(testslist_is_empty);
    igt_skip_on_f(unload_failed, "kmod %s unload failed\n", tst->kmod);


Regards,
Kamil

> +
> +	igt_skip_on(kmod_module_remove_module(tst->kmod, KMOD_REMOVE_FORCE));
>  }
>  
>  static void __igt_kunit(struct igt_ktest *tst,
> -- 
> 2.43.0
> 

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

* Re: [PATCH i-g-t v2 4/6] lib/kunit: Support writable filter* parameters of kunit module
  2024-01-31 18:03   ` Janusz Krzysztofik
  (?)
  (?)
@ 2024-02-01 15:07   ` Kamil Konieczny
  2024-02-01 16:13     ` Janusz Krzysztofik
  2024-02-01 16:22     ` Lucas De Marchi
  -1 siblings, 2 replies; 41+ messages in thread
From: Kamil Konieczny @ 2024-02-01 15:07 UTC (permalink / raw)
  To: igt-dev
  Cc: Janusz Krzysztofik, intel-xe, Mauro Carvalho Chehab, Lucas De Marchi

Hi Janusz,
On 2024-01-31 at 19:03:51 +0100, Janusz Krzysztofik wrote:
> Instead of wasting resources on reloading the base Kunit module each time
> a different set of filter parameters is needed, try to write the required
> values to sysfs representation of those parameters.  If that fails (e.g.
> on older LTS kernels with read-only filter parameters), fall back to
> legacy "no list of test cases available" mode as we do on kernels with
> those module parameters not supported at all.
> 
> This modification will also serve as a workaround for the issue of
> impossibility to unload the base Kunit module on Xe platforms, available
> to IGT as soon as the module supports writable filter parameters.
> 
> v2: Work around ineffective writes of empty strings to sysfs module
>     parameter files (Lucas) by using human readable non-empty strings that
>     give the same results as default NULLs,
>   - drop fallback to reload of base Kunit module method if assigning new
>     values to module parameters via sysfs fails (Lucas), instead use the
>     existing fallback to blind execution like if getting a list of test
>     cases was not supported at all,
>   - split move of open_parameters() helper up in the source file as well
>     as cleanup of base KUnit module unloading to separate patches (Kamil),
>   - address the issue of the second paragraph of commit description
>     suggesting two separate changes combined in one patch (Kamil) by
>     rewording the description.
> 
> Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
> Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>
> ---
>  lib/igt_kmod.c | 114 ++++++++++++++++++++++++++++++++++++-------------
>  1 file changed, 84 insertions(+), 30 deletions(-)
> 
> diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> index d2c28d0a64..1d57ea708d 100644
> --- a/lib/igt_kmod.c
> +++ b/lib/igt_kmod.c
> @@ -811,6 +811,56 @@ static int open_parameters(const char *module_name)
>  	return open(path, O_RDONLY);
>  }
>  
> +static const char *kunit_params[3] = {
> +	"filter_glob", "filter", "filter_action",
> +};
> +
> +static bool kunit_set_params(const char **values)
> +{
> +	/*
> +	 * Reapplying default NULLs to module parameters via sysfs seems not
> +	 * possible, and applying empty strings doesn't work as expected,
> +	 * leaving current values untouched.  As a workaround, use
> +	 * human-readable non-empty strings that exhibit the same behaviour
> +	 * as if default NULLs were in place.  In case of filter_action
> +	 * parameter there is no such obvious non-empty string, however,
> +	 * that's not a problem for us since even if it was previously set
> +	 * to "skip" and we leave it as is, our "module!=none" default filter
> +	 * guarantees that no test cases are filtered out to be skipped.
> +	 */
> +	const char *defaults[ARRAY_SIZE(kunit_params)] = {
> +	     /* filter_glob, filter,	     filter_action */
> +		"*",	     "module!=none", "",

If writing empty string poses a problem, what about writing
one space? Could it work?

One more nit below.

> +	};
> +	int i, params;
> +	bool ret;
> +
> +	params = open_parameters("kunit");
> +	ret = !igt_debug_on(params < 0);
> +
> +	for (i = 0; ret && i < ARRAY_SIZE(kunit_params); i++) {
> +		char *param = igt_sysfs_get(params, kunit_params[i]);
> +
> +		if (igt_debug_on_f(!param, "param: %s\n", kunit_params[i])) {
> +			ret = false;
> +			break;
> +		}
> +
> +		ret = !strcmp(param, values[i] ?: defaults[i]);
> +		free(param);
> +		if (!ret)
> +			ret = !igt_debug_on(!igt_sysfs_set(params,
> +							   kunit_params[i],
> +							   values[i] ?:
> +							   defaults[i]));
> +	}
> +
> +	if (params >= 0)
> +		close(params);
> +
> +	return ret;
> +}
> +
>  struct modprobe_data {
>  	struct kmod_module *kmod;
>  	const char *opts;
> @@ -1100,6 +1150,18 @@ static void kunit_get_tests(struct igt_list_head *tests,
>  			    const char *filter,
>  			    const char *opts)
>  {
> +	/*
> +	 * To get a list of test cases provided by a kunit test module, ask the
> +	 * generic kunit module to respond with SKIP result for each test found.
> +	 * We could also try to use action=list kunit parameter to get the
> +	 * listing, however, parsing a KTAP report -- something that we already
> +	 * can do perfectly -- seems to be more safe than extracting a test case
> +	 * list of unknown length from /dev/kmsg.
> +	 */
> +	const char *values[ARRAY_SIZE(kunit_params)] = {
> +	     /* filter_glob, filter,	    filter_action */
> +		NULL,	     "module=none", "skip",
> +	};
>  	char *suite_name = NULL, *case_name = NULL;
>  	struct igt_ktap_result *r, *rn;
>  	struct igt_ktap_results *ktap;
> @@ -1113,27 +1175,21 @@ static void kunit_get_tests(struct igt_list_head *tests,
>  
>  	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
>  
> -	/*
> -	 * To get a list of test cases provided by a kunit test module, ask the
> -	 * generic kunit module to respond with SKIP result for each test found.
> -	 * We could also use action=list kunit parameter to get the listing,
> -	 * however, parsing a KTAP report -- something that we already can do
> -	 * perfectly -- seems to be more safe than extracting a test case list
> -	 * of unknown length from /dev/kmsg.
> -	 *
> -	 * TODO: drop the following workaround, which is required by LTS kernel
> -	 *       v6.1 not capable of listing test cases when built as a module.
> -	 * If loading the kunit module with required parameters fails then
> -	 * assume that we are running on a kernel with missing test case listing
> -	 * capabilities.  Dont's skip but just return with empty list of test
> -	 * cases, that should tell the caller to use a legacy method of
> -	 * iterating over KTAP results collected from blind execution of all
> -	 * Kunit test cases provided by a Kunit test module.
> -	 */
> -	igt_ignore_warn(igt_kmod_unload("kunit", KMOD_REMOVE_FORCE));
> -	if (igt_debug_on(igt_kmod_load("kunit",
> -				       "filter=module=none filter_action=skip")))
> +	if (igt_debug_on(!kunit_set_params(values))) {
> +		/*
> +		 * TODO: drop the following workaround, required by LTS kernel
> +		 *       v6.1 not capable of listing test cases when built as as

s/as as/as/

Regards,
Kamil

> +		 *       module, when no longer needed.
> +		 * If updating writable filter parameters of the kunit base
> +		 * module with required values then assume that we are running
> +		 * on a kernel with missing test case listing capabilities.
> +		 * Don't skip but just return with empty list of test cases,
> +		 * which should tell the caller to use a legacy method of
> +		 * iterating over KTAP results collected from blind execution
> +		 * of all Kunit test cases provided by a Kunit test module.
> +		 */
>  		return;
> +	}
>  
>  	igt_skip_on(modprobe(tst->kmod, opts));
>  
> @@ -1200,16 +1256,11 @@ static void __igt_kunit(struct igt_ktest *tst,
>  			      t->case_name) {
>  
>  			if (!modprobe.thread) {
> -				/*
> -				 * Since we have successfully loaded the kunit
> -				 * base module with non-default parameters in
> -				 * order to get a list of test cases, now we
> -				 * have to unload it so it is then automatically
> -				 * reloaded with default parameter values when
> -				 * we load the test module again for execution.
> -				 */
> -				igt_skip_on(igt_kmod_unload("kunit",
> -							    KMOD_REMOVE_FORCE));
> +				const char *values[ARRAY_SIZE(kunit_params)] = {
> +					NULL, NULL, NULL,
> +				};
> +
> +				igt_require(kunit_set_params(values));
>  
>  				igt_assert_eq(pthread_mutexattr_init(&attr), 0);
>  				igt_assert_eq(pthread_mutexattr_setrobust(&attr,
> @@ -1378,6 +1429,9 @@ void igt_kunit(const char *module_name, const char *name, const char *opts)
>  		igt_assert(igt_list_empty(&tests));
>  	}
>  
> +	/* We need the base KUnit module loaded if not built-in */
> +	igt_ignore_warn(igt_kmod_load("kunit", NULL));
> +
>  	/*
>  	 * We need to use igt_subtest here, as otherwise it may crash with:
>  	 *  skipping is allowed only in fixtures, subtests or igt_simple_main
> -- 
> 2.43.0
> 

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

* Re: ✗ CI.xeBAT: failure for lib/kunit: Support writable filter* parameters of kunit module (rev2)
  2024-02-01 14:13         ` Lucas De Marchi
@ 2024-02-01 15:38           ` Janusz Krzysztofik
  0 siblings, 0 replies; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-02-01 15:38 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev, intel-xe

On Thursday, 1 February 2024 15:13:31 CET Lucas De Marchi wrote:
> On Thu, Feb 01, 2024 at 12:06:35PM +0100, Janusz Krzysztofik wrote:
> >On Wednesday, 31 January 2024 21:51:15 CET Lucas De Marchi wrote:
> >> On Wed, Jan 31, 2024 at 08:22:35PM +0100, Janusz Krzysztofik wrote:
> >> >On Wednesday, 31 January 2024 19:36:57 CET Patchwork wrote:
> >> >> == Series Details ==
> >> >>
> >> >> Series: lib/kunit: Support writable filter* parameters of kunit module
> >> >(rev2)
> >> >> URL   : https://patchwork.freedesktop.org/series/129174/
> >> >> State : failure
> >> >>
> >> >> == Summary ==
> >> >>
> >> >> CI Bug Log - changes from XEIGT_7699_BAT -> XEIGTPW_10613_BAT
> >> >> ====================================================
> >> >>
> >> >> Summary
> >> >> -------
> >> >>
> >> >>   **FAILURE**
> >> >>
> >> >>   Serious unknown changes coming with XEIGTPW_10613_BAT absolutely need to
> >> >be
> >> >>   verified manually.
> >> >>
> >> >>   If you think the reported changes have nothing to do with the changes
> >> >>   introduced in XEIGTPW_10613_BAT, please notify your bug team (I915-ci-
> >> >infra@lists.freedesktop.org) to allow them
> >> >>   to document this new failure mode, which will reduce false positives in
> >> >CI.
> >> >>
> >> >>
> >> >>
> >> >> Participating hosts (4 -> 4)
> >> >> ------------------------------
> >> >>
> >> >>   No changes in participating hosts
> >> >>
> >> >> Possible new issues
> >> >> -------------------
> >> >>
> >> >>   Here are the unknown changes that may have been introduced in
> >> >XEIGTPW_10613_BAT:
> >> >>
> >> >> ### IGT changes ###
> >> >>
> >> >> #### Possible regressions ####
> >> >>
> >> >>   * igt@xe_live_ktest@bo:
> >> >>     - bat-adlp-7:         [PASS][1] -> [SKIP][2] +2 other tests skip
> >> >>    [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7699/bat-adlp-7/
> >> >igt@xe_live_ktest@bo.html
> >> >>    [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10613/bat-adlp-7/
> >> >igt@xe_live_ktest@bo.html
> >> >
> >> >Hi Lucas,
> >> >
> >> >We've got an empty list of test cases because the current algorithm of IGT
> >> >KUnit implementation expects subtest name provided via struct kunit_tests
> >> >to be the same as name of a test suite provided by the KUnit test module.  As
> >> >a special case, if the module provides only one test suite (most do) and the
> >> >name of it is the same as the module name with the _test or _kunit suffix
> >> >truncated (also the most common case) then subtest name may be omitted (i.e.,
> >> >.name field may be NULL).
> >> >
> >> >I have to document the above, but we also have to use the same names on both
> >> >sides (KUnit test module and its corresponding IGT test).  Now we don't, e.g.
> >> >test suite named "xe_bo" is provided by xe_bo_test module while subtest name
> >> >"bo" is specified for that module in IGT xe_live_ktest.
> >>
> >> in the end we want to have only one module: xe_live_test.ko and then
> >> filter out by the testunit. From what I've seen previously in igt, it
> >> would be a matter of always reloading the same module, but passing a
> >> different name.
> >
> >As long as the module will provide several test suites, each of those test
> >suites can be mapped to a separate subtest with the same name as the test
> >suite, and with its test cases discovered and executed automatically by IGT as
> >dynamic sub-subtests, still selectable individually via IGT --dynamic command
> >line option.  For that to work this way, populating .name fields of the struct
> >kunit_tests table with subtest names that are the same as test suite names is
> >mandatory, otherwise IGT will expose one subtest, named after the module name,
> >with dynamic sub-subtests named <suite_name>-<case_name>.
> 
> that's what I did when I submitted the module rename:
> https://lore.kernel.org/igt-dev/20231205224926.2188996-1-lucas.demarchi@intel.com/
> 
> This one is to be applied on top of these fixes to kunit handling.

Do your subtest names match test suite names used in xe_live_test.ko?  AFAICS, 
https://patchwork.freedesktop.org/series/126786/ referred in the IGT patch 
you've pointed out didn't touch test suite names while combining source files 
of several now separate modules into that one module, and test suite names 
still reported by those separate modules don't match -- they start with xe_ 
prefix.  We need to have those mismatches fixed on one side or another.

Thanks,
Janusz

> 
> Lucas De Marchi
> 





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

* Re: [PATCH i-g-t v2 6/6] lib/kunit: Process module remove error after list errors
  2024-02-01 14:55   ` Kamil Konieczny
@ 2024-02-01 16:02     ` Janusz Krzysztofik
  2024-02-01 16:59       ` Kamil Konieczny
  0 siblings, 1 reply; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-02-01 16:02 UTC (permalink / raw)
  To: Kamil Konieczny, igt-dev, Janusz Krzysztofik, intel-xe,
	Mauro Carvalho Chehab, Lucas De Marchi

Hi Kamil,

On Thursday, 1 February 2024 15:55:01 CET Kamil Konieczny wrote:
> Hi Janusz,
> On 2024-01-31 at 19:03:53 +0100, Janusz Krzysztofik wrote:
> > Skip on any error from test case list gathering first, then, in
> > preparation for executing those test cases, on an error from unloading the
> > test module loaded in list only mode, so it is more clear if listing the
> > test cases was successful or not.
> > 
> > Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
> > ---
> >  lib/igt_kmod.c | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> > index 53c54b1a0d..741c7fd055 100644
> > --- a/lib/igt_kmod.c
> > +++ b/lib/igt_kmod.c
> > @@ -1225,11 +1225,11 @@ static void kunit_get_tests(struct igt_list_head 
*tests,
> >  		free(case_name);
> >  	}
> >  
> > -	igt_skip_on(kmod_module_remove_module(tst->kmod, 
KMOD_REMOVE_FORCE));
> > -
> >  	igt_skip_on_f(err,
> >  		      "KTAP parser failed while getting a list of test 
cases\n");
> >  	igt_skip_on(igt_list_empty(tests));
> 
> This skip_on will prevent module unload below... What about
> remembering both and skipping on list_empty() only after module unload?
> For example:
>     testslist_is_empty = igt_list_empty(tests);
>     unload_failed = kmod_module_remove_module(tst->kmod, KMOD_REMOVE_FORCE);
> 
>     igt_skip_on(testslist_is_empty);
>     igt_skip_on_f(unload_failed, "kmod %s unload failed\n", tst->kmod);

As I tried to express in my commit description, test module is unloaded here, 
after the list of test cases is collected, "in preparation for executing those 
test cases", and not as a final cleanup.

kunit_get_tests() is called from inside igt_subtest_with_dynamic() before any 
calls to igt_dynamic() from where test cases are executed.  If 
kunit_get_tests() skips for any reason then no test cases provided by that 
module will be executed, then unloading the module is not required.  An 
attempt to unload it if still loaded will be take from the trailing 
igt_fixture section of igt_kunit() via a call to igt_ktest_end().

Is the above clarification sufficient for you?  

Thanks,
Janusz

> 
> 
> Regards,
> Kamil
> 
> > +
> > +	igt_skip_on(kmod_module_remove_module(tst->kmod, 
KMOD_REMOVE_FORCE));
> >  }
> >  
> >  static void __igt_kunit(struct igt_ktest *tst,
> 





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

* Re: [PATCH i-g-t v2 4/6] lib/kunit: Support writable filter* parameters of kunit module
  2024-02-01 15:07   ` Kamil Konieczny
@ 2024-02-01 16:13     ` Janusz Krzysztofik
  2024-02-01 16:22     ` Lucas De Marchi
  1 sibling, 0 replies; 41+ messages in thread
From: Janusz Krzysztofik @ 2024-02-01 16:13 UTC (permalink / raw)
  To: Kamil Konieczny, igt-dev, Janusz Krzysztofik, intel-xe,
	Mauro Carvalho Chehab, Lucas De Marchi

Hi Kamil,

On Thursday, 1 February 2024 16:07:41 CET Kamil Konieczny wrote:
> Hi Janusz,
> On 2024-01-31 at 19:03:51 +0100, Janusz Krzysztofik wrote:
> > Instead of wasting resources on reloading the base Kunit module each time
> > a different set of filter parameters is needed, try to write the required
> > values to sysfs representation of those parameters.  If that fails (e.g.
> > on older LTS kernels with read-only filter parameters), fall back to
> > legacy "no list of test cases available" mode as we do on kernels with
> > those module parameters not supported at all.
> > 
> > This modification will also serve as a workaround for the issue of
> > impossibility to unload the base Kunit module on Xe platforms, available
> > to IGT as soon as the module supports writable filter parameters.
> > 
> > v2: Work around ineffective writes of empty strings to sysfs module
> >     parameter files (Lucas) by using human readable non-empty strings that
> >     give the same results as default NULLs,
> >   - drop fallback to reload of base Kunit module method if assigning new
> >     values to module parameters via sysfs fails (Lucas), instead use the
> >     existing fallback to blind execution like if getting a list of test
> >     cases was not supported at all,
> >   - split move of open_parameters() helper up in the source file as well
> >     as cleanup of base KUnit module unloading to separate patches (Kamil),
> >   - address the issue of the second paragraph of commit description
> >     suggesting two separate changes combined in one patch (Kamil) by
> >     rewording the description.
> > 
> > Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
> > Cc: Lucas De Marchi <lucas.demarchi@intel.com>
> > Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>
> > ---
> >  lib/igt_kmod.c | 114 ++++++++++++++++++++++++++++++++++++-------------
> >  1 file changed, 84 insertions(+), 30 deletions(-)
> > 
> > diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> > index d2c28d0a64..1d57ea708d 100644
> > --- a/lib/igt_kmod.c
> > +++ b/lib/igt_kmod.c
> > @@ -811,6 +811,56 @@ static int open_parameters(const char *module_name)
> >  	return open(path, O_RDONLY);
> >  }
> >  
> > +static const char *kunit_params[3] = {
> > +	"filter_glob", "filter", "filter_action",
> > +};
> > +
> > +static bool kunit_set_params(const char **values)
> > +{
> > +	/*
> > +	 * Reapplying default NULLs to module parameters via sysfs seems not
> > +	 * possible, and applying empty strings doesn't work as expected,
> > +	 * leaving current values untouched.  As a workaround, use
> > +	 * human-readable non-empty strings that exhibit the same behaviour
> > +	 * as if default NULLs were in place.  In case of filter_action
> > +	 * parameter there is no such obvious non-empty string, however,
> > +	 * that's not a problem for us since even if it was previously set
> > +	 * to "skip" and we leave it as is, our "module!=none" default filter
> > +	 * guarantees that no test cases are filtered out to be skipped.
> > +	 */
> > +	const char *defaults[ARRAY_SIZE(kunit_params)] = {
> > +	     /* filter_glob, filter,	     filter_action */
> > +		"*",	     "module!=none", "",
> 
> If writing empty string poses a problem, what about writing
> one space? Could it work?

The approach suggested by Lucas seems the best to me: don't write to 
filter_action at all if we are not able to get the result we want (i.e., its 
default NULL value restored) AND we can get what we want with its current 
value "skip" in place when combined with the proposed value of filter 
parameter "module!=none".

> 
> One more nit below.
> 
> > +	};
> > +	int i, params;
> > +	bool ret;
> > +
> > +	params = open_parameters("kunit");
> > +	ret = !igt_debug_on(params < 0);
> > +
> > +	for (i = 0; ret && i < ARRAY_SIZE(kunit_params); i++) {
> > +		char *param = igt_sysfs_get(params, kunit_params[i]);
> > +
> > +		if (igt_debug_on_f(!param, "param: %s\n", kunit_params[i])) {
> > +			ret = false;
> > +			break;
> > +		}
> > +
> > +		ret = !strcmp(param, values[i] ?: defaults[i]);
> > +		free(param);
> > +		if (!ret)
> > +			ret = !igt_debug_on(!igt_sysfs_set(params,
> > +							   kunit_params[i],
> > +							   values[i] ?:
> > +							   defaults[i]));
> > +	}
> > +
> > +	if (params >= 0)
> > +		close(params);
> > +
> > +	return ret;
> > +}
> > +
> >  struct modprobe_data {
> >  	struct kmod_module *kmod;
> >  	const char *opts;
> > @@ -1100,6 +1150,18 @@ static void kunit_get_tests(struct igt_list_head *tests,
> >  			    const char *filter,
> >  			    const char *opts)
> >  {
> > +	/*
> > +	 * To get a list of test cases provided by a kunit test module, ask the
> > +	 * generic kunit module to respond with SKIP result for each test found.
> > +	 * We could also try to use action=list kunit parameter to get the
> > +	 * listing, however, parsing a KTAP report -- something that we already
> > +	 * can do perfectly -- seems to be more safe than extracting a test case
> > +	 * list of unknown length from /dev/kmsg.
> > +	 */
> > +	const char *values[ARRAY_SIZE(kunit_params)] = {
> > +	     /* filter_glob, filter,	    filter_action */
> > +		NULL,	     "module=none", "skip",
> > +	};
> >  	char *suite_name = NULL, *case_name = NULL;
> >  	struct igt_ktap_result *r, *rn;
> >  	struct igt_ktap_results *ktap;
> > @@ -1113,27 +1175,21 @@ static void kunit_get_tests(struct igt_list_head *tests,
> >  
> >  	igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
> >  
> > -	/*
> > -	 * To get a list of test cases provided by a kunit test module, ask the
> > -	 * generic kunit module to respond with SKIP result for each test found.
> > -	 * We could also use action=list kunit parameter to get the listing,
> > -	 * however, parsing a KTAP report -- something that we already can do
> > -	 * perfectly -- seems to be more safe than extracting a test case list
> > -	 * of unknown length from /dev/kmsg.
> > -	 *
> > -	 * TODO: drop the following workaround, which is required by LTS kernel
> > -	 *       v6.1 not capable of listing test cases when built as a module.
> > -	 * If loading the kunit module with required parameters fails then
> > -	 * assume that we are running on a kernel with missing test case listing
> > -	 * capabilities.  Dont's skip but just return with empty list of test
> > -	 * cases, that should tell the caller to use a legacy method of
> > -	 * iterating over KTAP results collected from blind execution of all
> > -	 * Kunit test cases provided by a Kunit test module.
> > -	 */
> > -	igt_ignore_warn(igt_kmod_unload("kunit", KMOD_REMOVE_FORCE));
> > -	if (igt_debug_on(igt_kmod_load("kunit",
> > -				       "filter=module=none filter_action=skip")))
> > +	if (igt_debug_on(!kunit_set_params(values))) {
> > +		/*
> > +		 * TODO: drop the following workaround, required by LTS kernel
> > +		 *       v6.1 not capable of listing test cases when built as as
> 
> s/as as/as/

OK, thanks.

Janusz

> 
> Regards,
> Kamil
> 
> > +		 *       module, when no longer needed.
> > +		 * If updating writable filter parameters of the kunit base
> > +		 * module with required values then assume that we are running
> > +		 * on a kernel with missing test case listing capabilities.
> > +		 * Don't skip but just return with empty list of test cases,
> > +		 * which should tell the caller to use a legacy method of
> > +		 * iterating over KTAP results collected from blind execution
> > +		 * of all Kunit test cases provided by a Kunit test module.
> > +		 */
> >  		return;
> > +	}
> >  
> >  	igt_skip_on(modprobe(tst->kmod, opts));
> >  
> > @@ -1200,16 +1256,11 @@ static void __igt_kunit(struct igt_ktest *tst,
> >  			      t->case_name) {
> >  
> >  			if (!modprobe.thread) {
> > -				/*
> > -				 * Since we have successfully loaded the kunit
> > -				 * base module with non-default parameters in
> > -				 * order to get a list of test cases, now we
> > -				 * have to unload it so it is then automatically
> > -				 * reloaded with default parameter values when
> > -				 * we load the test module again for execution.
> > -				 */
> > -				igt_skip_on(igt_kmod_unload("kunit",
> > -							    KMOD_REMOVE_FORCE));
> > +				const char *values[ARRAY_SIZE(kunit_params)] = {
> > +					NULL, NULL, NULL,
> > +				};
> > +
> > +				igt_require(kunit_set_params(values));
> >  
> >  				igt_assert_eq(pthread_mutexattr_init(&attr), 0);
> >  				igt_assert_eq(pthread_mutexattr_setrobust(&attr,
> > @@ -1378,6 +1429,9 @@ void igt_kunit(const char *module_name, const char *name, const char *opts)
> >  		igt_assert(igt_list_empty(&tests));
> >  	}
> >  
> > +	/* We need the base KUnit module loaded if not built-in */
> > +	igt_ignore_warn(igt_kmod_load("kunit", NULL));
> > +
> >  	/*
> >  	 * We need to use igt_subtest here, as otherwise it may crash with:
> >  	 *  skipping is allowed only in fixtures, subtests or igt_simple_main
> 





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

* Re: Re: [PATCH i-g-t v2 4/6] lib/kunit: Support writable filter* parameters of kunit module
  2024-02-01 15:07   ` Kamil Konieczny
  2024-02-01 16:13     ` Janusz Krzysztofik
@ 2024-02-01 16:22     ` Lucas De Marchi
  1 sibling, 0 replies; 41+ messages in thread
From: Lucas De Marchi @ 2024-02-01 16:22 UTC (permalink / raw)
  To: Kamil Konieczny, igt-dev, Janusz Krzysztofik, intel-xe,
	Mauro Carvalho Chehab, Lucas De Marchi

On Thu, Feb 01, 2024 at 04:07:41PM +0100, Kamil Konieczny wrote:
>Hi Janusz,
>On 2024-01-31 at 19:03:51 +0100, Janusz Krzysztofik wrote:
>> Instead of wasting resources on reloading the base Kunit module each time
>> a different set of filter parameters is needed, try to write the required
>> values to sysfs representation of those parameters.  If that fails (e.g.
>> on older LTS kernels with read-only filter parameters), fall back to
>> legacy "no list of test cases available" mode as we do on kernels with
>> those module parameters not supported at all.
>>
>> This modification will also serve as a workaround for the issue of
>> impossibility to unload the base Kunit module on Xe platforms, available
>> to IGT as soon as the module supports writable filter parameters.
>>
>> v2: Work around ineffective writes of empty strings to sysfs module
>>     parameter files (Lucas) by using human readable non-empty strings that
>>     give the same results as default NULLs,
>>   - drop fallback to reload of base Kunit module method if assigning new
>>     values to module parameters via sysfs fails (Lucas), instead use the
>>     existing fallback to blind execution like if getting a list of test
>>     cases was not supported at all,
>>   - split move of open_parameters() helper up in the source file as well
>>     as cleanup of base KUnit module unloading to separate patches (Kamil),
>>   - address the issue of the second paragraph of commit description
>>     suggesting two separate changes combined in one patch (Kamil) by
>>     rewording the description.
>>
>> Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
>> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>> Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>
>> ---
>>  lib/igt_kmod.c | 114 ++++++++++++++++++++++++++++++++++++-------------
>>  1 file changed, 84 insertions(+), 30 deletions(-)
>>
>> diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
>> index d2c28d0a64..1d57ea708d 100644
>> --- a/lib/igt_kmod.c
>> +++ b/lib/igt_kmod.c
>> @@ -811,6 +811,56 @@ static int open_parameters(const char *module_name)
>>  	return open(path, O_RDONLY);
>>  }
>>
>> +static const char *kunit_params[3] = {
>> +	"filter_glob", "filter", "filter_action",
>> +};
>> +
>> +static bool kunit_set_params(const char **values)
>> +{
>> +	/*
>> +	 * Reapplying default NULLs to module parameters via sysfs seems not
>> +	 * possible, and applying empty strings doesn't work as expected,
>> +	 * leaving current values untouched.  As a workaround, use
>> +	 * human-readable non-empty strings that exhibit the same behaviour
>> +	 * as if default NULLs were in place.  In case of filter_action
>> +	 * parameter there is no such obvious non-empty string, however,
>> +	 * that's not a problem for us since even if it was previously set
>> +	 * to "skip" and we leave it as is, our "module!=none" default filter
>> +	 * guarantees that no test cases are filtered out to be skipped.
>> +	 */
>> +	const char *defaults[ARRAY_SIZE(kunit_params)] = {
>> +	     /* filter_glob, filter,	     filter_action */
>> +		"*",	     "module!=none", "",
>
>If writing empty string poses a problem, what about writing
>one space? Could it work?

no. we can't write a different value and expect the kernel to treat it
the same. There's no "strip()" happending on the kernel side and
depending on the sysfs file a space might make sense as a real value.

Lucas De Marchi

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

* Re: [PATCH i-g-t v2 6/6] lib/kunit: Process module remove error after list errors
  2024-02-01 16:02     ` Janusz Krzysztofik
@ 2024-02-01 16:59       ` Kamil Konieczny
  0 siblings, 0 replies; 41+ messages in thread
From: Kamil Konieczny @ 2024-02-01 16:59 UTC (permalink / raw)
  To: igt-dev
  Cc: Janusz Krzysztofik, intel-xe, Mauro Carvalho Chehab, Lucas De Marchi

Hi Janusz,
On 2024-02-01 at 17:02:05 +0100, Janusz Krzysztofik wrote:
> Hi Kamil,
> 
> On Thursday, 1 February 2024 15:55:01 CET Kamil Konieczny wrote:
> > Hi Janusz,
> > On 2024-01-31 at 19:03:53 +0100, Janusz Krzysztofik wrote:
> > > Skip on any error from test case list gathering first, then, in
> > > preparation for executing those test cases, on an error from unloading the
> > > test module loaded in list only mode, so it is more clear if listing the
> > > test cases was successful or not.
> > > 
> > > Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
> > > ---
> > >  lib/igt_kmod.c | 4 ++--
> > >  1 file changed, 2 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> > > index 53c54b1a0d..741c7fd055 100644
> > > --- a/lib/igt_kmod.c
> > > +++ b/lib/igt_kmod.c
> > > @@ -1225,11 +1225,11 @@ static void kunit_get_tests(struct igt_list_head 
> *tests,
> > >  		free(case_name);
> > >  	}
> > >  
> > > -	igt_skip_on(kmod_module_remove_module(tst->kmod, 
> KMOD_REMOVE_FORCE));
> > > -
> > >  	igt_skip_on_f(err,
> > >  		      "KTAP parser failed while getting a list of test 
> cases\n");
> > >  	igt_skip_on(igt_list_empty(tests));
> > 
> > This skip_on will prevent module unload below... What about
> > remembering both and skipping on list_empty() only after module unload?
> > For example:
> >     testslist_is_empty = igt_list_empty(tests);
> >     unload_failed = kmod_module_remove_module(tst->kmod, KMOD_REMOVE_FORCE);
> > 
> >     igt_skip_on(testslist_is_empty);
> >     igt_skip_on_f(unload_failed, "kmod %s unload failed\n", tst->kmod);
> 
> As I tried to express in my commit description, test module is unloaded here, 
> after the list of test cases is collected, "in preparation for executing those 
> test cases", and not as a final cleanup.
> 
> kunit_get_tests() is called from inside igt_subtest_with_dynamic() before any 
> calls to igt_dynamic() from where test cases are executed.  If 
> kunit_get_tests() skips for any reason then no test cases provided by that 
> module will be executed, then unloading the module is not required.  An 
> attempt to unload it if still loaded will be take from the trailing 
> igt_fixture section of igt_kunit() via a call to igt_ktest_end().
> 
> Is the above clarification sufficient for you?  
> 
> Thanks,
> Janusz

ok, thank you for explaining this,

Reviewed-by: Kamil Konieczny <kamil.konieczny@linux.intel.com>

> 
> > 
> > 
> > Regards,
> > Kamil
> > 
> > > +
> > > +	igt_skip_on(kmod_module_remove_module(tst->kmod, 
> KMOD_REMOVE_FORCE));
> > >  }
> > >  
> > >  static void __igt_kunit(struct igt_ktest *tst,
> > 
> 
> 
> 
> 

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

end of thread, other threads:[~2024-02-01 16:59 UTC | newest]

Thread overview: 41+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-31 18:03 [PATCH i-g-t v2 0/6] lib/kunit: Support writable filter* parameters of kunit module Janusz Krzysztofik
2024-01-31 18:03 ` Janusz Krzysztofik
2024-01-31 18:03 ` [PATCH i-g-t v2 1/6] lib/kunit: Skip on empty list of test cases Janusz Krzysztofik
2024-01-31 18:03   ` Janusz Krzysztofik
2024-02-01 14:30   ` Kamil Konieczny
2024-01-31 18:03 ` [PATCH i-g-t v2 2/6] lib/kmode: Prepare open_parameters() helper for reuse by kunit Janusz Krzysztofik
2024-01-31 18:03   ` Janusz Krzysztofik
2024-02-01 14:37   ` Kamil Konieczny
2024-01-31 18:03 ` [PATCH i-g-t v2 3/6] lib/kunit: Unload base KUnit module only before reloading it Janusz Krzysztofik
2024-01-31 18:03   ` Janusz Krzysztofik
2024-01-31 22:46   ` Lucas De Marchi
2024-01-31 22:46     ` Lucas De Marchi
2024-02-01 10:24     ` Janusz Krzysztofik
2024-02-01 10:24       ` Janusz Krzysztofik
2024-01-31 18:03 ` [PATCH i-g-t v2 4/6] lib/kunit: Support writable filter* parameters of kunit module Janusz Krzysztofik
2024-01-31 18:03   ` Janusz Krzysztofik
2024-02-01  1:01   ` Lucas De Marchi
2024-02-01  1:01     ` Lucas De Marchi
2024-02-01 11:03     ` Janusz Krzysztofik
2024-02-01 11:03       ` Janusz Krzysztofik
2024-02-01 14:30       ` Lucas De Marchi
2024-02-01 15:07   ` Kamil Konieczny
2024-02-01 16:13     ` Janusz Krzysztofik
2024-02-01 16:22     ` Lucas De Marchi
2024-01-31 18:03 ` [PATCH i-g-t v2 5/6] lib/kunit: Report early kernel taints explicitly Janusz Krzysztofik
2024-01-31 18:03   ` Janusz Krzysztofik
2024-02-01 14:38   ` Kamil Konieczny
2024-01-31 18:03 ` [PATCH i-g-t v2 6/6] lib/kunit: Process module remove error after list errors Janusz Krzysztofik
2024-01-31 18:03   ` Janusz Krzysztofik
2024-02-01 14:55   ` Kamil Konieczny
2024-02-01 16:02     ` Janusz Krzysztofik
2024-02-01 16:59       ` Kamil Konieczny
2024-01-31 18:16 ` ✗ CI.Patch_applied: failure for lib/kunit: Support writable filter* parameters of kunit module (rev2) Patchwork
2024-01-31 18:36 ` ✗ CI.xeBAT: " Patchwork
2024-01-31 19:22   ` Janusz Krzysztofik
2024-01-31 20:51     ` Lucas De Marchi
2024-02-01 11:06       ` Janusz Krzysztofik
2024-02-01 14:13         ` Lucas De Marchi
2024-02-01 15:38           ` Janusz Krzysztofik
2024-01-31 18:55 ` ✓ Fi.CI.BAT: success " Patchwork
2024-01-31 20:04 ` ✗ Fi.CI.IGT: failure " 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.