All of lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH i-g-t] tests/kms_big_joiner: Convert test to dynamic
@ 2022-04-27  8:22 Karthik B S
  2022-04-27  9:32 ` [igt-dev] ✗ Fi.CI.BAT: failure for " Patchwork
  2022-05-18  8:21 ` [igt-dev] [PATCH i-g-t] " Modem, Bhanuprakash
  0 siblings, 2 replies; 4+ messages in thread
From: Karthik B S @ 2022-04-27  8:22 UTC (permalink / raw)
  To: igt-dev

Covert the tests to dynamic subtests at pipe level.

Signed-off-by: Karthik B S <karthik.b.s@intel.com>
---
 tests/i915/kms_big_joiner.c | 218 +++++++++++++++++++-----------------
 1 file changed, 118 insertions(+), 100 deletions(-)

diff --git a/tests/i915/kms_big_joiner.c b/tests/i915/kms_big_joiner.c
index d7fa2e53..9922e43c 100644
--- a/tests/i915/kms_big_joiner.c
+++ b/tests/i915/kms_big_joiner.c
@@ -35,6 +35,8 @@ typedef struct {
 	igt_display_t display;
 	struct igt_fb fb;
 	int n_pipes;
+	enum pipe pipe1;
+	enum pipe pipe2;
 	struct output_data {
 		uint32_t id;
 		int mode_number;
@@ -46,10 +48,12 @@ static void test_invalid_modeset(data_t *data)
 	drmModeModeInfo *mode;
 	igt_display_t *display = &data->display;
 	igt_output_t *output, *big_joiner_output = NULL, *second_output = NULL;
-	int i, ret;
+	int ret;
 	igt_pipe_t *pipe;
 	igt_plane_t *plane;
 
+	igt_display_reset(display);
+
 	for_each_connected_output(display, output) {
 		mode = &output->config.connector->modes[0];
 
@@ -60,100 +64,92 @@ static void test_invalid_modeset(data_t *data)
 		}
 	}
 
-	for_each_pipe(display, i) {
-		if (i < (data->n_pipes - 1)) {
-			igt_output_set_pipe(big_joiner_output, i);
+	igt_output_set_pipe(big_joiner_output, data->pipe1);
 
-			mode = &big_joiner_output->config.connector->modes[data->big_joiner_output[0].mode_number];
-			igt_output_override_mode(big_joiner_output, mode);
+	mode = &big_joiner_output->config.connector->modes[data->big_joiner_output[0].mode_number];
+	igt_output_override_mode(big_joiner_output, mode);
 
-			pipe = &display->pipes[i];
-			plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
+	pipe = &display->pipes[data->pipe1];
+	plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
 
-			igt_plane_set_fb(plane, &data->fb);
-			igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
-			igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
+	igt_plane_set_fb(plane, &data->fb);
+	igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
+	igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
 
-			igt_display_commit2(display, COMMIT_ATOMIC);
+	igt_display_commit2(display, COMMIT_ATOMIC);
 
-			igt_output_set_pipe(second_output, i + 1);
+	igt_output_set_pipe(second_output, data->pipe2);
 
-			mode = igt_output_get_mode(second_output);
+	mode = igt_output_get_mode(second_output);
 
-			pipe = &display->pipes[i + 1];
-			plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
+	pipe = &display->pipes[data->pipe2];
+	plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
 
-			igt_plane_set_fb(plane, &data->fb);
-			igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
-			igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
+	igt_plane_set_fb(plane, &data->fb);
+	igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
+	igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
 
-			/* This commit is expectd to fail as this pipe is being used for big joiner */
-			ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY |
-							    DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-			igt_assert_lt(ret, 0);
+	/* This commit is expectd to fail as this pipe is being used for big joiner */
+	ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY |
+					    DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	igt_assert_lt(ret, 0);
 
-			igt_output_set_pipe(big_joiner_output, PIPE_NONE);
-			igt_output_set_pipe(second_output, PIPE_NONE);
+	igt_output_set_pipe(big_joiner_output, PIPE_NONE);
+	igt_output_set_pipe(second_output, PIPE_NONE);
 
-			pipe = &display->pipes[i];
-			plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
+	pipe = &display->pipes[data->pipe1];
+	plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
 
-			/*
-			 * Do not explicitly set the plane of the second output to NULL,
-			 * as it is the adjacent pipe to the big joiner output and
-			 * setting the big joiner plane to NULL will take care of this.
-			 */
-			igt_plane_set_fb(plane, NULL);
-			igt_display_commit2(display, COMMIT_ATOMIC);
-			igt_output_override_mode(big_joiner_output, NULL);
-		}
-	}
+	/*
+	 * Do not explicitly set the plane of the second output to NULL,
+	 * as it is the adjacent pipe to the big joiner output and
+	 * setting the big joiner plane to NULL will take care of this.
+	 */
+	igt_plane_set_fb(plane, NULL);
+	igt_display_commit2(display, COMMIT_ATOMIC);
+	igt_output_override_mode(big_joiner_output, NULL);
 
-	for_each_pipe(display, i) {
-		if (i < (data->n_pipes - 1)) {
-			igt_output_set_pipe(second_output, i + 1);
+	igt_output_set_pipe(second_output, data->pipe2);
 
-			mode = igt_output_get_mode(second_output);
+	mode = igt_output_get_mode(second_output);
 
-			pipe = &display->pipes[i + 1];
-			plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
+	pipe = &display->pipes[data->pipe2];
+	plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
 
-			igt_plane_set_fb(plane, &data->fb);
-			igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
-			igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
+	igt_plane_set_fb(plane, &data->fb);
+	igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
+	igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
 
-			igt_display_commit2(display, COMMIT_ATOMIC);
+	igt_display_commit2(display, COMMIT_ATOMIC);
 
-			igt_output_set_pipe(big_joiner_output, i);
+	igt_output_set_pipe(big_joiner_output, data->pipe1);
 
-			mode = &big_joiner_output->config.connector->modes[data->big_joiner_output[0].mode_number];
-			igt_output_override_mode(big_joiner_output, mode);
+	mode = &big_joiner_output->config.connector->modes[data->big_joiner_output[0].mode_number];
+	igt_output_override_mode(big_joiner_output, mode);
 
-			pipe = &display->pipes[i];
-			plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
+	pipe = &display->pipes[data->pipe1];
+	plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
 
-			igt_plane_set_fb(plane, &data->fb);
-			igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
-			igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
+	igt_plane_set_fb(plane, &data->fb);
+	igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
+	igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
 
-			/* This commit is expected to fail as the adjacent pipe is already in use*/
-			ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY |
-							    DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-			igt_assert_lt(ret, 0);
+	/* This commit is expected to fail as the adjacent pipe is already in use*/
+	ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY |
+					    DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	igt_assert_lt(ret, 0);
 
-			igt_output_set_pipe(big_joiner_output, PIPE_NONE);
-			igt_output_set_pipe(second_output, PIPE_NONE);
-			igt_plane_set_fb(plane, NULL);
+	igt_output_set_pipe(big_joiner_output, PIPE_NONE);
+	igt_output_set_pipe(second_output, PIPE_NONE);
+	igt_plane_set_fb(plane, NULL);
 
-			pipe = &display->pipes[i + 1];
-			plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
-			igt_plane_set_fb(plane, NULL);
+	pipe = &display->pipes[data->pipe2];
+	plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
+	igt_plane_set_fb(plane, NULL);
 
-			igt_display_commit2(display, COMMIT_ATOMIC);
+	igt_display_commit2(display, COMMIT_ATOMIC);
 
-			igt_output_override_mode(big_joiner_output, NULL);
-		}
-	}
+	igt_output_override_mode(big_joiner_output, NULL);
 }
 
 static void test_basic_modeset(data_t *data)
@@ -161,10 +157,11 @@ static void test_basic_modeset(data_t *data)
 	drmModeModeInfo *mode;
 	igt_output_t *output, *big_joiner_output = NULL;
 	igt_display_t *display = &data->display;
-	int i;
 	igt_pipe_t *pipe;
 	igt_plane_t *plane;
 
+	igt_display_reset(display);
+
 	for_each_connected_output(display, output) {
 		if (data->big_joiner_output[0].id == output->id) {
 			big_joiner_output = output;
@@ -172,27 +169,23 @@ static void test_basic_modeset(data_t *data)
 		}
 	}
 
-	for_each_pipe(display, i) {
-		if (i < (data->n_pipes - 1)) {
-			igt_output_set_pipe(big_joiner_output, i);
+	igt_output_set_pipe(big_joiner_output, data->pipe1);
 
-			mode = &big_joiner_output->config.connector->modes[data->big_joiner_output[0].mode_number];
-			igt_output_override_mode(big_joiner_output, mode);
+	mode = &big_joiner_output->config.connector->modes[data->big_joiner_output[0].mode_number];
+	igt_output_override_mode(big_joiner_output, mode);
 
-			pipe = &display->pipes[i];
-			plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
+	pipe = &display->pipes[data->pipe1];
+	plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
 
-			igt_plane_set_fb(plane, &data->fb);
-			igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
-			igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
+	igt_plane_set_fb(plane, &data->fb);
+	igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
+	igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
 
-			igt_display_commit2(display, COMMIT_ATOMIC);
+	igt_display_commit2(display, COMMIT_ATOMIC);
 
-			igt_output_set_pipe(big_joiner_output, PIPE_NONE);
-			igt_plane_set_fb(plane, NULL);
-			igt_display_commit2(display, COMMIT_ATOMIC);
-		}
-	}
+	igt_output_set_pipe(big_joiner_output, PIPE_NONE);
+	igt_plane_set_fb(plane, NULL);
+	igt_display_commit2(display, COMMIT_ATOMIC);
 }
 
 static void test_dual_display(data_t *data)
@@ -204,6 +197,8 @@ static void test_dual_display(data_t *data)
 	igt_plane_t *plane;
 	int count = 0;
 
+	igt_display_reset(display);
+
 	for_each_connected_output(display, output) {
 		if (data->big_joiner_output[count].id == output->id) {
 			big_joiner_output[count] = output;
@@ -214,14 +209,14 @@ static void test_dual_display(data_t *data)
 			break;
 	}
 
-	igt_output_set_pipe(big_joiner_output[0], PIPE_A);
-	igt_output_set_pipe(big_joiner_output[1], PIPE_C);
+	igt_output_set_pipe(big_joiner_output[0], data->pipe1);
+	igt_output_set_pipe(big_joiner_output[1], data->pipe2);
 
 	/* Set up first big joiner output on Pipe A*/
 	mode = &big_joiner_output[0]->config.connector->modes[data->big_joiner_output[0].mode_number];
 	igt_output_override_mode(big_joiner_output[0], mode);
 
-	pipe = &display->pipes[PIPE_A];
+	pipe = &display->pipes[data->pipe1];
 	plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
 
 	igt_plane_set_fb(plane, &data->fb);
@@ -232,7 +227,7 @@ static void test_dual_display(data_t *data)
 	mode = &big_joiner_output[1]->config.connector->modes[data->big_joiner_output[1].mode_number];
 	igt_output_override_mode(big_joiner_output[1], mode);
 
-	pipe = &display->pipes[PIPE_C];
+	pipe = &display->pipes[data->pipe2];
 	plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
 
 	igt_plane_set_fb(plane, &data->fb);
@@ -244,8 +239,8 @@ static void test_dual_display(data_t *data)
 	/* Clean up */
 	igt_output_set_pipe(big_joiner_output[0], PIPE_NONE);
 	igt_output_set_pipe(big_joiner_output[1], PIPE_NONE);
-	igt_plane_set_fb(igt_pipe_get_plane_type(&display->pipes[PIPE_A], DRM_PLANE_TYPE_PRIMARY), NULL);
-	igt_plane_set_fb(igt_pipe_get_plane_type(&display->pipes[PIPE_C], DRM_PLANE_TYPE_PRIMARY), NULL);
+	igt_plane_set_fb(igt_pipe_get_plane_type(&display->pipes[data->pipe1], DRM_PLANE_TYPE_PRIMARY), NULL);
+	igt_plane_set_fb(igt_pipe_get_plane_type(&display->pipes[data->pipe2], DRM_PLANE_TYPE_PRIMARY), NULL);
 	igt_display_commit2(display, COMMIT_ATOMIC);
 }
 
@@ -254,8 +249,9 @@ igt_main
 	data_t data;
 	igt_output_t *output;
 	drmModeModeInfo *mode;
-	int valid_output = 0, i, count = 0;
+	int valid_output = 0, i, count = 0, j = 0;
 	uint16_t width = 0, height = 0;
+	enum pipe pipe_seq[IGT_MAX_PIPES];
 
 	igt_fixture {
 		data.drm_fd = drm_open_driver_master(DRIVER_INTEL);
@@ -282,8 +278,11 @@ igt_main
 		}
 
 		data.n_pipes = 0;
-		for_each_pipe(&data.display, i)
+		for_each_pipe(&data.display, i) {
 			data.n_pipes++;
+			pipe_seq[j] = i;
+			j++;
+		}
 
 		igt_require_f(count > 0, "No output with 5k+ mode found\n");
 
@@ -292,21 +291,40 @@ igt_main
 	}
 
 	igt_describe("Verify the basic modeset on big joiner mode on all pipes");
-	igt_subtest("basic")
-		test_basic_modeset(&data);
+	igt_subtest_with_dynamic("basic") {
+		for (i = 0; i < data.n_pipes - 1; i++) {
+			if (i < (data.n_pipes - 1)) {
+				data.pipe1 = pipe_seq[i];
+				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe_seq[i]))
+					test_basic_modeset(&data);
+			}
+		}
+	}
 
 	igt_describe("Verify if the modeset on the adjoining pipe is rejected "
 		     "when the pipe is active with a big joiner modeset");
-	igt_subtest("invalid-modeset") {
+	igt_subtest_with_dynamic("invalid-modeset") {
 		igt_require_f(valid_output > 1, "No valid Second output found\n");
-		test_invalid_modeset(&data);
+		for (i = 0; i < data.n_pipes - 1; i++) {
+			if (i < (data.n_pipes - 1)) {
+				data.pipe1 = pipe_seq[i];
+				data.pipe2 = pipe_seq[i + 1];
+				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe_seq[i]))
+					test_invalid_modeset(&data);
+			}
+		}
 	}
 
 	igt_describe("Verify simultaneous modeset on 2 big joiner outputs");
-	igt_subtest("2x-modeset") {
+	igt_subtest_with_dynamic("2x-modeset") {
 		igt_require_f(count > 1, "2 outputs with big joiner modes are required\n");
 		igt_require_f(data.n_pipes > 3, "Minumum of 4 pipes are required\n");
-		test_dual_display(&data);
+		for (i = 0; (i + 2) < data.n_pipes - 1; i++) {
+			data.pipe1 = pipe_seq[i];
+			data.pipe2 = pipe_seq[i + 2];
+			igt_dynamic_f("pipe-%s%s", kmstest_pipe_name(pipe_seq[i]), kmstest_pipe_name(pipe_seq[i + 2]))
+				test_dual_display(&data);
+		}
 	}
 
 	igt_fixture {
-- 
2.22.0

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

* [igt-dev] ✗ Fi.CI.BAT: failure for tests/kms_big_joiner: Convert test to dynamic
  2022-04-27  8:22 [igt-dev] [PATCH i-g-t] tests/kms_big_joiner: Convert test to dynamic Karthik B S
@ 2022-04-27  9:32 ` Patchwork
  2022-05-18  8:21 ` [igt-dev] [PATCH i-g-t] " Modem, Bhanuprakash
  1 sibling, 0 replies; 4+ messages in thread
From: Patchwork @ 2022-04-27  9:32 UTC (permalink / raw)
  To: Karthik B S; +Cc: igt-dev

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

== Series Details ==

Series: tests/kms_big_joiner: Convert test to dynamic
URL   : https://patchwork.freedesktop.org/series/103207/
State : failure

== Summary ==

CI Bug Log - changes from IGT_6456 -> IGTPW_7014
====================================================

Summary
-------

  **FAILURE**

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

Participating hosts (46 -> 36)
------------------------------

  Additional (1): fi-rkl-11600 
  Missing    (11): fi-bdw-samus fi-hsw-4200u bat-dg2-8 bat-adlm-1 bat-dg2-9 fi-bsw-cyan fi-ctg-p8600 fi-hsw-4770 bat-rpls-2 bat-jsl-2 bat-jsl-1 

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@i915_selftest@live@memory_region:
    - fi-cfl-8109u:       [PASS][1] -> [DMESG-WARN][2] +34 similar issues
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6456/fi-cfl-8109u/igt@i915_selftest@live@memory_region.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7014/fi-cfl-8109u/igt@i915_selftest@live@memory_region.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_huc_copy@huc-copy:
    - fi-rkl-11600:       NOTRUN -> [SKIP][3] ([i915#2190])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7014/fi-rkl-11600/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@basic:
    - fi-rkl-11600:       NOTRUN -> [SKIP][4] ([i915#4613]) +3 similar issues
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7014/fi-rkl-11600/igt@gem_lmem_swapping@basic.html

  * igt@gem_tiled_pread_basic:
    - fi-rkl-11600:       NOTRUN -> [SKIP][5] ([i915#3282])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7014/fi-rkl-11600/igt@gem_tiled_pread_basic.html

  * igt@i915_pm_backlight@basic-brightness:
    - fi-rkl-11600:       NOTRUN -> [SKIP][6] ([i915#3012])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7014/fi-rkl-11600/igt@i915_pm_backlight@basic-brightness.html

  * igt@i915_pm_rpm@module-reload:
    - fi-cfl-8109u:       [PASS][7] -> [DMESG-WARN][8] ([i915#62]) +2 similar issues
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6456/fi-cfl-8109u/igt@i915_pm_rpm@module-reload.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7014/fi-cfl-8109u/igt@i915_pm_rpm@module-reload.html

  * igt@kms_chamelium@common-hpd-after-suspend:
    - fi-hsw-g3258:       NOTRUN -> [SKIP][9] ([fdo#109271] / [fdo#111827])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7014/fi-hsw-g3258/igt@kms_chamelium@common-hpd-after-suspend.html

  * igt@kms_chamelium@dp-crc-fast:
    - fi-rkl-11600:       NOTRUN -> [SKIP][10] ([fdo#111827]) +8 similar issues
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7014/fi-rkl-11600/igt@kms_chamelium@dp-crc-fast.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic:
    - fi-rkl-11600:       NOTRUN -> [SKIP][11] ([i915#4070] / [i915#4103]) +1 similar issue
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7014/fi-rkl-11600/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html

  * igt@kms_flip@basic-plain-flip@c-dp2:
    - fi-cfl-8109u:       [PASS][12] -> [DMESG-WARN][13] ([i915#165])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6456/fi-cfl-8109u/igt@kms_flip@basic-plain-flip@c-dp2.html
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7014/fi-cfl-8109u/igt@kms_flip@basic-plain-flip@c-dp2.html

  * igt@kms_force_connector_basic@force-load-detect:
    - fi-rkl-11600:       NOTRUN -> [SKIP][14] ([fdo#109285] / [i915#4098])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7014/fi-rkl-11600/igt@kms_force_connector_basic@force-load-detect.html

  * igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-b:
    - fi-cfl-8109u:       [PASS][15] -> [DMESG-WARN][16] ([i915#165] / [i915#62]) +16 similar issues
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6456/fi-cfl-8109u/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-b.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7014/fi-cfl-8109u/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-b.html

  * igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-d:
    - fi-rkl-11600:       NOTRUN -> [SKIP][17] ([i915#4070] / [i915#533])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7014/fi-rkl-11600/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-d.html

  * igt@kms_psr@primary_mmap_gtt:
    - fi-rkl-11600:       NOTRUN -> [SKIP][18] ([i915#1072]) +3 similar issues
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7014/fi-rkl-11600/igt@kms_psr@primary_mmap_gtt.html

  * igt@kms_setmode@basic-clone-single-crtc:
    - fi-rkl-11600:       NOTRUN -> [SKIP][19] ([i915#3555] / [i915#4098])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7014/fi-rkl-11600/igt@kms_setmode@basic-clone-single-crtc.html

  * igt@prime_vgem@basic-userptr:
    - fi-rkl-11600:       NOTRUN -> [SKIP][20] ([i915#3301] / [i915#3708])
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7014/fi-rkl-11600/igt@prime_vgem@basic-userptr.html

  * igt@prime_vgem@basic-write:
    - fi-rkl-11600:       NOTRUN -> [SKIP][21] ([i915#3291] / [i915#3708]) +2 similar issues
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7014/fi-rkl-11600/igt@prime_vgem@basic-write.html

  
#### Possible fixes ####

  * igt@gem_exec_suspend@basic-s0@smem:
    - {fi-ehl-2}:         [DMESG-WARN][22] ([i915#5122]) -> [PASS][23]
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6456/fi-ehl-2/igt@gem_exec_suspend@basic-s0@smem.html
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7014/fi-ehl-2/igt@gem_exec_suspend@basic-s0@smem.html

  * igt@i915_selftest@live@hangcheck:
    - fi-hsw-g3258:       [INCOMPLETE][24] ([i915#4785]) -> [PASS][25]
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6456/fi-hsw-g3258/igt@i915_selftest@live@hangcheck.html
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7014/fi-hsw-g3258/igt@i915_selftest@live@hangcheck.html

  * igt@kms_busy@basic@flip:
    - {bat-adlp-6}:       [DMESG-WARN][26] ([i915#3576]) -> [PASS][27]
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6456/bat-adlp-6/igt@kms_busy@basic@flip.html
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7014/bat-adlp-6/igt@kms_busy@basic@flip.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#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285
  [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#165]: https://gitlab.freedesktop.org/drm/intel/issues/165
  [i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190
  [i915#3012]: https://gitlab.freedesktop.org/drm/intel/issues/3012
  [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
  [i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291
  [i915#3301]: https://gitlab.freedesktop.org/drm/intel/issues/3301
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [i915#3576]: https://gitlab.freedesktop.org/drm/intel/issues/3576
  [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
  [i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070
  [i915#4098]: https://gitlab.freedesktop.org/drm/intel/issues/4098
  [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#4785]: https://gitlab.freedesktop.org/drm/intel/issues/4785
  [i915#5122]: https://gitlab.freedesktop.org/drm/intel/issues/5122
  [i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533
  [i915#62]: https://gitlab.freedesktop.org/drm/intel/issues/62


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

  * CI: CI-20190529 -> None
  * IGT: IGT_6456 -> IGTPW_7014

  CI-20190529: 20190529
  CI_DRM_11550: 56b089ae03ef8ea8ab7f474eaa70367898891ef0 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_7014: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_7014/index.html
  IGT_6456: c2b13bab06755aa47adc7c880fb52f41360099f3 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git

== Logs ==

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

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

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

* Re: [igt-dev] [PATCH i-g-t] tests/kms_big_joiner: Convert test to dynamic
  2022-04-27  8:22 [igt-dev] [PATCH i-g-t] tests/kms_big_joiner: Convert test to dynamic Karthik B S
  2022-04-27  9:32 ` [igt-dev] ✗ Fi.CI.BAT: failure for " Patchwork
@ 2022-05-18  8:21 ` Modem, Bhanuprakash
  2022-05-30  8:48   ` Karthik B S
  1 sibling, 1 reply; 4+ messages in thread
From: Modem, Bhanuprakash @ 2022-05-18  8:21 UTC (permalink / raw)
  To: Karthik B S, igt-dev

On Wed-27-04-2022 01:52 pm, Karthik B S wrote:
> Covert the tests to dynamic subtests at pipe level.
> 
> Signed-off-by: Karthik B S <karthik.b.s@intel.com>
> ---
>   tests/i915/kms_big_joiner.c | 218 +++++++++++++++++++-----------------
>   1 file changed, 118 insertions(+), 100 deletions(-)
> 
> diff --git a/tests/i915/kms_big_joiner.c b/tests/i915/kms_big_joiner.c
> index d7fa2e53..9922e43c 100644
> --- a/tests/i915/kms_big_joiner.c
> +++ b/tests/i915/kms_big_joiner.c
> @@ -35,6 +35,8 @@ typedef struct {
>   	igt_display_t display;
>   	struct igt_fb fb;
>   	int n_pipes;
> +	enum pipe pipe1;
> +	enum pipe pipe2;
>   	struct output_data {
>   		uint32_t id;
>   		int mode_number;
> @@ -46,10 +48,12 @@ static void test_invalid_modeset(data_t *data)
>   	drmModeModeInfo *mode;
>   	igt_display_t *display = &data->display;
>   	igt_output_t *output, *big_joiner_output = NULL, *second_output = NULL;
> -	int i, ret;
> +	int ret;
>   	igt_pipe_t *pipe;
>   	igt_plane_t *plane;
>   
> +	igt_display_reset(display);
> +
>   	for_each_connected_output(display, output) {
>   		mode = &output->config.connector->modes[0];
>   
> @@ -60,100 +64,92 @@ static void test_invalid_modeset(data_t *data)
>   		}
>   	}
>   
> -	for_each_pipe(display, i) {
> -		if (i < (data->n_pipes - 1)) {
> -			igt_output_set_pipe(big_joiner_output, i);
> +	igt_output_set_pipe(big_joiner_output, data->pipe1);
>   
> -			mode = &big_joiner_output->config.connector->modes[data->big_joiner_output[0].mode_number];
> -			igt_output_override_mode(big_joiner_output, mode);
> +	mode = &big_joiner_output->config.connector->modes[data->big_joiner_output[0].mode_number];
> +	igt_output_override_mode(big_joiner_output, mode);
>   
> -			pipe = &display->pipes[i];
> -			plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
> +	pipe = &display->pipes[data->pipe1];
> +	plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
>   
> -			igt_plane_set_fb(plane, &data->fb);
> -			igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
> -			igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
> +	igt_plane_set_fb(plane, &data->fb);
> +	igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
> +	igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
>   
> -			igt_display_commit2(display, COMMIT_ATOMIC);
> +	igt_display_commit2(display, COMMIT_ATOMIC);

As we are using atomic path, do we really need this commit?

>   
> -			igt_output_set_pipe(second_output, i + 1);
> +	igt_output_set_pipe(second_output, data->pipe2);
>   
> -			mode = igt_output_get_mode(second_output);
> +	mode = igt_output_get_mode(second_output);
>   
> -			pipe = &display->pipes[i + 1];
> -			plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
> +	pipe = &display->pipes[data->pipe2];
> +	plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
>   
> -			igt_plane_set_fb(plane, &data->fb);
> -			igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
> -			igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
> +	igt_plane_set_fb(plane, &data->fb);
> +	igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
> +	igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
>   
> -			/* This commit is expectd to fail as this pipe is being used for big joiner */
> -			ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY |
> -							    DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> -			igt_assert_lt(ret, 0);
> +	/* This commit is expectd to fail as this pipe is being used for big joiner */
> +	ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY |
> +					    DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> +	igt_assert_lt(ret, 0);
>   
> -			igt_output_set_pipe(big_joiner_output, PIPE_NONE);
> -			igt_output_set_pipe(second_output, PIPE_NONE);
> +	igt_output_set_pipe(big_joiner_output, PIPE_NONE);
> +	igt_output_set_pipe(second_output, PIPE_NONE);
>   
> -			pipe = &display->pipes[i];
> -			plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
> +	pipe = &display->pipes[data->pipe1];
> +	plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
>   
> -			/*
> -			 * Do not explicitly set the plane of the second output to NULL,
> -			 * as it is the adjacent pipe to the big joiner output and
> -			 * setting the big joiner plane to NULL will take care of this.
> -			 */
> -			igt_plane_set_fb(plane, NULL);
> -			igt_display_commit2(display, COMMIT_ATOMIC);
> -			igt_output_override_mode(big_joiner_output, NULL);
> -		}
> -	}
> +	/*
> +	 * Do not explicitly set the plane of the second output to NULL,
> +	 * as it is the adjacent pipe to the big joiner output and
> +	 * setting the big joiner plane to NULL will take care of this.
> +	 */
> +	igt_plane_set_fb(plane, NULL);
> +	igt_display_commit2(display, COMMIT_ATOMIC);
> +	igt_output_override_mode(big_joiner_output, NULL);
>   
> -	for_each_pipe(display, i) {
> -		if (i < (data->n_pipes - 1)) {
> -			igt_output_set_pipe(second_output, i + 1);
> +	igt_output_set_pipe(second_output, data->pipe2);
>   
> -			mode = igt_output_get_mode(second_output);
> +	mode = igt_output_get_mode(second_output);
>   
> -			pipe = &display->pipes[i + 1];
> -			plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
> +	pipe = &display->pipes[data->pipe2];
> +	plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
>   
> -			igt_plane_set_fb(plane, &data->fb);
> -			igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
> -			igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
> +	igt_plane_set_fb(plane, &data->fb);
> +	igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
> +	igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
>   
> -			igt_display_commit2(display, COMMIT_ATOMIC);
> +	igt_display_commit2(display, COMMIT_ATOMIC);

Same here.

>   
> -			igt_output_set_pipe(big_joiner_output, i);
> +	igt_output_set_pipe(big_joiner_output, data->pipe1);
>   
> -			mode = &big_joiner_output->config.connector->modes[data->big_joiner_output[0].mode_number];
> -			igt_output_override_mode(big_joiner_output, mode);
> +	mode = &big_joiner_output->config.connector->modes[data->big_joiner_output[0].mode_number];
> +	igt_output_override_mode(big_joiner_output, mode);
>   
> -			pipe = &display->pipes[i];
> -			plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
> +	pipe = &display->pipes[data->pipe1];
> +	plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
>   
> -			igt_plane_set_fb(plane, &data->fb);
> -			igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
> -			igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
> +	igt_plane_set_fb(plane, &data->fb);
> +	igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
> +	igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
>   
> -			/* This commit is expected to fail as the adjacent pipe is already in use*/
> -			ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY |
> -							    DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> -			igt_assert_lt(ret, 0);
> +	/* This commit is expected to fail as the adjacent pipe is already in use*/
> +	ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY |
> +					    DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> +	igt_assert_lt(ret, 0);
>   
> -			igt_output_set_pipe(big_joiner_output, PIPE_NONE);
> -			igt_output_set_pipe(second_output, PIPE_NONE);
> -			igt_plane_set_fb(plane, NULL);
> +	igt_output_set_pipe(big_joiner_output, PIPE_NONE);
> +	igt_output_set_pipe(second_output, PIPE_NONE);
> +	igt_plane_set_fb(plane, NULL);
>   
> -			pipe = &display->pipes[i + 1];
> -			plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
> -			igt_plane_set_fb(plane, NULL);
> +	pipe = &display->pipes[data->pipe2];
> +	plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
> +	igt_plane_set_fb(plane, NULL);
>   
> -			igt_display_commit2(display, COMMIT_ATOMIC);
> +	igt_display_commit2(display, COMMIT_ATOMIC);
>   
> -			igt_output_override_mode(big_joiner_output, NULL);
> -		}
> -	}
> +	igt_output_override_mode(big_joiner_output, NULL);
>   }
>   
>   static void test_basic_modeset(data_t *data)
> @@ -161,10 +157,11 @@ static void test_basic_modeset(data_t *data)
>   	drmModeModeInfo *mode;
>   	igt_output_t *output, *big_joiner_output = NULL;
>   	igt_display_t *display = &data->display;
> -	int i;
>   	igt_pipe_t *pipe;
>   	igt_plane_t *plane;
>   
> +	igt_display_reset(display);
> +
>   	for_each_connected_output(display, output) {
>   		if (data->big_joiner_output[0].id == output->id) {
>   			big_joiner_output = output;
> @@ -172,27 +169,23 @@ static void test_basic_modeset(data_t *data)
>   		}
>   	}
>   
> -	for_each_pipe(display, i) {
> -		if (i < (data->n_pipes - 1)) {
> -			igt_output_set_pipe(big_joiner_output, i);
> +	igt_output_set_pipe(big_joiner_output, data->pipe1);
>   
> -			mode = &big_joiner_output->config.connector->modes[data->big_joiner_output[0].mode_number];
> -			igt_output_override_mode(big_joiner_output, mode);
> +	mode = &big_joiner_output->config.connector->modes[data->big_joiner_output[0].mode_number];
> +	igt_output_override_mode(big_joiner_output, mode);
>   
> -			pipe = &display->pipes[i];
> -			plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
> +	pipe = &display->pipes[data->pipe1];
> +	plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
>   
> -			igt_plane_set_fb(plane, &data->fb);
> -			igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
> -			igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
> +	igt_plane_set_fb(plane, &data->fb);
> +	igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
> +	igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
>   
> -			igt_display_commit2(display, COMMIT_ATOMIC);
> +	igt_display_commit2(display, COMMIT_ATOMIC);
>   
> -			igt_output_set_pipe(big_joiner_output, PIPE_NONE);
> -			igt_plane_set_fb(plane, NULL);
> -			igt_display_commit2(display, COMMIT_ATOMIC);
> -		}
> -	}
> +	igt_output_set_pipe(big_joiner_output, PIPE_NONE);
> +	igt_plane_set_fb(plane, NULL);
> +	igt_display_commit2(display, COMMIT_ATOMIC);
>   }
>   
>   static void test_dual_display(data_t *data)
> @@ -204,6 +197,8 @@ static void test_dual_display(data_t *data)
>   	igt_plane_t *plane;
>   	int count = 0;
>   
> +	igt_display_reset(display);
> +
>   	for_each_connected_output(display, output) {
>   		if (data->big_joiner_output[count].id == output->id) {
>   			big_joiner_output[count] = output;
> @@ -214,14 +209,14 @@ static void test_dual_display(data_t *data)
>   			break;
>   	}
>   
> -	igt_output_set_pipe(big_joiner_output[0], PIPE_A);
> -	igt_output_set_pipe(big_joiner_output[1], PIPE_C);
> +	igt_output_set_pipe(big_joiner_output[0], data->pipe1);
> +	igt_output_set_pipe(big_joiner_output[1], data->pipe2);
>   
>   	/* Set up first big joiner output on Pipe A*/
>   	mode = &big_joiner_output[0]->config.connector->modes[data->big_joiner_output[0].mode_number];
>   	igt_output_override_mode(big_joiner_output[0], mode);
>   
> -	pipe = &display->pipes[PIPE_A];
> +	pipe = &display->pipes[data->pipe1];
>   	plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
>   
>   	igt_plane_set_fb(plane, &data->fb);
> @@ -232,7 +227,7 @@ static void test_dual_display(data_t *data)
>   	mode = &big_joiner_output[1]->config.connector->modes[data->big_joiner_output[1].mode_number];
>   	igt_output_override_mode(big_joiner_output[1], mode);
>   
> -	pipe = &display->pipes[PIPE_C];
> +	pipe = &display->pipes[data->pipe2];
>   	plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
>   
>   	igt_plane_set_fb(plane, &data->fb);
> @@ -244,8 +239,8 @@ static void test_dual_display(data_t *data)
>   	/* Clean up */
>   	igt_output_set_pipe(big_joiner_output[0], PIPE_NONE);
>   	igt_output_set_pipe(big_joiner_output[1], PIPE_NONE);
> -	igt_plane_set_fb(igt_pipe_get_plane_type(&display->pipes[PIPE_A], DRM_PLANE_TYPE_PRIMARY), NULL);
> -	igt_plane_set_fb(igt_pipe_get_plane_type(&display->pipes[PIPE_C], DRM_PLANE_TYPE_PRIMARY), NULL);
> +	igt_plane_set_fb(igt_pipe_get_plane_type(&display->pipes[data->pipe1], DRM_PLANE_TYPE_PRIMARY), NULL);
> +	igt_plane_set_fb(igt_pipe_get_plane_type(&display->pipes[data->pipe2], DRM_PLANE_TYPE_PRIMARY), NULL);

As we are preserving the primary plane in variable plane, I think we can 
have one more variable plane2 and use as below:

igt_plane_set_fb(plane, NULL);
igt_plane_set_fb(plane2, NULL);

>   	igt_display_commit2(display, COMMIT_ATOMIC);
>   }
>   
> @@ -254,8 +249,9 @@ igt_main
>   	data_t data;
>   	igt_output_t *output;
>   	drmModeModeInfo *mode;
> -	int valid_output = 0, i, count = 0;
> +	int valid_output = 0, i, count = 0, j = 0;
>   	uint16_t width = 0, height = 0;
> +	enum pipe pipe_seq[IGT_MAX_PIPES];
>   
>   	igt_fixture {
>   		data.drm_fd = drm_open_driver_master(DRIVER_INTEL);

Please add below items to igt_fixture.

igt_display_require_output();
igt_require(display->atomic);

> @@ -282,8 +278,11 @@ igt_main
>   		}
>   
>   		data.n_pipes = 0;
> -		for_each_pipe(&data.display, i)
> +		for_each_pipe(&data.display, i) {
>   			data.n_pipes++;
> +			pipe_seq[j] = i;
> +			j++;
> +		}
>   
>   		igt_require_f(count > 0, "No output with 5k+ mode found\n");
>   
> @@ -292,21 +291,40 @@ igt_main
>   	}
>   
>   	igt_describe("Verify the basic modeset on big joiner mode on all pipes");
> -	igt_subtest("basic")
> -		test_basic_modeset(&data);
> +	igt_subtest_with_dynamic("basic") {
> +		for (i = 0; i < data.n_pipes - 1; i++) {
> +			if (i < (data.n_pipes - 1)) {

This check is redundant.

> +				data.pipe1 = pipe_seq[i];
> +				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe_seq[i]))
> +					test_basic_modeset(&data);
> +			}
> +		}
> +	}
>   
>   	igt_describe("Verify if the modeset on the adjoining pipe is rejected "
>   		     "when the pipe is active with a big joiner modeset");
> -	igt_subtest("invalid-modeset") {
> +	igt_subtest_with_dynamic("invalid-modeset") {
>   		igt_require_f(valid_output > 1, "No valid Second output found\n");
> -		test_invalid_modeset(&data);
> +		for (i = 0; i < data.n_pipes - 1; i++) {
> +			if (i < (data.n_pipes - 1)) {

Same here.

> +				data.pipe1 = pipe_seq[i];
> +				data.pipe2 = pipe_seq[i + 1];
> +				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe_seq[i]))

Can we add second pipe name to the subtest?

> +					test_invalid_modeset(&data);
> +			}
> +		}
>   	}
>   
>   	igt_describe("Verify simultaneous modeset on 2 big joiner outputs");
> -	igt_subtest("2x-modeset") {
> +	igt_subtest_with_dynamic("2x-modeset") {
>   		igt_require_f(count > 1, "2 outputs with big joiner modes are required\n");
>   		igt_require_f(data.n_pipes > 3, "Minumum of 4 pipes are required\n");
> -		test_dual_display(&data);
> +		for (i = 0; (i + 2) < data.n_pipes - 1; i++) {

consider adl_p, which is having 4 active pipes (A, B, C, D)

With this logic, we can run this test with Pipe-A-C only but Pipe-C-A is 
also a valid combo.

Are we not loosing the coverage?

> +			data.pipe1 = pipe_seq[i];
> +			data.pipe2 = pipe_seq[i + 2];
> +			igt_dynamic_f("pipe-%s%s", kmstest_pipe_name(pipe_seq[i]), kmstest_pipe_name(pipe_seq[i + 2]))

Nit: s/"pipe-%s%s"/"pipe-%s-%s"/

> +				test_dual_display(&data);
> +		}
>   	}
>   
>   	igt_fixture {

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

* Re: [igt-dev] [PATCH i-g-t] tests/kms_big_joiner: Convert test to dynamic
  2022-05-18  8:21 ` [igt-dev] [PATCH i-g-t] " Modem, Bhanuprakash
@ 2022-05-30  8:48   ` Karthik B S
  0 siblings, 0 replies; 4+ messages in thread
From: Karthik B S @ 2022-05-30  8:48 UTC (permalink / raw)
  To: Modem, Bhanuprakash, igt-dev

On 5/18/2022 1:51 PM, Modem, Bhanuprakash wrote:
> On Wed-27-04-2022 01:52 pm, Karthik B S wrote:
>> Covert the tests to dynamic subtests at pipe level.
>>
>> Signed-off-by: Karthik B S <karthik.b.s@intel.com>
>> ---
>>   tests/i915/kms_big_joiner.c | 218 +++++++++++++++++++-----------------
>>   1 file changed, 118 insertions(+), 100 deletions(-)
>>
>> diff --git a/tests/i915/kms_big_joiner.c b/tests/i915/kms_big_joiner.c
>> index d7fa2e53..9922e43c 100644
>> --- a/tests/i915/kms_big_joiner.c
>> +++ b/tests/i915/kms_big_joiner.c
>> @@ -35,6 +35,8 @@ typedef struct {
>>       igt_display_t display;
>>       struct igt_fb fb;
>>       int n_pipes;
>> +    enum pipe pipe1;
>> +    enum pipe pipe2;
>>       struct output_data {
>>           uint32_t id;
>>           int mode_number;
>> @@ -46,10 +48,12 @@ static void test_invalid_modeset(data_t *data)
>>       drmModeModeInfo *mode;
>>       igt_display_t *display = &data->display;
>>       igt_output_t *output, *big_joiner_output = NULL, *second_output 
>> = NULL;
>> -    int i, ret;
>> +    int ret;
>>       igt_pipe_t *pipe;
>>       igt_plane_t *plane;
>>   +    igt_display_reset(display);
>> +
>>       for_each_connected_output(display, output) {
>>           mode = &output->config.connector->modes[0];
>>   @@ -60,100 +64,92 @@ static void test_invalid_modeset(data_t *data)
>>           }
>>       }
>>   -    for_each_pipe(display, i) {
>> -        if (i < (data->n_pipes - 1)) {
>> -            igt_output_set_pipe(big_joiner_output, i);
>> +    igt_output_set_pipe(big_joiner_output, data->pipe1);
>>   -            mode = 
>> &big_joiner_output->config.connector->modes[data->big_joiner_output[0].mode_number];
>> -            igt_output_override_mode(big_joiner_output, mode);
>> +    mode = 
>> &big_joiner_output->config.connector->modes[data->big_joiner_output[0].mode_number];
>> +    igt_output_override_mode(big_joiner_output, mode);
>>   -            pipe = &display->pipes[i];
>> -            plane = igt_pipe_get_plane_type(pipe, 
>> DRM_PLANE_TYPE_PRIMARY);
>> +    pipe = &display->pipes[data->pipe1];
>> +    plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
>>   -            igt_plane_set_fb(plane, &data->fb);
>> -            igt_fb_set_size(&data->fb, plane, mode->hdisplay, 
>> mode->vdisplay);
>> -            igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
>> +    igt_plane_set_fb(plane, &data->fb);
>> +    igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
>> +    igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
>>   -            igt_display_commit2(display, COMMIT_ATOMIC);
>> +    igt_display_commit2(display, COMMIT_ATOMIC);
>
> As we are using atomic path, do we really need this commit?

Hi,

Thank you for the review.

Yes, this is required. Without this also the try commit will mostly 
fail, but the scenario here is to try the commit on the second pipe when 
8k modeset is already done. So this would be required. If required we 
could add a separate negative test for this?

>
>>   - igt_output_set_pipe(second_output, i + 1);
>> +    igt_output_set_pipe(second_output, data->pipe2);
>>   -            mode = igt_output_get_mode(second_output);
>> +    mode = igt_output_get_mode(second_output);
>>   -            pipe = &display->pipes[i + 1];
>> -            plane = igt_pipe_get_plane_type(pipe, 
>> DRM_PLANE_TYPE_PRIMARY);
>> +    pipe = &display->pipes[data->pipe2];
>> +    plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
>>   -            igt_plane_set_fb(plane, &data->fb);
>> -            igt_fb_set_size(&data->fb, plane, mode->hdisplay, 
>> mode->vdisplay);
>> -            igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
>> +    igt_plane_set_fb(plane, &data->fb);
>> +    igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
>> +    igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
>>   -            /* This commit is expectd to fail as this pipe is 
>> being used for big joiner */
>> -            ret = igt_display_try_commit_atomic(display, 
>> DRM_MODE_ATOMIC_TEST_ONLY |
>> -                                DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
>> -            igt_assert_lt(ret, 0);
>> +    /* This commit is expectd to fail as this pipe is being used for 
>> big joiner */
>> +    ret = igt_display_try_commit_atomic(display, 
>> DRM_MODE_ATOMIC_TEST_ONLY |
>> +                        DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
>> +    igt_assert_lt(ret, 0);
>>   -            igt_output_set_pipe(big_joiner_output, PIPE_NONE);
>> -            igt_output_set_pipe(second_output, PIPE_NONE);
>> +    igt_output_set_pipe(big_joiner_output, PIPE_NONE);
>> +    igt_output_set_pipe(second_output, PIPE_NONE);
>>   -            pipe = &display->pipes[i];
>> -            plane = igt_pipe_get_plane_type(pipe, 
>> DRM_PLANE_TYPE_PRIMARY);
>> +    pipe = &display->pipes[data->pipe1];
>> +    plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
>>   -            /*
>> -             * Do not explicitly set the plane of the second output 
>> to NULL,
>> -             * as it is the adjacent pipe to the big joiner output and
>> -             * setting the big joiner plane to NULL will take care 
>> of this.
>> -             */
>> -            igt_plane_set_fb(plane, NULL);
>> -            igt_display_commit2(display, COMMIT_ATOMIC);
>> -            igt_output_override_mode(big_joiner_output, NULL);
>> -        }
>> -    }
>> +    /*
>> +     * Do not explicitly set the plane of the second output to NULL,
>> +     * as it is the adjacent pipe to the big joiner output and
>> +     * setting the big joiner plane to NULL will take care of this.
>> +     */
>> +    igt_plane_set_fb(plane, NULL);
>> +    igt_display_commit2(display, COMMIT_ATOMIC);
>> +    igt_output_override_mode(big_joiner_output, NULL);
>>   -    for_each_pipe(display, i) {
>> -        if (i < (data->n_pipes - 1)) {
>> -            igt_output_set_pipe(second_output, i + 1);
>> +    igt_output_set_pipe(second_output, data->pipe2);
>>   -            mode = igt_output_get_mode(second_output);
>> +    mode = igt_output_get_mode(second_output);
>>   -            pipe = &display->pipes[i + 1];
>> -            plane = igt_pipe_get_plane_type(pipe, 
>> DRM_PLANE_TYPE_PRIMARY);
>> +    pipe = &display->pipes[data->pipe2];
>> +    plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
>>   -            igt_plane_set_fb(plane, &data->fb);
>> -            igt_fb_set_size(&data->fb, plane, mode->hdisplay, 
>> mode->vdisplay);
>> -            igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
>> +    igt_plane_set_fb(plane, &data->fb);
>> +    igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
>> +    igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
>>   -            igt_display_commit2(display, COMMIT_ATOMIC);
>> +    igt_display_commit2(display, COMMIT_ATOMIC);
>
> Same here.
Same as above.
>
>>   - igt_output_set_pipe(big_joiner_output, i);
>> +    igt_output_set_pipe(big_joiner_output, data->pipe1);
>>   -            mode = 
>> &big_joiner_output->config.connector->modes[data->big_joiner_output[0].mode_number];
>> -            igt_output_override_mode(big_joiner_output, mode);
>> +    mode = 
>> &big_joiner_output->config.connector->modes[data->big_joiner_output[0].mode_number];
>> +    igt_output_override_mode(big_joiner_output, mode);
>>   -            pipe = &display->pipes[i];
>> -            plane = igt_pipe_get_plane_type(pipe, 
>> DRM_PLANE_TYPE_PRIMARY);
>> +    pipe = &display->pipes[data->pipe1];
>> +    plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
>>   -            igt_plane_set_fb(plane, &data->fb);
>> -            igt_fb_set_size(&data->fb, plane, mode->hdisplay, 
>> mode->vdisplay);
>> -            igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
>> +    igt_plane_set_fb(plane, &data->fb);
>> +    igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
>> +    igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
>>   -            /* This commit is expected to fail as the adjacent 
>> pipe is already in use*/
>> -            ret = igt_display_try_commit_atomic(display, 
>> DRM_MODE_ATOMIC_TEST_ONLY |
>> -                                DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
>> -            igt_assert_lt(ret, 0);
>> +    /* This commit is expected to fail as the adjacent pipe is 
>> already in use*/
>> +    ret = igt_display_try_commit_atomic(display, 
>> DRM_MODE_ATOMIC_TEST_ONLY |
>> +                        DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
>> +    igt_assert_lt(ret, 0);
>>   -            igt_output_set_pipe(big_joiner_output, PIPE_NONE);
>> -            igt_output_set_pipe(second_output, PIPE_NONE);
>> -            igt_plane_set_fb(plane, NULL);
>> +    igt_output_set_pipe(big_joiner_output, PIPE_NONE);
>> +    igt_output_set_pipe(second_output, PIPE_NONE);
>> +    igt_plane_set_fb(plane, NULL);
>>   -            pipe = &display->pipes[i + 1];
>> -            plane = igt_pipe_get_plane_type(pipe, 
>> DRM_PLANE_TYPE_PRIMARY);
>> -            igt_plane_set_fb(plane, NULL);
>> +    pipe = &display->pipes[data->pipe2];
>> +    plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
>> +    igt_plane_set_fb(plane, NULL);
>>   -            igt_display_commit2(display, COMMIT_ATOMIC);
>> +    igt_display_commit2(display, COMMIT_ATOMIC);
>>   -            igt_output_override_mode(big_joiner_output, NULL);
>> -        }
>> -    }
>> +    igt_output_override_mode(big_joiner_output, NULL);
>>   }
>>     static void test_basic_modeset(data_t *data)
>> @@ -161,10 +157,11 @@ static void test_basic_modeset(data_t *data)
>>       drmModeModeInfo *mode;
>>       igt_output_t *output, *big_joiner_output = NULL;
>>       igt_display_t *display = &data->display;
>> -    int i;
>>       igt_pipe_t *pipe;
>>       igt_plane_t *plane;
>>   +    igt_display_reset(display);
>> +
>>       for_each_connected_output(display, output) {
>>           if (data->big_joiner_output[0].id == output->id) {
>>               big_joiner_output = output;
>> @@ -172,27 +169,23 @@ static void test_basic_modeset(data_t *data)
>>           }
>>       }
>>   -    for_each_pipe(display, i) {
>> -        if (i < (data->n_pipes - 1)) {
>> -            igt_output_set_pipe(big_joiner_output, i);
>> +    igt_output_set_pipe(big_joiner_output, data->pipe1);
>>   -            mode = 
>> &big_joiner_output->config.connector->modes[data->big_joiner_output[0].mode_number];
>> -            igt_output_override_mode(big_joiner_output, mode);
>> +    mode = 
>> &big_joiner_output->config.connector->modes[data->big_joiner_output[0].mode_number];
>> +    igt_output_override_mode(big_joiner_output, mode);
>>   -            pipe = &display->pipes[i];
>> -            plane = igt_pipe_get_plane_type(pipe, 
>> DRM_PLANE_TYPE_PRIMARY);
>> +    pipe = &display->pipes[data->pipe1];
>> +    plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
>>   -            igt_plane_set_fb(plane, &data->fb);
>> -            igt_fb_set_size(&data->fb, plane, mode->hdisplay, 
>> mode->vdisplay);
>> -            igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
>> +    igt_plane_set_fb(plane, &data->fb);
>> +    igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
>> +    igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
>>   -            igt_display_commit2(display, COMMIT_ATOMIC);
>> +    igt_display_commit2(display, COMMIT_ATOMIC);
>>   -            igt_output_set_pipe(big_joiner_output, PIPE_NONE);
>> -            igt_plane_set_fb(plane, NULL);
>> -            igt_display_commit2(display, COMMIT_ATOMIC);
>> -        }
>> -    }
>> +    igt_output_set_pipe(big_joiner_output, PIPE_NONE);
>> +    igt_plane_set_fb(plane, NULL);
>> +    igt_display_commit2(display, COMMIT_ATOMIC);
>>   }
>>     static void test_dual_display(data_t *data)
>> @@ -204,6 +197,8 @@ static void test_dual_display(data_t *data)
>>       igt_plane_t *plane;
>>       int count = 0;
>>   +    igt_display_reset(display);
>> +
>>       for_each_connected_output(display, output) {
>>           if (data->big_joiner_output[count].id == output->id) {
>>               big_joiner_output[count] = output;
>> @@ -214,14 +209,14 @@ static void test_dual_display(data_t *data)
>>               break;
>>       }
>>   -    igt_output_set_pipe(big_joiner_output[0], PIPE_A);
>> -    igt_output_set_pipe(big_joiner_output[1], PIPE_C);
>> +    igt_output_set_pipe(big_joiner_output[0], data->pipe1);
>> +    igt_output_set_pipe(big_joiner_output[1], data->pipe2);
>>         /* Set up first big joiner output on Pipe A*/
>>       mode = 
>> &big_joiner_output[0]->config.connector->modes[data->big_joiner_output[0].mode_number];
>>       igt_output_override_mode(big_joiner_output[0], mode);
>>   -    pipe = &display->pipes[PIPE_A];
>> +    pipe = &display->pipes[data->pipe1];
>>       plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
>>         igt_plane_set_fb(plane, &data->fb);
>> @@ -232,7 +227,7 @@ static void test_dual_display(data_t *data)
>>       mode = 
>> &big_joiner_output[1]->config.connector->modes[data->big_joiner_output[1].mode_number];
>>       igt_output_override_mode(big_joiner_output[1], mode);
>>   -    pipe = &display->pipes[PIPE_C];
>> +    pipe = &display->pipes[data->pipe2];
>>       plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
>>         igt_plane_set_fb(plane, &data->fb);
>> @@ -244,8 +239,8 @@ static void test_dual_display(data_t *data)
>>       /* Clean up */
>>       igt_output_set_pipe(big_joiner_output[0], PIPE_NONE);
>>       igt_output_set_pipe(big_joiner_output[1], PIPE_NONE);
>> - igt_plane_set_fb(igt_pipe_get_plane_type(&display->pipes[PIPE_A], 
>> DRM_PLANE_TYPE_PRIMARY), NULL);
>> - igt_plane_set_fb(igt_pipe_get_plane_type(&display->pipes[PIPE_C], 
>> DRM_PLANE_TYPE_PRIMARY), NULL);
>> + 
>> igt_plane_set_fb(igt_pipe_get_plane_type(&display->pipes[data->pipe1], 
>> DRM_PLANE_TYPE_PRIMARY), NULL);
>> + 
>> igt_plane_set_fb(igt_pipe_get_plane_type(&display->pipes[data->pipe2], 
>> DRM_PLANE_TYPE_PRIMARY), NULL);
>
> As we are preserving the primary plane in variable plane, I think we 
> can have one more variable plane2 and use as below:
>
> igt_plane_set_fb(plane, NULL);
> igt_plane_set_fb(plane2, NULL);
Sure, will update this.
>
>>       igt_display_commit2(display, COMMIT_ATOMIC);
>>   }
>>   @@ -254,8 +249,9 @@ igt_main
>>       data_t data;
>>       igt_output_t *output;
>>       drmModeModeInfo *mode;
>> -    int valid_output = 0, i, count = 0;
>> +    int valid_output = 0, i, count = 0, j = 0;
>>       uint16_t width = 0, height = 0;
>> +    enum pipe pipe_seq[IGT_MAX_PIPES];
>>         igt_fixture {
>>           data.drm_fd = drm_open_driver_master(DRIVER_INTEL);
>
> Please add below items to igt_fixture.
>
> igt_display_require_output();
This will be covered in for_each_connected_output() loop to find the big 
joiner outputs.
> igt_require(display->atomic);
Will add this.
>
>> @@ -282,8 +278,11 @@ igt_main
>>           }
>>             data.n_pipes = 0;
>> -        for_each_pipe(&data.display, i)
>> +        for_each_pipe(&data.display, i) {
>>               data.n_pipes++;
>> +            pipe_seq[j] = i;
>> +            j++;
>> +        }
>>             igt_require_f(count > 0, "No output with 5k+ mode found\n");
>>   @@ -292,21 +291,40 @@ igt_main
>>       }
>>         igt_describe("Verify the basic modeset on big joiner mode on 
>> all pipes");
>> -    igt_subtest("basic")
>> -        test_basic_modeset(&data);
>> +    igt_subtest_with_dynamic("basic") {
>> +        for (i = 0; i < data.n_pipes - 1; i++) {
>> +            if (i < (data.n_pipes - 1)) {
>
> This check is redundant.
Will remove this.
>
>> +                data.pipe1 = pipe_seq[i];
>> +                igt_dynamic_f("pipe-%s", 
>> kmstest_pipe_name(pipe_seq[i]))
>> +                    test_basic_modeset(&data);
>> +            }
>> +        }
>> +    }
>>         igt_describe("Verify if the modeset on the adjoining pipe is 
>> rejected "
>>                "when the pipe is active with a big joiner modeset");
>> -    igt_subtest("invalid-modeset") {
>> +    igt_subtest_with_dynamic("invalid-modeset") {
>>           igt_require_f(valid_output > 1, "No valid Second output 
>> found\n");
>> -        test_invalid_modeset(&data);
>> +        for (i = 0; i < data.n_pipes - 1; i++) {
>> +            if (i < (data.n_pipes - 1)) {
>
> Same here.
Will remove this.
>
>> +                data.pipe1 = pipe_seq[i];
>> +                data.pipe2 = pipe_seq[i + 1];
>> +                igt_dynamic_f("pipe-%s", 
>> kmstest_pipe_name(pipe_seq[i]))
>
> Can we add second pipe name to the subtest?
Sure, will add this.
>
>> + test_invalid_modeset(&data);
>> +            }
>> +        }
>>       }
>>         igt_describe("Verify simultaneous modeset on 2 big joiner 
>> outputs");
>> -    igt_subtest("2x-modeset") {
>> +    igt_subtest_with_dynamic("2x-modeset") {
>>           igt_require_f(count > 1, "2 outputs with big joiner modes 
>> are required\n");
>>           igt_require_f(data.n_pipes > 3, "Minumum of 4 pipes are 
>> required\n");
>> -        test_dual_display(&data);
>> +        for (i = 0; (i + 2) < data.n_pipes - 1; i++) {
>
> consider adl_p, which is having 4 active pipes (A, B, C, D)
>
> With this logic, we can run this test with Pipe-A-C only but Pipe-C-A 
> is also a valid combo.
>
> Are we not loosing the coverage?
I guess not. If that is added, we would be switching the outputs on 
pipe-A and pipe-C, but it would still be a modeset with two 8k displays 
on the same 2 pipes. So would be very similar to the previous case and 
thus an overkill adding that test?
>
>> +            data.pipe1 = pipe_seq[i];
>> +            data.pipe2 = pipe_seq[i + 2];
>> +            igt_dynamic_f("pipe-%s%s", 
>> kmstest_pipe_name(pipe_seq[i]), kmstest_pipe_name(pipe_seq[i + 2]))
>
> Nit: s/"pipe-%s%s"/"pipe-%s-%s"/

Sure, will update this.

Thanks,
Karthik.B.S
>
>> + test_dual_display(&data);
>> +        }
>>       }
>>         igt_fixture {
>

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

end of thread, other threads:[~2022-05-30  8:48 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-27  8:22 [igt-dev] [PATCH i-g-t] tests/kms_big_joiner: Convert test to dynamic Karthik B S
2022-04-27  9:32 ` [igt-dev] ✗ Fi.CI.BAT: failure for " Patchwork
2022-05-18  8:21 ` [igt-dev] [PATCH i-g-t] " Modem, Bhanuprakash
2022-05-30  8:48   ` Karthik B S

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.