All of lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH i-g-t 1/3] lib/igt_core: Make assert on invalid magic blocks nesting more verbose
@ 2020-05-04 11:26 Arkadiusz Hiler
  2020-05-04 11:26 ` [igt-dev] [PATCH i-g-t 2/3] lib/igt_core: Disallow nesting of igt_dynamic inside igt_dynamic Arkadiusz Hiler
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: Arkadiusz Hiler @ 2020-05-04 11:26 UTC (permalink / raw)
  To: igt-dev

Instead of ending the execution with cryptic assert let's actually print
a message explaining the reason and point towards igt_core's documentation.

I am sticking with assert() instead of abort() because of the
semi-useful stacktraces it produces.

Signed-off-by: Arkadiusz Hiler <arkadiusz.hiler@intel.com>
---
 lib/igt_core.c | 55 ++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 42 insertions(+), 13 deletions(-)

diff --git a/lib/igt_core.c b/lib/igt_core.c
index 3f7b9f68..43f0ba8b 100644
--- a/lib/igt_core.c
+++ b/lib/igt_core.c
@@ -343,6 +343,21 @@ static bool stderr_needs_sentinel = false;
 
 static int _igt_dynamic_tests_executed = -1;
 
+__attribute__((format(printf, 2, 3)))
+static void internal_assert(bool cond, const char *format, ...)
+{
+	if (!cond) {
+		va_list ap;
+
+		va_start(ap, format);
+		vfprintf(stderr, format, ap);
+		va_end(ap);
+		fprintf(stderr, "please refer to lib/igt_core documentation\n");
+
+		assert(0);
+	}
+}
+
 const char *igt_test_name(void)
 {
 	return command_str;
@@ -540,8 +555,12 @@ uint64_t igt_nsec_elapsed(struct timespec *start)
 
 bool __igt_fixture(void)
 {
-	assert(!in_fixture);
-	assert(test_with_subtests);
+	internal_assert(!in_fixture,
+			"nesting multiple igt_fixtures is invalid\n");
+	internal_assert(!in_subtest,
+			"nesting igt_fixture in igt_subtest is invalid\n");
+	internal_assert(test_with_subtests,
+			"igt_fixture in igt_simple_main is invalid\n");
 
 	if (igt_only_list_subtests())
 		return false;
@@ -1202,7 +1221,9 @@ static bool valid_name_for_subtest(const char *subtest_name)
  */
 bool __igt_run_subtest(const char *subtest_name, const char *file, const int line)
 {
-	assert(!igt_can_fail());
+	internal_assert(!igt_can_fail(),
+			"igt_subtest can be nested only in igt_main"
+			" or igt_subtest_group\n");
 
 	if (!valid_name_for_subtest(subtest_name)) {
 		igt_critical("Invalid subtest name \"%s\".\n",
@@ -1257,8 +1278,8 @@ bool __igt_run_subtest(const char *subtest_name, const char *file, const int lin
 
 bool __igt_run_dynamic_subtest(const char *dynamic_subtest_name)
 {
-	assert(in_subtest);
-	assert(_igt_dynamic_tests_executed >= 0);
+	internal_assert(in_subtest && _igt_dynamic_tests_executed >= 0,
+			"igt_dynamic is allowed only inside igt_subtest_with_dynamic\n");
 
 	if (!valid_name_for_subtest(dynamic_subtest_name)) {
 			igt_critical("Invalid dynamic subtest name \"%s\".\n",
@@ -1311,7 +1332,8 @@ bool igt_only_list_subtests(void)
 
 void __igt_subtest_group_save(int *save, int *desc)
 {
-	assert(test_with_subtests);
+	internal_assert(test_with_subtests,
+			"igt_subtest_group is not allowed in igt_simple_main\n");
 
 	if (__current_description[0] != '\0') {
 		struct description_node *new = calloc(1, sizeof(*new));
@@ -1414,7 +1436,8 @@ void igt_skip(const char *f, ...)
 	va_list args;
 	skipped_one = true;
 
-	assert(!test_child);
+	internal_assert(!test_child,
+			"skips are not allowed in forks\n");
 
 	if (!igt_only_list_subtests()) {
 		va_start(args, f);
@@ -1427,7 +1450,9 @@ void igt_skip(const char *f, ...)
 		exit_subtest("SKIP");
 	} else if (test_with_subtests) {
 		skip_subtests_henceforth = SKIP;
-		assert(in_fixture);
+		internal_assert(in_fixture,
+			"skipping is allowed only in fixtures, subtests"
+			" or igt_simple_main\n");
 		__igt_fixture_end();
 	} else {
 		igt_exitcode = IGT_EXIT_SKIP;
@@ -1547,7 +1572,8 @@ void igt_fail(int exitcode)
 	if (in_subtest) {
 		exit_subtest("FAIL");
 	} else {
-		assert(igt_can_fail());
+		internal_assert(igt_can_fail(), "failing test is only allowed"
+				" in fixtures, subtests and igt_simple_main");
 
 		if (in_fixture) {
 			skip_subtests_henceforth = FAIL;
@@ -1612,8 +1638,9 @@ void igt_describe_f(const char *fmt, ...)
 	int ret;
 	va_list args;
 
-	if (in_subtest && _igt_dynamic_tests_executed >= 0)
-		assert(!"Documenting dynamic subsubtests is impossible. Document the subtest instead.");
+	internal_assert(!in_subtest || _igt_dynamic_tests_executed < 0,
+			"Documenting dynamic subsubtests is impossible."
+			" Document the subtest instead.");
 
 	if (!describe_subtests)
 		return;
@@ -2224,8 +2251,10 @@ static void children_exit_handler(int sig)
 
 bool __igt_fork(void)
 {
-	assert(!test_with_subtests || in_subtest);
-	assert(!test_child);
+	internal_assert(!test_with_subtests || in_subtest,
+			"forking is only allowed in subtests or igt_simple_main\n");
+	internal_assert(!test_child,
+			"forking is not allowed from already forked children\n");
 
 	igt_install_exit_handler(children_exit_handler);
 
-- 
2.25.2

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

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

* [igt-dev] [PATCH i-g-t 2/3] lib/igt_core: Disallow nesting of igt_dynamic inside igt_dynamic
  2020-05-04 11:26 [igt-dev] [PATCH i-g-t 1/3] lib/igt_core: Make assert on invalid magic blocks nesting more verbose Arkadiusz Hiler
@ 2020-05-04 11:26 ` Arkadiusz Hiler
  2020-05-05  6:36   ` Petri Latvala
  2020-05-04 11:26 ` [igt-dev] [PATCH i-g-t 3/3] lib/tests: Add tests for magic control blocks nesting Arkadiusz Hiler
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Arkadiusz Hiler @ 2020-05-04 11:26 UTC (permalink / raw)
  To: igt-dev

igt_dynamic is allowed only inside igt_subtest_with_dynamic

Signed-off-by: Arkadiusz Hiler <arkadiusz.hiler@intel.com>
---
 lib/igt_core.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/lib/igt_core.c b/lib/igt_core.c
index 43f0ba8b..662a0986 100644
--- a/lib/igt_core.c
+++ b/lib/igt_core.c
@@ -1280,6 +1280,8 @@ bool __igt_run_dynamic_subtest(const char *dynamic_subtest_name)
 {
 	internal_assert(in_subtest && _igt_dynamic_tests_executed >= 0,
 			"igt_dynamic is allowed only inside igt_subtest_with_dynamic\n");
+	internal_assert(!in_dynamic_subtest,
+			"igt_dynamic is not allowed to be nested in another igt_dynamic\n");
 
 	if (!valid_name_for_subtest(dynamic_subtest_name)) {
 			igt_critical("Invalid dynamic subtest name \"%s\".\n",
-- 
2.25.2

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

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

* [igt-dev] [PATCH i-g-t 3/3] lib/tests: Add tests for magic control blocks nesting
  2020-05-04 11:26 [igt-dev] [PATCH i-g-t 1/3] lib/igt_core: Make assert on invalid magic blocks nesting more verbose Arkadiusz Hiler
  2020-05-04 11:26 ` [igt-dev] [PATCH i-g-t 2/3] lib/igt_core: Disallow nesting of igt_dynamic inside igt_dynamic Arkadiusz Hiler
@ 2020-05-04 11:26 ` Arkadiusz Hiler
  2020-05-05  6:41   ` Petri Latvala
  2020-05-04 12:15 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/3] lib/igt_core: Make assert on invalid magic blocks nesting more verbose Patchwork
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Arkadiusz Hiler @ 2020-05-04 11:26 UTC (permalink / raw)
  To: igt-dev; +Cc: Petri Latvala

Cc: Petri Latvala <petri.latvala@intel.com>
Signed-off-by: Arkadiusz Hiler <arkadiusz.hiler@intel.com>
---
 lib/tests/igt_nesting.c      | 261 +++++++++++++++++++++++++++++++++++
 lib/tests/igt_tests_common.h |   5 +
 lib/tests/meson.build        |   1 +
 3 files changed, 267 insertions(+)
 create mode 100644 lib/tests/igt_nesting.c

diff --git a/lib/tests/igt_nesting.c b/lib/tests/igt_nesting.c
new file mode 100644
index 00000000..de674b6b
--- /dev/null
+++ b/lib/tests/igt_nesting.c
@@ -0,0 +1,261 @@
+/*
+ * Copyright © 2020 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ */
+
+#include "igt_core.h"
+#include "igt_tests_common.h"
+#include "drmtest.h"
+
+char test[] = "test";
+char *fake_argv[] = { test };
+int fake_argc = ARRAY_SIZE(fake_argv);
+
+static void all_valid_simple_test(void)
+{
+	igt_simple_init(fake_argc, fake_argv);
+
+	igt_skip("o:");
+	igt_assert(false);
+
+	igt_exit();
+}
+
+static void all_valid(void)
+{
+	igt_subtest_init(fake_argc, fake_argv);
+
+	igt_fixture {
+	}
+
+	igt_subtest_group {
+		igt_subtest_group {
+		}
+
+		igt_fixture {
+		}
+
+		igt_subtest("a")
+		{
+			igt_skip("o:\n");
+		}
+
+		igt_subtest("b")
+		{
+			igt_assert(false);
+		}
+
+		igt_subtest_with_dynamic("c") {
+			igt_dynamic("d")
+			{
+				igt_skip("o:\n");
+			}
+
+			igt_dynamic("e")
+			{
+				igt_assert(false);
+			}
+		}
+
+		igt_subtest_with_dynamic("f") {
+			igt_skip("o:\n");
+		}
+
+		igt_subtest_with_dynamic("g") {
+		}
+	}
+
+	igt_exit();
+}
+
+static void invalid_subtest_in_simple_test(void)
+{
+	igt_simple_init(fake_argc, fake_argv);
+
+	igt_subtest("a") {
+	}
+
+	igt_exit();
+}
+
+static void invalid_subtest_group_in_simple_test(void)
+{
+	igt_simple_init(fake_argc, fake_argv);
+
+	igt_subtest_group {
+	}
+
+	igt_exit();
+}
+
+static void invalid_subtest_with_dynamic_in_simple_test(void)
+{
+	igt_simple_init(fake_argc, fake_argv);
+
+	igt_subtest_with_dynamic("a") {
+	}
+
+	igt_exit();
+}
+
+static void invalid_dynamic_in_simple_test(void)
+{
+	igt_simple_init(fake_argc, fake_argv);
+
+	igt_dynamic("a") {
+	}
+
+	igt_exit();
+}
+
+static void invalid_fixture_in_fixture(void)
+{
+	igt_subtest_init(fake_argc, fake_argv);
+
+	igt_fixture {
+		igt_fixture {
+		}
+	}
+
+	igt_exit();
+}
+
+static void invalid_subtest_in_subtest(void)
+{
+	igt_subtest_init(fake_argc, fake_argv);
+
+	igt_subtest("a") {
+		igt_subtest("b") {
+		}
+	}
+
+	igt_exit();
+}
+
+static void invalid_top_level_dynamic(void)
+{
+	igt_subtest_init(fake_argc, fake_argv);
+
+	igt_dynamic("a") {
+	}
+
+	igt_exit();
+}
+
+static void invalid_dynamic_in_regular_subtest(void)
+{
+	igt_subtest_init(fake_argc, fake_argv);
+
+	igt_subtest("a") {
+		igt_dynamic("b") {
+		}
+	}
+
+	igt_exit();
+}
+
+static void invalid_fixture_in_subtest(void)
+{
+	igt_subtest_init(fake_argc, fake_argv);
+
+	igt_subtest("a") {
+		igt_fixture {
+		}
+	}
+
+	igt_exit();
+}
+
+static void invalid_top_level_skip(void)
+{
+	igt_subtest_init(fake_argc, fake_argv);
+
+	igt_skip("o:\n");
+
+	igt_exit();
+}
+
+static void invalid_top_level_assert(void)
+{
+	igt_subtest_init(fake_argc, fake_argv);
+
+	igt_assert(false);
+
+	igt_exit();
+}
+
+static void invalid_dynamic_in_dynamic(void)
+{
+	igt_subtest_init(fake_argc, fake_argv);
+
+	igt_subtest_with_dynamic("a") {
+		igt_dynamic("b") {
+			igt_dynamic("c") {
+			}
+		}
+	}
+
+	igt_exit();
+}
+
+typedef void (*fork_fun)(void);
+
+int main(int argc, char **argv)
+{
+	int status;
+
+	/* test the invalid nesting scenarios */ {
+		fork_fun should_sigabort[] = {
+			invalid_subtest_in_simple_test,
+			invalid_subtest_group_in_simple_test,
+			invalid_subtest_with_dynamic_in_simple_test,
+			invalid_dynamic_in_simple_test,
+			invalid_fixture_in_fixture,
+			invalid_subtest_in_subtest,
+			invalid_top_level_dynamic,
+			invalid_dynamic_in_regular_subtest,
+			invalid_fixture_in_subtest,
+			invalid_top_level_skip,
+			invalid_top_level_assert,
+			invalid_dynamic_in_dynamic,
+		};
+
+		for (int i = 0; i < ARRAY_SIZE(should_sigabort); ++i) {
+			status = do_fork(should_sigabort[i]);
+			internal_assert_wsignaled(status, SIGABRT);
+		}
+	}
+
+	/* test the valid nesting scenarios */ {
+		fork_fun should_not_signal[] = {
+			all_valid_simple_test,
+			all_valid,
+		};
+
+		for (int i = 0; i < ARRAY_SIZE(should_not_signal); ++i) {
+			status = do_fork(should_not_signal[i]);
+			internal_assert_not_wsignaled(status);
+		}
+	}
+
+	return 0;
+}
diff --git a/lib/tests/igt_tests_common.h b/lib/tests/igt_tests_common.h
index f285d657..fa8ad920 100644
--- a/lib/tests/igt_tests_common.h
+++ b/lib/tests/igt_tests_common.h
@@ -51,6 +51,11 @@ static inline void internal_assert_wsignaled(int wstatus, int signal)
 			WTERMSIG(wstatus) == signal);
 }
 
+static inline void internal_assert_not_wsignaled(int wstatus)
+{
+	internal_assert(!WIFSIGNALED(wstatus));
+}
+
 static inline int do_fork(void (*test_to_run)(void))
 {
 	int pid, status;
diff --git a/lib/tests/meson.build b/lib/tests/meson.build
index 22aa19da..47ef303a 100644
--- a/lib/tests/meson.build
+++ b/lib/tests/meson.build
@@ -12,6 +12,7 @@ lib_tests = [
 	'igt_fork_helper',
 	'igt_list_only',
 	'igt_invalid_subtest_name',
+	'igt_nesting',
 	'igt_no_exit',
 	'igt_segfault',
 	'igt_simulation',
-- 
2.25.2

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

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

* [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/3] lib/igt_core: Make assert on invalid magic blocks nesting more verbose
  2020-05-04 11:26 [igt-dev] [PATCH i-g-t 1/3] lib/igt_core: Make assert on invalid magic blocks nesting more verbose Arkadiusz Hiler
  2020-05-04 11:26 ` [igt-dev] [PATCH i-g-t 2/3] lib/igt_core: Disallow nesting of igt_dynamic inside igt_dynamic Arkadiusz Hiler
  2020-05-04 11:26 ` [igt-dev] [PATCH i-g-t 3/3] lib/tests: Add tests for magic control blocks nesting Arkadiusz Hiler
@ 2020-05-04 12:15 ` Patchwork
  2020-05-04 21:33 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
  2020-05-05  6:36 ` [igt-dev] [PATCH i-g-t 1/3] " Petri Latvala
  4 siblings, 0 replies; 10+ messages in thread
From: Patchwork @ 2020-05-04 12:15 UTC (permalink / raw)
  To: Arkadiusz Hiler; +Cc: igt-dev

== Series Details ==

Series: series starting with [i-g-t,1/3] lib/igt_core: Make assert on invalid magic blocks nesting more verbose
URL   : https://patchwork.freedesktop.org/series/76900/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_8417 -> IGTPW_4529
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

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

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

### IGT changes ###

#### Issues hit ####

  * igt@i915_selftest@live@gt_timelines:
    - fi-bwr-2160:        [PASS][1] -> [INCOMPLETE][2] ([i915#489])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/fi-bwr-2160/igt@i915_selftest@live@gt_timelines.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/fi-bwr-2160/igt@i915_selftest@live@gt_timelines.html

  
#### Warnings ####

  * igt@i915_pm_rpm@module-reload:
    - fi-kbl-x1275:       [SKIP][3] ([fdo#109271]) -> [FAIL][4] ([i915#62])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/fi-kbl-x1275/igt@i915_pm_rpm@module-reload.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/fi-kbl-x1275/igt@i915_pm_rpm@module-reload.html

  
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [i915#489]: https://gitlab.freedesktop.org/drm/intel/issues/489
  [i915#62]: https://gitlab.freedesktop.org/drm/intel/issues/62


Participating hosts (52 -> 44)
------------------------------

  Missing    (8): fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 fi-kbl-7560u fi-byt-clapper fi-bdw-samus 


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

  * CI: CI-20190529 -> None
  * IGT: IGT_5628 -> IGTPW_4529

  CI-20190529: 20190529
  CI_DRM_8417: 7f9142d29c789842bd79245dd6623df9f15ba746 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_4529: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/index.html
  IGT_5628: 652a3fd8966345fa5498904ce80a2027a6782783 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/index.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

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

* [igt-dev] ✗ Fi.CI.IGT: failure for series starting with [i-g-t,1/3] lib/igt_core: Make assert on invalid magic blocks nesting more verbose
  2020-05-04 11:26 [igt-dev] [PATCH i-g-t 1/3] lib/igt_core: Make assert on invalid magic blocks nesting more verbose Arkadiusz Hiler
                   ` (2 preceding siblings ...)
  2020-05-04 12:15 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/3] lib/igt_core: Make assert on invalid magic blocks nesting more verbose Patchwork
@ 2020-05-04 21:33 ` Patchwork
  2020-05-05 12:33   ` Arkadiusz Hiler
  2020-05-05  6:36 ` [igt-dev] [PATCH i-g-t 1/3] " Petri Latvala
  4 siblings, 1 reply; 10+ messages in thread
From: Patchwork @ 2020-05-04 21:33 UTC (permalink / raw)
  To: Arkadiusz Hiler; +Cc: igt-dev

== Series Details ==

Series: series starting with [i-g-t,1/3] lib/igt_core: Make assert on invalid magic blocks nesting more verbose
URL   : https://patchwork.freedesktop.org/series/76900/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_8417_full -> IGTPW_4529_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with IGTPW_4529_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_4529_full, please notify your bug team 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_4529/index.html

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@gem_ctx_persistence@engines-hostile@bcs0:
    - shard-kbl:          [PASS][1] -> [FAIL][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-kbl7/igt@gem_ctx_persistence@engines-hostile@bcs0.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-kbl6/igt@gem_ctx_persistence@engines-hostile@bcs0.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_ctx_persistence@engines-hostile@bcs0:
    - shard-iclb:         [PASS][3] -> [FAIL][4] ([i915#1622])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-iclb5/igt@gem_ctx_persistence@engines-hostile@bcs0.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-iclb6/igt@gem_ctx_persistence@engines-hostile@bcs0.html

  * igt@gem_eio@in-flight-suspend:
    - shard-apl:          [PASS][5] -> [DMESG-WARN][6] ([i915#180])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-apl8/igt@gem_eio@in-flight-suspend.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-apl6/igt@gem_eio@in-flight-suspend.html

  * igt@gen9_exec_parse@allowed-all:
    - shard-kbl:          [PASS][7] -> [DMESG-WARN][8] ([i915#1436] / [i915#716])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-kbl7/igt@gen9_exec_parse@allowed-all.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-kbl3/igt@gen9_exec_parse@allowed-all.html

  * igt@kms_cursor_crc@pipe-a-cursor-suspend:
    - shard-kbl:          [PASS][9] -> [DMESG-WARN][10] ([i915#180]) +7 similar issues
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-kbl3/igt@kms_cursor_crc@pipe-a-cursor-suspend.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-kbl2/igt@kms_cursor_crc@pipe-a-cursor-suspend.html

  * igt@kms_cursor_legacy@2x-long-flip-vs-cursor-atomic:
    - shard-glk:          [PASS][11] -> [FAIL][12] ([i915#72])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-glk6/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-atomic.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-glk9/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-atomic.html

  * igt@kms_draw_crc@draw-method-rgb565-mmap-wc-untiled:
    - shard-glk:          [PASS][13] -> [FAIL][14] ([i915#52] / [i915#54]) +1 similar issue
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-glk1/igt@kms_draw_crc@draw-method-rgb565-mmap-wc-untiled.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-glk2/igt@kms_draw_crc@draw-method-rgb565-mmap-wc-untiled.html

  * igt@kms_mmap_write_crc@main:
    - shard-kbl:          [PASS][15] -> [FAIL][16] ([i915#93] / [i915#95])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-kbl2/igt@kms_mmap_write_crc@main.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-kbl7/igt@kms_mmap_write_crc@main.html

  * igt@kms_pipe_crc_basic@read-crc-pipe-a:
    - shard-apl:          [PASS][17] -> [FAIL][18] ([i915#53] / [i915#95])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-apl3/igt@kms_pipe_crc_basic@read-crc-pipe-a.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-apl8/igt@kms_pipe_crc_basic@read-crc-pipe-a.html
    - shard-kbl:          [PASS][19] -> [FAIL][20] ([i915#53] / [i915#93] / [i915#95])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-kbl2/igt@kms_pipe_crc_basic@read-crc-pipe-a.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-kbl1/igt@kms_pipe_crc_basic@read-crc-pipe-a.html

  * igt@kms_plane_cursor@pipe-a-overlay-size-64:
    - shard-apl:          [PASS][21] -> [FAIL][22] ([i915#1559] / [i915#95])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-apl2/igt@kms_plane_cursor@pipe-a-overlay-size-64.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-apl2/igt@kms_plane_cursor@pipe-a-overlay-size-64.html

  * igt@kms_psr@psr2_primary_page_flip:
    - shard-iclb:         [PASS][23] -> [SKIP][24] ([fdo#109441]) +2 similar issues
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-iclb2/igt@kms_psr@psr2_primary_page_flip.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-iclb6/igt@kms_psr@psr2_primary_page_flip.html

  
#### Possible fixes ####

  * igt@gem_exec_suspend@basic-s0:
    - shard-tglb:         [INCOMPLETE][25] -> [PASS][26]
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-tglb8/igt@gem_exec_suspend@basic-s0.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-tglb2/igt@gem_exec_suspend@basic-s0.html

  * igt@kms_cursor_crc@pipe-a-cursor-128x42-random:
    - shard-kbl:          [FAIL][27] ([i915#54] / [i915#93] / [i915#95]) -> [PASS][28] +1 similar issue
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-kbl3/igt@kms_cursor_crc@pipe-a-cursor-128x42-random.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-kbl4/igt@kms_cursor_crc@pipe-a-cursor-128x42-random.html

  * igt@kms_cursor_legacy@all-pipes-torture-move:
    - shard-iclb:         [DMESG-WARN][29] ([i915#128]) -> [PASS][30]
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-iclb4/igt@kms_cursor_legacy@all-pipes-torture-move.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-iclb7/igt@kms_cursor_legacy@all-pipes-torture-move.html

  * igt@kms_draw_crc@draw-method-rgb565-render-untiled:
    - shard-glk:          [FAIL][31] ([i915#52] / [i915#54]) -> [PASS][32] +5 similar issues
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-glk9/igt@kms_draw_crc@draw-method-rgb565-render-untiled.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-glk6/igt@kms_draw_crc@draw-method-rgb565-render-untiled.html

  * {igt@kms_flip@flip-vs-suspend-interruptible@c-dp1}:
    - shard-apl:          [DMESG-WARN][33] ([i915#180]) -> [PASS][34] +5 similar issues
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-apl4/igt@kms_flip@flip-vs-suspend-interruptible@c-dp1.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-apl3/igt@kms_flip@flip-vs-suspend-interruptible@c-dp1.html

  * {igt@kms_flip@flip-vs-suspend-interruptible@c-hdmi-a1}:
    - shard-hsw:          [INCOMPLETE][35] ([i915#61]) -> [PASS][36]
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-hsw4/igt@kms_flip@flip-vs-suspend-interruptible@c-hdmi-a1.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-hsw7/igt@kms_flip@flip-vs-suspend-interruptible@c-hdmi-a1.html

  * {igt@kms_flip@flip-vs-suspend@a-dp1}:
    - shard-kbl:          [DMESG-WARN][37] ([i915#180] / [i915#93] / [i915#95]) -> [PASS][38]
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-kbl2/igt@kms_flip@flip-vs-suspend@a-dp1.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-kbl3/igt@kms_flip@flip-vs-suspend@a-dp1.html

  * {igt@kms_flip@flip-vs-suspend@c-dp1}:
    - shard-kbl:          [DMESG-WARN][39] ([i915#180]) -> [PASS][40] +1 similar issue
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-kbl2/igt@kms_flip@flip-vs-suspend@c-dp1.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-kbl3/igt@kms_flip@flip-vs-suspend@c-dp1.html

  * igt@kms_flip_tiling@flip-changes-tiling-yf:
    - shard-kbl:          [FAIL][41] ([i915#699] / [i915#93] / [i915#95]) -> [PASS][42]
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-kbl3/igt@kms_flip_tiling@flip-changes-tiling-yf.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-kbl4/igt@kms_flip_tiling@flip-changes-tiling-yf.html
    - shard-apl:          [FAIL][43] ([i915#95]) -> [PASS][44] +1 similar issue
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-apl8/igt@kms_flip_tiling@flip-changes-tiling-yf.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-apl6/igt@kms_flip_tiling@flip-changes-tiling-yf.html

  * igt@kms_plane_alpha_blend@pipe-a-coverage-7efc:
    - shard-apl:          [FAIL][45] ([fdo#108145] / [i915#265] / [i915#95]) -> [PASS][46] +1 similar issue
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-apl8/igt@kms_plane_alpha_blend@pipe-a-coverage-7efc.html
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-apl2/igt@kms_plane_alpha_blend@pipe-a-coverage-7efc.html

  * igt@kms_psr@psr2_primary_mmap_cpu:
    - shard-iclb:         [SKIP][47] ([fdo#109441]) -> [PASS][48] +2 similar issues
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-iclb4/igt@kms_psr@psr2_primary_mmap_cpu.html
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-iclb2/igt@kms_psr@psr2_primary_mmap_cpu.html

  * {igt@perf@blocking-parameterized}:
    - shard-iclb:         [FAIL][49] ([i915#1542]) -> [PASS][50]
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-iclb7/igt@perf@blocking-parameterized.html
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-iclb1/igt@perf@blocking-parameterized.html

  
#### Warnings ####

  * igt@i915_pm_dc@dc3co-vpb-simulation:
    - shard-iclb:         [SKIP][51] ([i915#588]) -> [SKIP][52] ([i915#658])
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-iclb2/igt@i915_pm_dc@dc3co-vpb-simulation.html
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-iclb6/igt@i915_pm_dc@dc3co-vpb-simulation.html

  * igt@i915_pm_rpm@pm-tiling:
    - shard-snb:          [INCOMPLETE][53] ([i915#82]) -> [SKIP][54] ([fdo#109271])
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-snb1/igt@i915_pm_rpm@pm-tiling.html
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-snb6/igt@i915_pm_rpm@pm-tiling.html

  * igt@kms_content_protection@uevent:
    - shard-kbl:          [FAIL][55] ([i915#357] / [i915#93] / [i915#95]) -> [FAIL][56] ([i915#357])
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-kbl7/igt@kms_content_protection@uevent.html
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-kbl3/igt@kms_content_protection@uevent.html
    - shard-apl:          [FAIL][57] ([i915#357] / [i915#95]) -> [FAIL][58] ([i915#357])
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-apl2/igt@kms_content_protection@uevent.html
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-apl2/igt@kms_content_protection@uevent.html

  * igt@kms_fbcon_fbt@fbc-suspend:
    - shard-kbl:          [FAIL][59] ([i915#93] / [i915#95]) -> [DMESG-FAIL][60] ([i915#180] / [i915#95])
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-kbl7/igt@kms_fbcon_fbt@fbc-suspend.html
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-kbl4/igt@kms_fbcon_fbt@fbc-suspend.html

  * igt@kms_plane@plane-panning-bottom-right-suspend-pipe-c-planes:
    - shard-kbl:          [DMESG-WARN][61] ([i915#180]) -> [INCOMPLETE][62] ([i915#155])
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-kbl4/igt@kms_plane@plane-panning-bottom-right-suspend-pipe-c-planes.html
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-kbl2/igt@kms_plane@plane-panning-bottom-right-suspend-pipe-c-planes.html

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

  [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
  [i915#128]: https://gitlab.freedesktop.org/drm/intel/issues/128
  [i915#1436]: https://gitlab.freedesktop.org/drm/intel/issues/1436
  [i915#1542]: https://gitlab.freedesktop.org/drm/intel/issues/1542
  [i915#155]: https://gitlab.freedesktop.org/drm/intel/issues/155
  [i915#1559]: https://gitlab.freedesktop.org/drm/intel/issues/1559
  [i915#1622]: https://gitlab.freedesktop.org/drm/intel/issues/1622
  [i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180
  [i915#265]: https://gitlab.freedesktop.org/drm/intel/issues/265
  [i915#357]: https://gitlab.freedesktop.org/drm/intel/issues/357
  [i915#52]: https://gitlab.freedesktop.org/drm/intel/issues/52
  [i915#53]: https://gitlab.freedesktop.org/drm/intel/issues/53
  [i915#54]: https://gitlab.freedesktop.org/drm/intel/issues/54
  [i915#588]: https://gitlab.freedesktop.org/drm/intel/issues/588
  [i915#61]: https://gitlab.freedesktop.org/drm/intel/issues/61
  [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
  [i915#699]: https://gitlab.freedesktop.org/drm/intel/issues/699
  [i915#716]: https://gitlab.freedesktop.org/drm/intel/issues/716
  [i915#72]: https://gitlab.freedesktop.org/drm/intel/issues/72
  [i915#82]: https://gitlab.freedesktop.org/drm/intel/issues/82
  [i915#93]: https://gitlab.freedesktop.org/drm/intel/issues/93
  [i915#95]: https://gitlab.freedesktop.org/drm/intel/issues/95


Participating hosts (10 -> 8)
------------------------------

  Missing    (2): pig-skl-6260u pig-glk-j5005 


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

  * CI: CI-20190529 -> None
  * IGT: IGT_5628 -> IGTPW_4529
  * Piglit: piglit_4509 -> None

  CI-20190529: 20190529
  CI_DRM_8417: 7f9142d29c789842bd79245dd6623df9f15ba746 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_4529: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/index.html
  IGT_5628: 652a3fd8966345fa5498904ce80a2027a6782783 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/index.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

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

* Re: [igt-dev] [PATCH i-g-t 1/3] lib/igt_core: Make assert on invalid magic blocks nesting more verbose
  2020-05-04 11:26 [igt-dev] [PATCH i-g-t 1/3] lib/igt_core: Make assert on invalid magic blocks nesting more verbose Arkadiusz Hiler
                   ` (3 preceding siblings ...)
  2020-05-04 21:33 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
@ 2020-05-05  6:36 ` Petri Latvala
  4 siblings, 0 replies; 10+ messages in thread
From: Petri Latvala @ 2020-05-05  6:36 UTC (permalink / raw)
  To: Arkadiusz Hiler; +Cc: igt-dev

On Mon, May 04, 2020 at 02:26:21PM +0300, Arkadiusz Hiler wrote:
> Instead of ending the execution with cryptic assert let's actually print
> a message explaining the reason and point towards igt_core's documentation.
> 
> I am sticking with assert() instead of abort() because of the
> semi-useful stacktraces it produces.
> 
> Signed-off-by: Arkadiusz Hiler <arkadiusz.hiler@intel.com>
> ---
>  lib/igt_core.c | 55 ++++++++++++++++++++++++++++++++++++++------------
>  1 file changed, 42 insertions(+), 13 deletions(-)
> 
> diff --git a/lib/igt_core.c b/lib/igt_core.c
> index 3f7b9f68..43f0ba8b 100644
> --- a/lib/igt_core.c
> +++ b/lib/igt_core.c
> @@ -343,6 +343,21 @@ static bool stderr_needs_sentinel = false;
>  
>  static int _igt_dynamic_tests_executed = -1;
>  
> +__attribute__((format(printf, 2, 3)))
> +static void internal_assert(bool cond, const char *format, ...)
> +{
> +	if (!cond) {
> +		va_list ap;
> +
> +		va_start(ap, format);
> +		vfprintf(stderr, format, ap);
> +		va_end(ap);
> +		fprintf(stderr, "please refer to lib/igt_core documentation\n");
> +
> +		assert(0);
> +	}
> +}
> +
>  const char *igt_test_name(void)
>  {
>  	return command_str;
> @@ -540,8 +555,12 @@ uint64_t igt_nsec_elapsed(struct timespec *start)
>  
>  bool __igt_fixture(void)
>  {
> -	assert(!in_fixture);
> -	assert(test_with_subtests);
> +	internal_assert(!in_fixture,
> +			"nesting multiple igt_fixtures is invalid\n");
> +	internal_assert(!in_subtest,
> +			"nesting igt_fixture in igt_subtest is invalid\n");
> +	internal_assert(test_with_subtests,
> +			"igt_fixture in igt_simple_main is invalid\n");
>  
>  	if (igt_only_list_subtests())
>  		return false;
> @@ -1202,7 +1221,9 @@ static bool valid_name_for_subtest(const char *subtest_name)
>   */
>  bool __igt_run_subtest(const char *subtest_name, const char *file, const int line)
>  {
> -	assert(!igt_can_fail());
> +	internal_assert(!igt_can_fail(),
> +			"igt_subtest can be nested only in igt_main"
> +			" or igt_subtest_group\n");
>  
>  	if (!valid_name_for_subtest(subtest_name)) {
>  		igt_critical("Invalid subtest name \"%s\".\n",
> @@ -1257,8 +1278,8 @@ bool __igt_run_subtest(const char *subtest_name, const char *file, const int lin
>  
>  bool __igt_run_dynamic_subtest(const char *dynamic_subtest_name)
>  {
> -	assert(in_subtest);
> -	assert(_igt_dynamic_tests_executed >= 0);
> +	internal_assert(in_subtest && _igt_dynamic_tests_executed >= 0,
> +			"igt_dynamic is allowed only inside igt_subtest_with_dynamic\n");
>  
>  	if (!valid_name_for_subtest(dynamic_subtest_name)) {
>  			igt_critical("Invalid dynamic subtest name \"%s\".\n",
> @@ -1311,7 +1332,8 @@ bool igt_only_list_subtests(void)
>  
>  void __igt_subtest_group_save(int *save, int *desc)
>  {
> -	assert(test_with_subtests);
> +	internal_assert(test_with_subtests,
> +			"igt_subtest_group is not allowed in igt_simple_main\n");
>  
>  	if (__current_description[0] != '\0') {
>  		struct description_node *new = calloc(1, sizeof(*new));
> @@ -1414,7 +1436,8 @@ void igt_skip(const char *f, ...)
>  	va_list args;
>  	skipped_one = true;
>  
> -	assert(!test_child);
> +	internal_assert(!test_child,
> +			"skips are not allowed in forks\n");
>  
>  	if (!igt_only_list_subtests()) {
>  		va_start(args, f);
> @@ -1427,7 +1450,9 @@ void igt_skip(const char *f, ...)
>  		exit_subtest("SKIP");
>  	} else if (test_with_subtests) {
>  		skip_subtests_henceforth = SKIP;
> -		assert(in_fixture);
> +		internal_assert(in_fixture,
> +			"skipping is allowed only in fixtures, subtests"
> +			" or igt_simple_main\n");
>  		__igt_fixture_end();
>  	} else {
>  		igt_exitcode = IGT_EXIT_SKIP;
> @@ -1547,7 +1572,8 @@ void igt_fail(int exitcode)
>  	if (in_subtest) {
>  		exit_subtest("FAIL");
>  	} else {
> -		assert(igt_can_fail());
> +		internal_assert(igt_can_fail(), "failing test is only allowed"
> +				" in fixtures, subtests and igt_simple_main");
>  
>  		if (in_fixture) {
>  			skip_subtests_henceforth = FAIL;
> @@ -1612,8 +1638,9 @@ void igt_describe_f(const char *fmt, ...)
>  	int ret;
>  	va_list args;
>  
> -	if (in_subtest && _igt_dynamic_tests_executed >= 0)
> -		assert(!"Documenting dynamic subsubtests is impossible. Document the subtest instead.");
> +	internal_assert(!in_subtest || _igt_dynamic_tests_executed < 0,
> +			"Documenting dynamic subsubtests is impossible."
> +			" Document the subtest instead.");

This is the only internal_assert call with capitalized text.

With more consistency applied,

Reviewed-by: Petri Latvala <petri.latvala@intel.com>


>  
>  	if (!describe_subtests)
>  		return;
> @@ -2224,8 +2251,10 @@ static void children_exit_handler(int sig)
>  
>  bool __igt_fork(void)
>  {
> -	assert(!test_with_subtests || in_subtest);
> -	assert(!test_child);
> +	internal_assert(!test_with_subtests || in_subtest,
> +			"forking is only allowed in subtests or igt_simple_main\n");
> +	internal_assert(!test_child,
> +			"forking is not allowed from already forked children\n");
>  
>  	igt_install_exit_handler(children_exit_handler);
>  
> -- 
> 2.25.2
> 
> _______________________________________________
> igt-dev mailing list
> igt-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/igt-dev
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

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

* Re: [igt-dev] [PATCH i-g-t 2/3] lib/igt_core: Disallow nesting of igt_dynamic inside igt_dynamic
  2020-05-04 11:26 ` [igt-dev] [PATCH i-g-t 2/3] lib/igt_core: Disallow nesting of igt_dynamic inside igt_dynamic Arkadiusz Hiler
@ 2020-05-05  6:36   ` Petri Latvala
  0 siblings, 0 replies; 10+ messages in thread
From: Petri Latvala @ 2020-05-05  6:36 UTC (permalink / raw)
  To: Arkadiusz Hiler; +Cc: igt-dev

On Mon, May 04, 2020 at 02:26:22PM +0300, Arkadiusz Hiler wrote:
> igt_dynamic is allowed only inside igt_subtest_with_dynamic
> 
> Signed-off-by: Arkadiusz Hiler <arkadiusz.hiler@intel.com>

Reviewed-by: Petri Latvala <petri.latvala@intel.com>


> ---
>  lib/igt_core.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/lib/igt_core.c b/lib/igt_core.c
> index 43f0ba8b..662a0986 100644
> --- a/lib/igt_core.c
> +++ b/lib/igt_core.c
> @@ -1280,6 +1280,8 @@ bool __igt_run_dynamic_subtest(const char *dynamic_subtest_name)
>  {
>  	internal_assert(in_subtest && _igt_dynamic_tests_executed >= 0,
>  			"igt_dynamic is allowed only inside igt_subtest_with_dynamic\n");
> +	internal_assert(!in_dynamic_subtest,
> +			"igt_dynamic is not allowed to be nested in another igt_dynamic\n");
>  
>  	if (!valid_name_for_subtest(dynamic_subtest_name)) {
>  			igt_critical("Invalid dynamic subtest name \"%s\".\n",
> -- 
> 2.25.2
> 
> _______________________________________________
> igt-dev mailing list
> igt-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/igt-dev
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

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

* Re: [igt-dev] [PATCH i-g-t 3/3] lib/tests: Add tests for magic control blocks nesting
  2020-05-04 11:26 ` [igt-dev] [PATCH i-g-t 3/3] lib/tests: Add tests for magic control blocks nesting Arkadiusz Hiler
@ 2020-05-05  6:41   ` Petri Latvala
  2020-05-05 12:32     ` Arkadiusz Hiler
  0 siblings, 1 reply; 10+ messages in thread
From: Petri Latvala @ 2020-05-05  6:41 UTC (permalink / raw)
  To: Arkadiusz Hiler; +Cc: igt-dev

On Mon, May 04, 2020 at 02:26:23PM +0300, Arkadiusz Hiler wrote:
> Cc: Petri Latvala <petri.latvala@intel.com>
> Signed-off-by: Arkadiusz Hiler <arkadiusz.hiler@intel.com>


Reviewed-by: Petri Latvala <petri.latvala@intel.com>

Is igt_fork usage covered elsewhere?



> ---
>  lib/tests/igt_nesting.c      | 261 +++++++++++++++++++++++++++++++++++
>  lib/tests/igt_tests_common.h |   5 +
>  lib/tests/meson.build        |   1 +
>  3 files changed, 267 insertions(+)
>  create mode 100644 lib/tests/igt_nesting.c
> 
> diff --git a/lib/tests/igt_nesting.c b/lib/tests/igt_nesting.c
> new file mode 100644
> index 00000000..de674b6b
> --- /dev/null
> +++ b/lib/tests/igt_nesting.c
> @@ -0,0 +1,261 @@
> +/*
> + * Copyright © 2020 Intel Corporation
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the "Software"),
> + * to deal in the Software without restriction, including without limitation
> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice (including the next
> + * paragraph) shall be included in all copies or substantial portions of the
> + * Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> + * IN THE SOFTWARE.
> + *
> + */
> +
> +#include "igt_core.h"
> +#include "igt_tests_common.h"
> +#include "drmtest.h"
> +
> +char test[] = "test";
> +char *fake_argv[] = { test };
> +int fake_argc = ARRAY_SIZE(fake_argv);
> +
> +static void all_valid_simple_test(void)
> +{
> +	igt_simple_init(fake_argc, fake_argv);
> +
> +	igt_skip("o:");
> +	igt_assert(false);
> +
> +	igt_exit();
> +}
> +
> +static void all_valid(void)
> +{
> +	igt_subtest_init(fake_argc, fake_argv);
> +
> +	igt_fixture {
> +	}
> +
> +	igt_subtest_group {
> +		igt_subtest_group {
> +		}
> +
> +		igt_fixture {
> +		}
> +
> +		igt_subtest("a")
> +		{
> +			igt_skip("o:\n");
> +		}
> +
> +		igt_subtest("b")
> +		{
> +			igt_assert(false);
> +		}
> +
> +		igt_subtest_with_dynamic("c") {
> +			igt_dynamic("d")
> +			{
> +				igt_skip("o:\n");
> +			}
> +
> +			igt_dynamic("e")
> +			{
> +				igt_assert(false);
> +			}
> +		}
> +
> +		igt_subtest_with_dynamic("f") {
> +			igt_skip("o:\n");
> +		}
> +
> +		igt_subtest_with_dynamic("g") {
> +		}
> +	}
> +
> +	igt_exit();
> +}
> +
> +static void invalid_subtest_in_simple_test(void)
> +{
> +	igt_simple_init(fake_argc, fake_argv);
> +
> +	igt_subtest("a") {
> +	}
> +
> +	igt_exit();
> +}
> +
> +static void invalid_subtest_group_in_simple_test(void)
> +{
> +	igt_simple_init(fake_argc, fake_argv);
> +
> +	igt_subtest_group {
> +	}
> +
> +	igt_exit();
> +}
> +
> +static void invalid_subtest_with_dynamic_in_simple_test(void)
> +{
> +	igt_simple_init(fake_argc, fake_argv);
> +
> +	igt_subtest_with_dynamic("a") {
> +	}
> +
> +	igt_exit();
> +}
> +
> +static void invalid_dynamic_in_simple_test(void)
> +{
> +	igt_simple_init(fake_argc, fake_argv);
> +
> +	igt_dynamic("a") {
> +	}
> +
> +	igt_exit();
> +}
> +
> +static void invalid_fixture_in_fixture(void)
> +{
> +	igt_subtest_init(fake_argc, fake_argv);
> +
> +	igt_fixture {
> +		igt_fixture {
> +		}
> +	}
> +
> +	igt_exit();
> +}
> +
> +static void invalid_subtest_in_subtest(void)
> +{
> +	igt_subtest_init(fake_argc, fake_argv);
> +
> +	igt_subtest("a") {
> +		igt_subtest("b") {
> +		}
> +	}
> +
> +	igt_exit();
> +}
> +
> +static void invalid_top_level_dynamic(void)
> +{
> +	igt_subtest_init(fake_argc, fake_argv);
> +
> +	igt_dynamic("a") {
> +	}
> +
> +	igt_exit();
> +}
> +
> +static void invalid_dynamic_in_regular_subtest(void)
> +{
> +	igt_subtest_init(fake_argc, fake_argv);
> +
> +	igt_subtest("a") {
> +		igt_dynamic("b") {
> +		}
> +	}
> +
> +	igt_exit();
> +}
> +
> +static void invalid_fixture_in_subtest(void)
> +{
> +	igt_subtest_init(fake_argc, fake_argv);
> +
> +	igt_subtest("a") {
> +		igt_fixture {
> +		}
> +	}
> +
> +	igt_exit();
> +}
> +
> +static void invalid_top_level_skip(void)
> +{
> +	igt_subtest_init(fake_argc, fake_argv);
> +
> +	igt_skip("o:\n");
> +
> +	igt_exit();
> +}
> +
> +static void invalid_top_level_assert(void)
> +{
> +	igt_subtest_init(fake_argc, fake_argv);
> +
> +	igt_assert(false);
> +
> +	igt_exit();
> +}
> +
> +static void invalid_dynamic_in_dynamic(void)
> +{
> +	igt_subtest_init(fake_argc, fake_argv);
> +
> +	igt_subtest_with_dynamic("a") {
> +		igt_dynamic("b") {
> +			igt_dynamic("c") {
> +			}
> +		}
> +	}
> +
> +	igt_exit();
> +}
> +
> +typedef void (*fork_fun)(void);
> +
> +int main(int argc, char **argv)
> +{
> +	int status;
> +
> +	/* test the invalid nesting scenarios */ {
> +		fork_fun should_sigabort[] = {
> +			invalid_subtest_in_simple_test,
> +			invalid_subtest_group_in_simple_test,
> +			invalid_subtest_with_dynamic_in_simple_test,
> +			invalid_dynamic_in_simple_test,
> +			invalid_fixture_in_fixture,
> +			invalid_subtest_in_subtest,
> +			invalid_top_level_dynamic,
> +			invalid_dynamic_in_regular_subtest,
> +			invalid_fixture_in_subtest,
> +			invalid_top_level_skip,
> +			invalid_top_level_assert,
> +			invalid_dynamic_in_dynamic,
> +		};
> +
> +		for (int i = 0; i < ARRAY_SIZE(should_sigabort); ++i) {
> +			status = do_fork(should_sigabort[i]);
> +			internal_assert_wsignaled(status, SIGABRT);
> +		}
> +	}
> +
> +	/* test the valid nesting scenarios */ {
> +		fork_fun should_not_signal[] = {
> +			all_valid_simple_test,
> +			all_valid,
> +		};
> +
> +		for (int i = 0; i < ARRAY_SIZE(should_not_signal); ++i) {
> +			status = do_fork(should_not_signal[i]);
> +			internal_assert_not_wsignaled(status);
> +		}
> +	}
> +
> +	return 0;
> +}
> diff --git a/lib/tests/igt_tests_common.h b/lib/tests/igt_tests_common.h
> index f285d657..fa8ad920 100644
> --- a/lib/tests/igt_tests_common.h
> +++ b/lib/tests/igt_tests_common.h
> @@ -51,6 +51,11 @@ static inline void internal_assert_wsignaled(int wstatus, int signal)
>  			WTERMSIG(wstatus) == signal);
>  }
>  
> +static inline void internal_assert_not_wsignaled(int wstatus)
> +{
> +	internal_assert(!WIFSIGNALED(wstatus));
> +}
> +
>  static inline int do_fork(void (*test_to_run)(void))
>  {
>  	int pid, status;
> diff --git a/lib/tests/meson.build b/lib/tests/meson.build
> index 22aa19da..47ef303a 100644
> --- a/lib/tests/meson.build
> +++ b/lib/tests/meson.build
> @@ -12,6 +12,7 @@ lib_tests = [
>  	'igt_fork_helper',
>  	'igt_list_only',
>  	'igt_invalid_subtest_name',
> +	'igt_nesting',
>  	'igt_no_exit',
>  	'igt_segfault',
>  	'igt_simulation',
> -- 
> 2.25.2
> 
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

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

* Re: [igt-dev] [PATCH i-g-t 3/3] lib/tests: Add tests for magic control blocks nesting
  2020-05-05  6:41   ` Petri Latvala
@ 2020-05-05 12:32     ` Arkadiusz Hiler
  0 siblings, 0 replies; 10+ messages in thread
From: Arkadiusz Hiler @ 2020-05-05 12:32 UTC (permalink / raw)
  To: Petri Latvala; +Cc: igt-dev

On Tue, May 05, 2020 at 09:41:02AM +0300, Petri Latvala wrote:
> On Mon, May 04, 2020 at 02:26:23PM +0300, Arkadiusz Hiler wrote:
> > Cc: Petri Latvala <petri.latvala@intel.com>
> > Signed-off-by: Arkadiusz Hiler <arkadiusz.hiler@intel.com>
> 
> 
> Reviewed-by: Petri Latvala <petri.latvala@intel.com>
> 
> Is igt_fork usage covered elsewhere?

There are some tests in lib/test/, but not for nesting.

We can add them here. I'll try to do that today.

I have addressed your comment on the messages consistency and merged the
patches.

-- 
Cheers,
Arek
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

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

* Re: [igt-dev] ✗ Fi.CI.IGT: failure for series starting with [i-g-t,1/3] lib/igt_core:  Make assert on invalid magic blocks nesting more verbose
  2020-05-04 21:33 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
@ 2020-05-05 12:33   ` Arkadiusz Hiler
  0 siblings, 0 replies; 10+ messages in thread
From: Arkadiusz Hiler @ 2020-05-05 12:33 UTC (permalink / raw)
  To: igt-dev; +Cc: Lakshmi

On Mon, May 04, 2020 at 09:33:52PM +0000, Patchwork wrote:
> == Series Details ==
> 
> Series: series starting with [i-g-t,1/3] lib/igt_core: Make assert on invalid magic blocks nesting more verbose
> URL   : https://patchwork.freedesktop.org/series/76900/
> State : failure
> 
> == Summary ==
> 
> CI Bug Log - changes from CI_DRM_8417_full -> IGTPW_4529_full
> ====================================================
> 
> Summary
> -------
> 
>   **FAILURE**
> 
>   Serious unknown changes coming with IGTPW_4529_full absolutely need to be
>   verified manually.
>   
>   If you think the reported changes have nothing to do with the changes
>   introduced in IGTPW_4529_full, please notify your bug team 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_4529/index.html
> 
> Possible new issues
> -------------------
> 
>   Here are the unknown changes that may have been introduced in IGTPW_4529_full:
> 
> ### IGT changes ###
> 
> #### Possible regressions ####
> 
>   * igt@gem_ctx_persistence@engines-hostile@bcs0:
>     - shard-kbl:          [PASS][1] -> [FAIL][2]
>    [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8417/shard-kbl7/igt@gem_ctx_persistence@engines-hostile@bcs0.html
>    [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4529/shard-kbl6/igt@gem_ctx_persistence@engines-hostile@bcs0.html

Unrelated GEM failure. No need for re-reporting, the patch is already merged.
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

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

end of thread, other threads:[~2020-05-05 12:33 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-04 11:26 [igt-dev] [PATCH i-g-t 1/3] lib/igt_core: Make assert on invalid magic blocks nesting more verbose Arkadiusz Hiler
2020-05-04 11:26 ` [igt-dev] [PATCH i-g-t 2/3] lib/igt_core: Disallow nesting of igt_dynamic inside igt_dynamic Arkadiusz Hiler
2020-05-05  6:36   ` Petri Latvala
2020-05-04 11:26 ` [igt-dev] [PATCH i-g-t 3/3] lib/tests: Add tests for magic control blocks nesting Arkadiusz Hiler
2020-05-05  6:41   ` Petri Latvala
2020-05-05 12:32     ` Arkadiusz Hiler
2020-05-04 12:15 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/3] lib/igt_core: Make assert on invalid magic blocks nesting more verbose Patchwork
2020-05-04 21:33 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
2020-05-05 12:33   ` Arkadiusz Hiler
2020-05-05  6:36 ` [igt-dev] [PATCH i-g-t 1/3] " Petri Latvala

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.