All of lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH i-g-t 0/5] lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe.
@ 2018-03-14 11:20 Maarten Lankhorst
  2018-03-14 11:20 ` [igt-dev] [PATCH i-g-t 1/5] lib/igt_kms: Add functions to get only a single output for a pipe Maarten Lankhorst
                   ` (11 more replies)
  0 siblings, 12 replies; 20+ messages in thread
From: Maarten Lankhorst @ 2018-03-14 11:20 UTC (permalink / raw)
  To: igt-dev

Some tests don't have to be called on all outputs, because they only manipulate the pipe.
For these tests we create 2 helper functions, so we reduce the amount of modesets required.

for_each_pipe_with_single_output is a drop in replacement for for_each_pipe_with_valid_output,
and only iterates 1 output per pipe.

igt_get_single_output_for_pipe returns a valid output for a given pipe, if it can be found.
It can be used in place of a for_each_valid_output_on_pipe loop.

This is just a sample conversion, other tests can be changed when this is accepted..

Maarten Lankhorst (5):
  lib/igt_kms: Add functions to get only a single output for a pipe.
  tests/kms_rmfb: Use for_each_pipe_with_single_output.
  tests/kms_busy: Convert to using igt_get_single_output_for_pipe.
  tests/kms_chv_cursor_fail: Reorder tests, and use
    igt_display_require_output_on_pipe.
  tests/kms_chv_cursor_fail: Handle cleanup better.

 lib/igt_kms.c               | 93 +++++++++++++++++++++++++++++++++++++++++++++
 lib/igt_kms.h               | 26 +++++++++++++
 tests/kms_busy.c            | 38 ++++++++----------
 tests/kms_chv_cursor_fail.c | 90 +++++++++++++++++--------------------------
 tests/kms_rmfb.c            |  8 +---
 5 files changed, 171 insertions(+), 84 deletions(-)

-- 
2.16.2

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

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

* [igt-dev] [PATCH i-g-t 1/5] lib/igt_kms: Add functions to get only a single output for a pipe.
  2018-03-14 11:20 [igt-dev] [PATCH i-g-t 0/5] lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe Maarten Lankhorst
@ 2018-03-14 11:20 ` Maarten Lankhorst
  2018-03-14 14:43   ` Ville Syrjälä
  2018-03-14 11:20 ` [igt-dev] [PATCH i-g-t 2/5] tests/kms_rmfb: Use for_each_pipe_with_single_output Maarten Lankhorst
                   ` (10 subsequent siblings)
  11 siblings, 1 reply; 20+ messages in thread
From: Maarten Lankhorst @ 2018-03-14 11:20 UTC (permalink / raw)
  To: igt-dev

igt_get_single_output_for_pipe() will give a valid output for a pipe,
for_each_pipe_with_single_output will iterate over all pipes, and
will be called for each pipe with an output once.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 lib/igt_kms.c | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 lib/igt_kms.h | 26 +++++++++++++++++
 2 files changed, 119 insertions(+)

diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 6bac4d1fae50..1313ef12ebc5 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -2195,6 +2195,99 @@ igt_plane_t *igt_pipe_get_plane_type(igt_pipe_t *pipe, int plane_type)
 	return &pipe->planes[plane_idx];
 }
 
+static bool output_is_internal_panel(igt_output_t *output)
+{
+	switch (output->config.connector->connector_type) {
+	case DRM_MODE_CONNECTOR_LVDS:
+	case DRM_MODE_CONNECTOR_eDP:
+	case DRM_MODE_CONNECTOR_DSI:
+	case DRM_MODE_CONNECTOR_DPI:
+		return true;
+	default:
+		return false;
+	}
+}
+
+igt_output_t **__igt_pipe_populate_outputs(igt_display_t *display, igt_output_t **chosen_outputs)
+{
+	unsigned full_pipe_mask = (1 << (display->n_pipes)) - 1, assigned_pipes = 0;
+	igt_output_t *output;
+	int i, j;
+
+	memset(chosen_outputs, 0, sizeof(*chosen_outputs) * display->n_pipes);
+
+	/*
+	 * Try to assign all outputs to the first available CRTC for
+	 * it, start with the outputs restricted to 1 pipe, then increase
+	 * number of pipes until we assign connectors to all pipes.
+	 */
+	for (i = 0; i <= display->n_pipes; i++) {
+		for_each_connected_output(display, output) {
+			uint32_t pipe_mask = output->config.valid_crtc_idx_mask & full_pipe_mask;
+			bool found = false;
+
+			if (output_is_internal_panel(output)) {
+				/*
+				 * Internal panel should be assigned to pipe A
+				 * if possible, so make sure they're enumerated
+				 * first.
+				 */
+
+				if (i)
+					continue;
+			} else if (__builtin_popcount(pipe_mask) != i)
+				continue;
+
+			for (j = 0; j < display->n_pipes; j++) {
+				bool pipe_assigned = assigned_pipes & (1 << j);
+
+				if (pipe_assigned || !(pipe_mask & (1 << j)))
+					continue;
+
+				if (!found) {
+					/* We found an unassigned pipe, use it! */
+					found = true;
+					assigned_pipes |= 1 << j;
+					chosen_outputs[j] = output;
+				} else if (!chosen_outputs[j] ||
+					   /*
+					    * Overwrite internal panel if not assigned,
+					    * external outputs are faster to do modesets
+					    */
+					   output_is_internal_panel(chosen_outputs[j]))
+					chosen_outputs[j] = output;
+			}
+
+			if (!found)
+				igt_warn("Output %s could not be assigned to a pipe\n",
+					 igt_output_name(output));
+		}
+	}
+
+	return chosen_outputs;
+}
+
+/**
+ * igt_get_single_output_for_pipe:
+ * @display: a pointer to an #igt_display_t structure
+ * @pipe: The pipe for which an #igt_output_t must be returned.
+ *
+ * Get a compatible output for a pipe.
+ *
+ * Returns: A compatible output for a given pipe, or NULL.
+ */
+igt_output_t *igt_get_single_output_for_pipe(igt_display_t *display, enum pipe pipe)
+{
+	igt_output_t *chosen_outputs[display->n_pipes];
+
+	igt_assert(pipe != PIPE_NONE);
+	igt_require(pipe < display->n_pipes);
+
+	__igt_pipe_populate_outputs(display, chosen_outputs);
+
+	return chosen_outputs[pipe];
+}
+
 static igt_output_t *igt_pipe_get_output(igt_pipe_t *pipe)
 {
 	igt_display_t *display = pipe->display;
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 1c46186e8a9d..178b636c143e 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -380,7 +380,9 @@ igt_plane_t *igt_output_get_plane(igt_output_t *output, int plane_idx);
 igt_plane_t *igt_output_get_plane_type(igt_output_t *output, int plane_type);
 igt_output_t *igt_output_from_connector(igt_display_t *display,
     drmModeConnector *connector);
+
 igt_plane_t *igt_pipe_get_plane_type(igt_pipe_t *pipe, int plane_type);
+igt_output_t *igt_get_single_output_for_pipe(igt_display_t *display, enum pipe pipe);
 
 void igt_pipe_request_out_fence(igt_pipe_t *pipe);
 
@@ -468,6 +470,10 @@ static inline bool igt_output_is_connected(igt_output_t *output)
  *
  * This for loop is called over all connected outputs. This function
  * will try every combination of @pipe and @output.
+ *
+ * If you only need to test a single output for each pipe, use
+ * for_each_pipe_with_single_output(), if you only need an
+ * output for a single pipe, use igt_get_single_output_for_pipe().
  */
 #define for_each_pipe_with_valid_output(display, pipe, output) \
 	for (int con__ = (pipe) = 0; \
@@ -476,6 +482,26 @@ static inline bool igt_output_is_connected(igt_output_t *output)
 		for_each_if ((((output) = &(display)->outputs[con__]), \
 			     igt_pipe_connector_valid((pipe), (output))))
 
+igt_output_t **__igt_pipe_populate_outputs(igt_display_t *display,
+					   igt_output_t **chosen_outputs);
+
+/**
+ * for_each_pipe_with_single_output:
+ * @display: a pointer to an #igt_display_t structure
+ * @pipe: The pipe for which this @pipe / @output combination is valid.
+ * @output: The output for which this @pipe / @output combination is valid.
+ *
+ * This loop is called over all pipes, and will try to find a compatible output
+ * for each pipe. Unlike for_each_pipe_with_valid_output(), this function will
+ * be called at most once for each pipe.
+ */
+#define for_each_pipe_with_single_output(display, pipe, output) \
+	for (igt_output_t *__outputs[(display)->n_pipes], \
+	     **__output = __igt_pipe_populate_outputs((display), __outputs); \
+	     __output < &__outputs[(display)->n_pipes]; __output++) \
+		for_each_if (*__output && \
+			     ((pipe) = (__outputs - __output), (output) = *__output, 1))
+
 /**
  * for_each_valid_output_on_pipe:
  * @display: a pointer to an #igt_display_t structure
-- 
2.16.2

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

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

* [igt-dev] [PATCH i-g-t 2/5] tests/kms_rmfb: Use for_each_pipe_with_single_output.
  2018-03-14 11:20 [igt-dev] [PATCH i-g-t 0/5] lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe Maarten Lankhorst
  2018-03-14 11:20 ` [igt-dev] [PATCH i-g-t 1/5] lib/igt_kms: Add functions to get only a single output for a pipe Maarten Lankhorst
@ 2018-03-14 11:20 ` Maarten Lankhorst
  2018-03-14 14:44   ` Ville Syrjälä
  2018-03-14 11:20 ` [igt-dev] [PATCH i-g-t 3/5] tests/kms_busy: Convert to using igt_get_single_output_for_pipe Maarten Lankhorst
                   ` (9 subsequent siblings)
  11 siblings, 1 reply; 20+ messages in thread
From: Maarten Lankhorst @ 2018-03-14 11:20 UTC (permalink / raw)
  To: igt-dev

A single output on every pipe will do for testing.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 tests/kms_rmfb.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/tests/kms_rmfb.c b/tests/kms_rmfb.c
index c97adceea761..f3461cc919e9 100644
--- a/tests/kms_rmfb.c
+++ b/tests/kms_rmfb.c
@@ -129,15 +129,10 @@ static void
 run_rmfb_test(struct rmfb_data *data, bool reopen)
 {
 	igt_output_t *output;
-	int valid_tests = 0;
 	enum pipe pipe;
 
-	for_each_pipe_with_valid_output(&data->display, pipe, output) {
+	for_each_pipe_with_single_output(&data->display, pipe, output)
 		test_rmfb(data, output, pipe, reopen);
-		valid_tests = 1;
-	}
-
-	igt_require_f(valid_tests, "no valid crtc/connector combinations found\n");
 }
 
 igt_main
@@ -152,6 +147,7 @@ igt_main
 		kmstest_set_vt_graphics_mode();
 
 		igt_display_init(&data.display, data.drm_fd);
+		igt_display_require_output(&data.display);
 	}
 
 	igt_subtest_f("rmfb-ioctl")
-- 
2.16.2

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

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

* [igt-dev] [PATCH i-g-t 3/5] tests/kms_busy: Convert to using igt_get_single_output_for_pipe.
  2018-03-14 11:20 [igt-dev] [PATCH i-g-t 0/5] lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe Maarten Lankhorst
  2018-03-14 11:20 ` [igt-dev] [PATCH i-g-t 1/5] lib/igt_kms: Add functions to get only a single output for a pipe Maarten Lankhorst
  2018-03-14 11:20 ` [igt-dev] [PATCH i-g-t 2/5] tests/kms_rmfb: Use for_each_pipe_with_single_output Maarten Lankhorst
@ 2018-03-14 11:20 ` Maarten Lankhorst
  2018-03-14 14:46   ` Ville Syrjälä
  2018-03-14 11:20 ` [igt-dev] [PATCH i-g-t 4/5] tests/kms_chv_cursor_fail: Reorder tests, and use igt_display_require_output_on_pipe Maarten Lankhorst
                   ` (8 subsequent siblings)
  11 siblings, 1 reply; 20+ messages in thread
From: Maarten Lankhorst @ 2018-03-14 11:20 UTC (permalink / raw)
  To: igt-dev

Put a single igt_display_require_output_on_pipe in the fixture,
so we know we always have an output on the pipe and can always
assume it's not NULL.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 tests/kms_busy.c | 38 +++++++++++++++-----------------------
 1 file changed, 15 insertions(+), 23 deletions(-)

diff --git a/tests/kms_busy.c b/tests/kms_busy.c
index 0828a8b38a06..5b4959681025 100644
--- a/tests/kms_busy.c
+++ b/tests/kms_busy.c
@@ -35,31 +35,23 @@ IGT_TEST_DESCRIPTION("Basic check of KMS ABI with busy framebuffers.");
 static igt_output_t *
 set_fb_on_crtc(igt_display_t *dpy, int pipe, struct igt_fb *fb)
 {
+	drmModeModeInfoPtr mode;
+	igt_plane_t *primary;
 	igt_output_t *output;
 
-	for_each_valid_output_on_pipe(dpy, pipe, output) {
-		drmModeModeInfoPtr mode;
-		igt_plane_t *primary;
-
-		if (output->pending_pipe != PIPE_NONE)
-			continue;
-
-		igt_output_set_pipe(output, pipe);
-		mode = igt_output_get_mode(output);
+	output = igt_get_single_output_for_pipe(dpy, pipe);
 
-		igt_create_pattern_fb(dpy->drm_fd,
-				      mode->hdisplay, mode->vdisplay,
-				      DRM_FORMAT_XRGB8888,
-				      LOCAL_I915_FORMAT_MOD_X_TILED,
-				      fb);
+	igt_output_set_pipe(output, pipe);
+	mode = igt_output_get_mode(output);
 
-		primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
-		igt_plane_set_fb(primary, fb);
+	igt_create_pattern_fb(dpy->drm_fd, mode->hdisplay, mode->vdisplay,
+			      DRM_FORMAT_XRGB8888,
+			      LOCAL_I915_FORMAT_MOD_X_TILED, fb);
 
-		return output;
-	}
+	primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
+	igt_plane_set_fb(primary, fb);
 
-	return NULL;
+	return output;
 }
 
 static void do_cleanup_display(igt_display_t *dpy)
@@ -168,7 +160,7 @@ static void test_flip(igt_display_t *dpy, unsigned ring, int pipe, bool modeset)
 
 	signal(SIGALRM, sighandler);
 
-	igt_require((output = set_fb_on_crtc(dpy, pipe, &fb[0])));
+	output = set_fb_on_crtc(dpy, pipe, &fb[0]);
 	igt_display_commit2(dpy, COMMIT_LEGACY);
 
 	igt_create_pattern_fb(dpy->drm_fd,
@@ -246,7 +238,7 @@ static void test_hang(igt_display_t *dpy, unsigned ring,
 	igt_output_t *output;
 	igt_plane_t *primary;
 
-	igt_require((output = set_fb_on_crtc(dpy, pipe, &fb[0])));
+	output = set_fb_on_crtc(dpy, pipe, &fb[0]);
 	igt_display_commit2(dpy, COMMIT_ATOMIC);
 	primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
 
@@ -290,7 +282,7 @@ static void test_pageflip_modeset_hang(igt_display_t *dpy,
 	igt_plane_t *primary;
 	igt_spin_t *t;
 
-	igt_require((output = set_fb_on_crtc(dpy, pipe, &fb)));
+	output = set_fb_on_crtc(dpy, pipe, &fb);
 	primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
 
 	igt_display_commit2(dpy, dpy->is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY);
@@ -337,7 +329,7 @@ igt_main
 		errno = 0;
 
 		igt_fixture {
-			igt_skip_on(n >= display.n_pipes);
+			igt_display_require_output_on_pipe(&display, n);
 		}
 
 		igt_subtest_f("basic-flip-%s",
-- 
2.16.2

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

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

* [igt-dev] [PATCH i-g-t 4/5] tests/kms_chv_cursor_fail: Reorder tests, and use igt_display_require_output_on_pipe.
  2018-03-14 11:20 [igt-dev] [PATCH i-g-t 0/5] lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe Maarten Lankhorst
                   ` (2 preceding siblings ...)
  2018-03-14 11:20 ` [igt-dev] [PATCH i-g-t 3/5] tests/kms_busy: Convert to using igt_get_single_output_for_pipe Maarten Lankhorst
@ 2018-03-14 11:20 ` Maarten Lankhorst
  2018-03-14 11:20 ` [igt-dev] [PATCH i-g-t 5/5] tests/kms_chv_cursor_fail: Handle cleanup better Maarten Lankhorst
                   ` (7 subsequent siblings)
  11 siblings, 0 replies; 20+ messages in thread
From: Maarten Lankhorst @ 2018-03-14 11:20 UTC (permalink / raw)
  To: igt-dev

This test is purely about the pipe fifo underrun, so not all outputs
need to be tested. Reorder the tests to run per pipe first, this will
save a modeset for all different sizes when the tests are run per-binary,
and another modeset on each subtest when more than 1 output is connected.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 tests/kms_chv_cursor_fail.c | 85 ++++++++++++++++++---------------------------
 1 file changed, 34 insertions(+), 51 deletions(-)

diff --git a/tests/kms_chv_cursor_fail.c b/tests/kms_chv_cursor_fail.c
index ffbe39d0c41b..0dd366c3b4b1 100644
--- a/tests/kms_chv_cursor_fail.c
+++ b/tests/kms_chv_cursor_fail.c
@@ -246,7 +246,7 @@ static void prepare_crtc(data_t *data)
 	primary = igt_output_get_plane_type(data->output, DRM_PLANE_TYPE_PRIMARY);
 	igt_plane_set_fb(primary, &data->primary_fb);
 
-	igt_display_commit(display);
+	igt_display_commit2(display, display->is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY);
 
 	data->jump_x = (mode->hdisplay - data->curw) / 2;
 	data->jump_y = (mode->vdisplay - data->curh) / 2;
@@ -262,34 +262,15 @@ static void prepare_crtc(data_t *data)
 
 static void test_crtc(data_t *data, unsigned int edges)
 {
-	igt_display_t *display = &data->display;
-	int valid_tests = 0;
-
 	cleanup_crtc(data);
 
 	create_cursor_fb(data, data->curw, data->curh);
 
-	for_each_valid_output_on_pipe(display, data->pipe, data->output) {
-		prepare_crtc(data);
-
-		valid_tests++;
-
-		igt_info("Beginning %s on pipe %s, connector %s\n",
-			 igt_subtest_name(),
-			 kmstest_pipe_name(data->pipe),
-			 igt_output_name(data->output));
+	prepare_crtc(data);
 
-		test_edges(data, edges);
-
-		igt_info("\n%s on pipe %s, connector %s: PASSED\n\n",
-			 igt_subtest_name(),
-			 kmstest_pipe_name(data->pipe),
-			 igt_output_name(data->output));
-	}
+	test_edges(data, edges);
 
 	igt_remove_fb(data->drm_fd, &data->fb);
-
-	igt_require_f(valid_tests, "no valid crtc/connector combinations found\n");
 }
 
 static int opt_handler(int opt, int opt_index, void *_data)
@@ -354,36 +335,38 @@ int main(int argc, char **argv)
 		igt_display_init(&data.display, data.drm_fd);
 	}
 
-	for (data.curw = 64; data.curw <= 256; data.curw *= 2) {
-		data.curh = data.curw;
-		for (data.pipe = PIPE_A; data.pipe <= PIPE_C; data.pipe++) {
-			igt_subtest_f("pipe-%s-%dx%d-left-edge",
-				      kmstest_pipe_name(data.pipe),
-				      data.curw, data.curh) {
-				igt_require(data.pipe < data.display.n_pipes);
-				igt_require(data.curw <= max_curw && data.curh <= max_curh);
-				test_crtc(&data, EDGE_LEFT);
-			}
-			igt_subtest_f("pipe-%s-%dx%d-right-edge",
-				      kmstest_pipe_name(data.pipe),
-				      data.curw, data.curh) {
-				igt_require(data.pipe < data.display.n_pipes);
-				igt_require(data.curw <= max_curw && data.curh <= max_curh);
-				test_crtc(&data, EDGE_RIGHT);
+	for_each_pipe_static(data.pipe) {
+		igt_subtest_group {
+			igt_fixture {
+				igt_display_require_output_on_pipe(&data.display, data.pipe);
+				data.output = igt_get_single_output_for_pipe(&data.display, data.pipe);
 			}
-			igt_subtest_f("pipe-%s-%dx%d-top-edge",
-				      kmstest_pipe_name(data.pipe),
-				      data.curw, data.curh) {
-				igt_require(data.pipe < data.display.n_pipes);
-				igt_require(data.curw <= max_curw && data.curh <= max_curh);
-				test_crtc(&data, EDGE_TOP);
-			}
-			igt_subtest_f("pipe-%s-%dx%d-bottom-edge",
-				      kmstest_pipe_name(data.pipe),
-				      data.curw, data.curh) {
-				igt_require(data.pipe < data.display.n_pipes);
-				igt_require(data.curw <= max_curw && data.curh <= max_curh);
-				test_crtc(&data, EDGE_BOTTOM);
+
+			for (data.curw = 64; data.curw <= 256; data.curw *= 2) {
+				data.curh = data.curw;
+
+				igt_fixture
+					igt_require(data.curw <= max_curw && data.curh <= max_curh);
+
+				igt_subtest_f("pipe-%s-%dx%d-left-edge",
+					kmstest_pipe_name(data.pipe),
+					data.curw, data.curh)
+					test_crtc(&data, EDGE_LEFT);
+
+				igt_subtest_f("pipe-%s-%dx%d-right-edge",
+					kmstest_pipe_name(data.pipe),
+					data.curw, data.curh)
+					test_crtc(&data, EDGE_RIGHT);
+
+				igt_subtest_f("pipe-%s-%dx%d-top-edge",
+					kmstest_pipe_name(data.pipe),
+					data.curw, data.curh)
+					test_crtc(&data, EDGE_TOP);
+
+				igt_subtest_f("pipe-%s-%dx%d-bottom-edge",
+					kmstest_pipe_name(data.pipe),
+					data.curw, data.curh)
+					test_crtc(&data, EDGE_BOTTOM);
 			}
 		}
 	}
-- 
2.16.2

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

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

* [igt-dev] [PATCH i-g-t 5/5] tests/kms_chv_cursor_fail: Handle cleanup better.
  2018-03-14 11:20 [igt-dev] [PATCH i-g-t 0/5] lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe Maarten Lankhorst
                   ` (3 preceding siblings ...)
  2018-03-14 11:20 ` [igt-dev] [PATCH i-g-t 4/5] tests/kms_chv_cursor_fail: Reorder tests, and use igt_display_require_output_on_pipe Maarten Lankhorst
@ 2018-03-14 11:20 ` Maarten Lankhorst
  2018-03-14 14:48   ` Ville Syrjälä
  2018-03-14 13:37 ` [igt-dev] ✓ Fi.CI.BAT: success for lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe Patchwork
                   ` (6 subsequent siblings)
  11 siblings, 1 reply; 20+ messages in thread
From: Maarten Lankhorst @ 2018-03-14 11:20 UTC (permalink / raw)
  To: igt-dev

Clean up cursor fb in cleanup_crtc, which means that cursor fb
has to be created after prepare_crtc() is called.

This will fix a small leak when a subtest fails.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 tests/kms_chv_cursor_fail.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/tests/kms_chv_cursor_fail.c b/tests/kms_chv_cursor_fail.c
index 0dd366c3b4b1..7138e549aeb7 100644
--- a/tests/kms_chv_cursor_fail.c
+++ b/tests/kms_chv_cursor_fail.c
@@ -224,6 +224,7 @@ static void cleanup_crtc(data_t *data)
 	data->pipe_crc = NULL;
 
 	igt_remove_fb(data->drm_fd, &data->primary_fb);
+	igt_remove_fb(data->drm_fd, &data->fb);
 }
 
 static void prepare_crtc(data_t *data)
@@ -262,15 +263,11 @@ static void prepare_crtc(data_t *data)
 
 static void test_crtc(data_t *data, unsigned int edges)
 {
-	cleanup_crtc(data);
+	prepare_crtc(data);
 
 	create_cursor_fb(data, data->curw, data->curh);
 
-	prepare_crtc(data);
-
 	test_edges(data, edges);
-
-	igt_remove_fb(data->drm_fd, &data->fb);
 }
 
 static int opt_handler(int opt, int opt_index, void *_data)
-- 
2.16.2

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

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

* [igt-dev] ✓ Fi.CI.BAT: success for lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe.
  2018-03-14 11:20 [igt-dev] [PATCH i-g-t 0/5] lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe Maarten Lankhorst
                   ` (4 preceding siblings ...)
  2018-03-14 11:20 ` [igt-dev] [PATCH i-g-t 5/5] tests/kms_chv_cursor_fail: Handle cleanup better Maarten Lankhorst
@ 2018-03-14 13:37 ` Patchwork
  2018-03-14 17:22 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
                   ` (5 subsequent siblings)
  11 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2018-03-14 13:37 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: igt-dev

== Series Details ==

Series: lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe.
URL   : https://patchwork.freedesktop.org/series/39953/
State : success

== Summary ==

IGT patchset tested on top of latest successful build
518ccf1d1b452b9d26ddcf54249fb6e91f451f90 tests/kms_frontbuffer_tracking: Respect mode when collecting CRCs.

with latest DRM-Tip kernel build CI_DRM_3926
47934443f321 drm-tip: 2018y-03m-14d-12h-41m-28s UTC integration manifest

Testlist changes:
+igt@kms_chv_cursor_fail@pipe-d-64x64-bottom-edge
+igt@kms_chv_cursor_fail@pipe-d-64x64-left-edge
+igt@kms_chv_cursor_fail@pipe-d-64x64-right-edge
+igt@kms_chv_cursor_fail@pipe-d-64x64-top-edge
+igt@kms_chv_cursor_fail@pipe-d-128x128-bottom-edge
+igt@kms_chv_cursor_fail@pipe-d-128x128-left-edge
+igt@kms_chv_cursor_fail@pipe-d-128x128-right-edge
+igt@kms_chv_cursor_fail@pipe-d-128x128-top-edge
+igt@kms_chv_cursor_fail@pipe-d-256x256-bottom-edge
+igt@kms_chv_cursor_fail@pipe-d-256x256-left-edge
+igt@kms_chv_cursor_fail@pipe-d-256x256-right-edge
+igt@kms_chv_cursor_fail@pipe-d-256x256-top-edge
+igt@kms_chv_cursor_fail@pipe-e-64x64-bottom-edge
+igt@kms_chv_cursor_fail@pipe-e-64x64-left-edge
+igt@kms_chv_cursor_fail@pipe-e-64x64-right-edge
+igt@kms_chv_cursor_fail@pipe-e-64x64-top-edge
+igt@kms_chv_cursor_fail@pipe-e-128x128-bottom-edge
+igt@kms_chv_cursor_fail@pipe-e-128x128-left-edge
+igt@kms_chv_cursor_fail@pipe-e-128x128-right-edge
+igt@kms_chv_cursor_fail@pipe-e-128x128-top-edge
+igt@kms_chv_cursor_fail@pipe-e-256x256-bottom-edge
+igt@kms_chv_cursor_fail@pipe-e-256x256-left-edge
+igt@kms_chv_cursor_fail@pipe-e-256x256-right-edge
+igt@kms_chv_cursor_fail@pipe-e-256x256-top-edge
+igt@kms_chv_cursor_fail@pipe-f-64x64-bottom-edge
+igt@kms_chv_cursor_fail@pipe-f-64x64-left-edge
+igt@kms_chv_cursor_fail@pipe-f-64x64-right-edge
+igt@kms_chv_cursor_fail@pipe-f-64x64-top-edge
+igt@kms_chv_cursor_fail@pipe-f-128x128-bottom-edge
+igt@kms_chv_cursor_fail@pipe-f-128x128-left-edge
+igt@kms_chv_cursor_fail@pipe-f-128x128-right-edge
+igt@kms_chv_cursor_fail@pipe-f-128x128-top-edge
+igt@kms_chv_cursor_fail@pipe-f-256x256-bottom-edge
+igt@kms_chv_cursor_fail@pipe-f-256x256-left-edge
+igt@kms_chv_cursor_fail@pipe-f-256x256-right-edge
+igt@kms_chv_cursor_fail@pipe-f-256x256-top-edge

---- Known issues:

Test gem_mmap_gtt:
        Subgroup basic-small-bo-tiledx:
                fail       -> PASS       (fi-gdg-551) fdo#102575

fdo#102575 https://bugs.freedesktop.org/show_bug.cgi?id=102575

fi-bdw-gvtdvm    total:288  pass:264  dwarn:0   dfail:0   fail:0   skip:24  time:434s
fi-blb-e6850     total:288  pass:223  dwarn:1   dfail:0   fail:0   skip:64  time:383s
fi-bwr-2160      total:288  pass:183  dwarn:0   dfail:0   fail:0   skip:105 time:298s
fi-bxt-dsi       total:288  pass:258  dwarn:0   dfail:0   fail:0   skip:30  time:512s
fi-bxt-j4205     total:288  pass:259  dwarn:0   dfail:0   fail:0   skip:29  time:513s
fi-byt-j1900     total:288  pass:253  dwarn:0   dfail:0   fail:0   skip:35  time:526s
fi-cfl-8700k     total:288  pass:260  dwarn:0   dfail:0   fail:0   skip:28  time:413s
fi-cfl-s2        total:288  pass:262  dwarn:0   dfail:0   fail:0   skip:26  time:575s
fi-cfl-u         total:288  pass:262  dwarn:0   dfail:0   fail:0   skip:26  time:514s
fi-cnl-y3        total:288  pass:262  dwarn:0   dfail:0   fail:0   skip:26  time:587s
fi-elk-e7500     total:288  pass:229  dwarn:0   dfail:0   fail:0   skip:59  time:429s
fi-gdg-551       total:288  pass:180  dwarn:0   dfail:0   fail:0   skip:108 time:318s
fi-glk-1         total:288  pass:260  dwarn:0   dfail:0   fail:0   skip:28  time:530s
fi-hsw-4770      total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:404s
fi-ilk-650       total:288  pass:228  dwarn:0   dfail:0   fail:0   skip:60  time:429s
fi-ivb-3770      total:288  pass:255  dwarn:0   dfail:0   fail:0   skip:33  time:427s
fi-kbl-7500u     total:288  pass:263  dwarn:1   dfail:0   fail:0   skip:24  time:475s
fi-kbl-7567u     total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:470s
fi-kbl-r         total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:514s
fi-pnv-d510      total:288  pass:222  dwarn:1   dfail:0   fail:0   skip:65  time:665s
fi-skl-6260u     total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:445s
fi-skl-6600u     total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:531s
fi-skl-6700hq    total:288  pass:262  dwarn:0   dfail:0   fail:0   skip:26  time:544s
fi-skl-6700k2    total:288  pass:264  dwarn:0   dfail:0   fail:0   skip:24  time:506s
fi-skl-6770hq    total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:496s
fi-skl-guc       total:288  pass:260  dwarn:0   dfail:0   fail:0   skip:28  time:428s
fi-skl-gvtdvm    total:288  pass:265  dwarn:0   dfail:0   fail:0   skip:23  time:443s
fi-snb-2600      total:288  pass:248  dwarn:0   dfail:0   fail:0   skip:40  time:401s
Blacklisted hosts:
fi-cnl-drrs      total:288  pass:257  dwarn:3   dfail:0   fail:0   skip:28  time:528s

== Logs ==

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

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

* Re: [igt-dev] [PATCH i-g-t 1/5] lib/igt_kms: Add functions to get only a single output for a pipe.
  2018-03-14 11:20 ` [igt-dev] [PATCH i-g-t 1/5] lib/igt_kms: Add functions to get only a single output for a pipe Maarten Lankhorst
@ 2018-03-14 14:43   ` Ville Syrjälä
  2018-03-15 16:58     ` [igt-dev] [PATCH i-g-t] lib/igt_kms: Add functions to get only a single output for a pipe, v2 Maarten Lankhorst
  0 siblings, 1 reply; 20+ messages in thread
From: Ville Syrjälä @ 2018-03-14 14:43 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: igt-dev

On Wed, Mar 14, 2018 at 12:20:17PM +0100, Maarten Lankhorst wrote:
> igt_get_single_output_for_pipe() will give a valid output for a pipe,
> for_each_pipe_with_single_output will iterate over all pipes, and
> will be called for each pipe with an output once.
> 
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> ---
>  lib/igt_kms.c | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  lib/igt_kms.h | 26 +++++++++++++++++
>  2 files changed, 119 insertions(+)
> 
> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> index 6bac4d1fae50..1313ef12ebc5 100644
> --- a/lib/igt_kms.c
> +++ b/lib/igt_kms.c
> @@ -2195,6 +2195,99 @@ igt_plane_t *igt_pipe_get_plane_type(igt_pipe_t *pipe, int plane_type)
>  	return &pipe->planes[plane_idx];
>  }
>  
> +static bool output_is_internal_panel(igt_output_t *output)
> +{
> +	switch (output->config.connector->connector_type) {
> +	case DRM_MODE_CONNECTOR_LVDS:
> +	case DRM_MODE_CONNECTOR_eDP:
> +	case DRM_MODE_CONNECTOR_DSI:
> +	case DRM_MODE_CONNECTOR_DPI:
> +		return true;
> +	default:
> +		return false;
> +	}
> +}
> +
> +igt_output_t **__igt_pipe_populate_outputs(igt_display_t *display, igt_output_t **chosen_outputs)
> +{
> +	unsigned full_pipe_mask = (1 << (display->n_pipes)) - 1, assigned_pipes = 0;
> +	igt_output_t *output;
> +	int i, j;
> +
> +	memset(chosen_outputs, 0, sizeof(*chosen_outputs) * display->n_pipes);
> +
> +	/*
> +	 * Try to assign all outputs to the first available CRTC for
> +	 * it, start with the outputs restricted to 1 pipe, then increase
> +	 * number of pipes until we assign connectors to all pipes.
> +	 */
> +	for (i = 0; i <= display->n_pipes; i++) {
> +		for_each_connected_output(display, output) {
> +			uint32_t pipe_mask = output->config.valid_crtc_idx_mask & full_pipe_mask;
> +			bool found = false;
> +
> +			if (output_is_internal_panel(output)) {
> +				/*
> +				 * Internal panel should be assigned to pipe A
> +				 * if possible, so make sure they're enumerated
> +				 * first.
> +				 */
> +
> +				if (i)
> +					continue;
> +			} else if (__builtin_popcount(pipe_mask) != i)
> +				continue;
> +
> +			for (j = 0; j < display->n_pipes; j++) {
> +				bool pipe_assigned = assigned_pipes & (1 << j);
> +
> +				if (pipe_assigned || !(pipe_mask & (1 << j)))
> +					continue;
> +
> +				if (!found) {
> +					/* We found an unassigned pipe, use it! */
> +					found = true;
> +					assigned_pipes |= 1 << j;
> +					chosen_outputs[j] = output;
> +				} else if (!chosen_outputs[j] ||
> +					   /*
> +					    * Overwrite internal panel if not assigned,
> +					    * external outputs are faster to do modesets
> +					    */
> +					   output_is_internal_panel(chosen_outputs[j]))
> +					chosen_outputs[j] = output;
> +			}

I think this might not be find the optimal solution in some cases since
it always picks the first available pipe. So in theory we might not pick
as many outputs that are actually available. But I suppose such
configurations shouldn't be commoin so probably will do fine for most
cases.

> +
> +			if (!found)
> +				igt_warn("Output %s could not be assigned to a pipe\n",
> +					 igt_output_name(output));
> +		}
> +	}
> +
> +	return chosen_outputs;
> +}
> +
> +/**
> + * igt_get_single_output_for_pipe:
> + * @display: a pointer to an #igt_display_t structure
> + * @pipe: The pipe for which an #igt_output_t must be returned.
> + *
> + * Get a compatible output for a pipe.
> + *
> + * Returns: A compatible output for a given pipe, or NULL.
> + */
> +igt_output_t *igt_get_single_output_for_pipe(igt_display_t *display, enum pipe pipe)
> +{
> +	igt_output_t *chosen_outputs[display->n_pipes];
> +
> +	igt_assert(pipe != PIPE_NONE);
> +	igt_require(pipe < display->n_pipes);
> +
> +	__igt_pipe_populate_outputs(display, chosen_outputs);
> +
> +	return chosen_outputs[pipe];
> +}
> +
>  static igt_output_t *igt_pipe_get_output(igt_pipe_t *pipe)
>  {
>  	igt_display_t *display = pipe->display;
> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
> index 1c46186e8a9d..178b636c143e 100644
> --- a/lib/igt_kms.h
> +++ b/lib/igt_kms.h
> @@ -380,7 +380,9 @@ igt_plane_t *igt_output_get_plane(igt_output_t *output, int plane_idx);
>  igt_plane_t *igt_output_get_plane_type(igt_output_t *output, int plane_type);
>  igt_output_t *igt_output_from_connector(igt_display_t *display,
>      drmModeConnector *connector);
> +
>  igt_plane_t *igt_pipe_get_plane_type(igt_pipe_t *pipe, int plane_type);
> +igt_output_t *igt_get_single_output_for_pipe(igt_display_t *display, enum pipe pipe);
>  
>  void igt_pipe_request_out_fence(igt_pipe_t *pipe);
>  
> @@ -468,6 +470,10 @@ static inline bool igt_output_is_connected(igt_output_t *output)
>   *
>   * This for loop is called over all connected outputs. This function
>   * will try every combination of @pipe and @output.
> + *
> + * If you only need to test a single output for each pipe, use
> + * for_each_pipe_with_single_output(), if you only need an
> + * output for a single pipe, use igt_get_single_output_for_pipe().
>   */
>  #define for_each_pipe_with_valid_output(display, pipe, output) \
>  	for (int con__ = (pipe) = 0; \
> @@ -476,6 +482,26 @@ static inline bool igt_output_is_connected(igt_output_t *output)
>  		for_each_if ((((output) = &(display)->outputs[con__]), \
>  			     igt_pipe_connector_valid((pipe), (output))))
>  
> +igt_output_t **__igt_pipe_populate_outputs(igt_display_t *display,
> +					   igt_output_t **chosen_outputs);
> +
> +/**
> + * for_each_pipe_with_single_output:
> + * @display: a pointer to an #igt_display_t structure
> + * @pipe: The pipe for which this @pipe / @output combination is valid.
> + * @output: The output for which this @pipe / @output combination is valid.
> + *
> + * This loop is called over all pipes, and will try to find a compatible output
> + * for each pipe. Unlike for_each_pipe_with_valid_output(), this function will
> + * be called at most once for each pipe.
> + */
> +#define for_each_pipe_with_single_output(display, pipe, output) \
> +	for (igt_output_t *__outputs[(display)->n_pipes], \
> +	     **__output = __igt_pipe_populate_outputs((display), __outputs); \
> +	     __output < &__outputs[(display)->n_pipes]; __output++) \
> +		for_each_if (*__output && \
> +			     ((pipe) = (__outputs - __output), (output) = *__output, 1))

That requires quite a sophisticated parser :) But it does look correct to me.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

> +
>  /**
>   * for_each_valid_output_on_pipe:
>   * @display: a pointer to an #igt_display_t structure
> -- 
> 2.16.2
> 
> _______________________________________________
> igt-dev mailing list
> igt-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/igt-dev

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

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

* Re: [igt-dev] [PATCH i-g-t 2/5] tests/kms_rmfb: Use for_each_pipe_with_single_output.
  2018-03-14 11:20 ` [igt-dev] [PATCH i-g-t 2/5] tests/kms_rmfb: Use for_each_pipe_with_single_output Maarten Lankhorst
@ 2018-03-14 14:44   ` Ville Syrjälä
  0 siblings, 0 replies; 20+ messages in thread
From: Ville Syrjälä @ 2018-03-14 14:44 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: igt-dev

On Wed, Mar 14, 2018 at 12:20:18PM +0100, Maarten Lankhorst wrote:
> A single output on every pipe will do for testing.
> 
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

> ---
>  tests/kms_rmfb.c | 8 ++------
>  1 file changed, 2 insertions(+), 6 deletions(-)
> 
> diff --git a/tests/kms_rmfb.c b/tests/kms_rmfb.c
> index c97adceea761..f3461cc919e9 100644
> --- a/tests/kms_rmfb.c
> +++ b/tests/kms_rmfb.c
> @@ -129,15 +129,10 @@ static void
>  run_rmfb_test(struct rmfb_data *data, bool reopen)
>  {
>  	igt_output_t *output;
> -	int valid_tests = 0;
>  	enum pipe pipe;
>  
> -	for_each_pipe_with_valid_output(&data->display, pipe, output) {
> +	for_each_pipe_with_single_output(&data->display, pipe, output)
>  		test_rmfb(data, output, pipe, reopen);
> -		valid_tests = 1;
> -	}
> -
> -	igt_require_f(valid_tests, "no valid crtc/connector combinations found\n");
>  }
>  
>  igt_main
> @@ -152,6 +147,7 @@ igt_main
>  		kmstest_set_vt_graphics_mode();
>  
>  		igt_display_init(&data.display, data.drm_fd);
> +		igt_display_require_output(&data.display);
>  	}
>  
>  	igt_subtest_f("rmfb-ioctl")
> -- 
> 2.16.2
> 
> _______________________________________________
> igt-dev mailing list
> igt-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/igt-dev

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

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

* Re: [igt-dev] [PATCH i-g-t 3/5] tests/kms_busy: Convert to using igt_get_single_output_for_pipe.
  2018-03-14 11:20 ` [igt-dev] [PATCH i-g-t 3/5] tests/kms_busy: Convert to using igt_get_single_output_for_pipe Maarten Lankhorst
@ 2018-03-14 14:46   ` Ville Syrjälä
  2018-03-16  8:28     ` [igt-dev] [PATCH i-g-t] tests/kms_busy: Convert to using igt_get_single_output_for_pipe, v2 Maarten Lankhorst
  0 siblings, 1 reply; 20+ messages in thread
From: Ville Syrjälä @ 2018-03-14 14:46 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: igt-dev

On Wed, Mar 14, 2018 at 12:20:19PM +0100, Maarten Lankhorst wrote:
> Put a single igt_display_require_output_on_pipe in the fixture,
> so we know we always have an output on the pipe and can always
> assume it's not NULL.
> 
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

> ---
>  tests/kms_busy.c | 38 +++++++++++++++-----------------------
>  1 file changed, 15 insertions(+), 23 deletions(-)
> 
> diff --git a/tests/kms_busy.c b/tests/kms_busy.c
> index 0828a8b38a06..5b4959681025 100644
> --- a/tests/kms_busy.c
> +++ b/tests/kms_busy.c
> @@ -35,31 +35,23 @@ IGT_TEST_DESCRIPTION("Basic check of KMS ABI with busy framebuffers.");
>  static igt_output_t *
>  set_fb_on_crtc(igt_display_t *dpy, int pipe, struct igt_fb *fb)
>  {
> +	drmModeModeInfoPtr mode;
> +	igt_plane_t *primary;
>  	igt_output_t *output;
>  
> -	for_each_valid_output_on_pipe(dpy, pipe, output) {
> -		drmModeModeInfoPtr mode;
> -		igt_plane_t *primary;
> -
> -		if (output->pending_pipe != PIPE_NONE)
> -			continue;
> -
> -		igt_output_set_pipe(output, pipe);
> -		mode = igt_output_get_mode(output);
> +	output = igt_get_single_output_for_pipe(dpy, pipe);
>  
> -		igt_create_pattern_fb(dpy->drm_fd,
> -				      mode->hdisplay, mode->vdisplay,
> -				      DRM_FORMAT_XRGB8888,
> -				      LOCAL_I915_FORMAT_MOD_X_TILED,
> -				      fb);
> +	igt_output_set_pipe(output, pipe);
> +	mode = igt_output_get_mode(output);
>  
> -		primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
> -		igt_plane_set_fb(primary, fb);
> +	igt_create_pattern_fb(dpy->drm_fd, mode->hdisplay, mode->vdisplay,
> +			      DRM_FORMAT_XRGB8888,
> +			      LOCAL_I915_FORMAT_MOD_X_TILED, fb);
>  
> -		return output;
> -	}
> +	primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
> +	igt_plane_set_fb(primary, fb);
>  
> -	return NULL;
> +	return output;
>  }
>  
>  static void do_cleanup_display(igt_display_t *dpy)
> @@ -168,7 +160,7 @@ static void test_flip(igt_display_t *dpy, unsigned ring, int pipe, bool modeset)
>  
>  	signal(SIGALRM, sighandler);
>  
> -	igt_require((output = set_fb_on_crtc(dpy, pipe, &fb[0])));
> +	output = set_fb_on_crtc(dpy, pipe, &fb[0]);
>  	igt_display_commit2(dpy, COMMIT_LEGACY);
>  
>  	igt_create_pattern_fb(dpy->drm_fd,
> @@ -246,7 +238,7 @@ static void test_hang(igt_display_t *dpy, unsigned ring,
>  	igt_output_t *output;
>  	igt_plane_t *primary;
>  
> -	igt_require((output = set_fb_on_crtc(dpy, pipe, &fb[0])));
> +	output = set_fb_on_crtc(dpy, pipe, &fb[0]);
>  	igt_display_commit2(dpy, COMMIT_ATOMIC);
>  	primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
>  
> @@ -290,7 +282,7 @@ static void test_pageflip_modeset_hang(igt_display_t *dpy,
>  	igt_plane_t *primary;
>  	igt_spin_t *t;
>  
> -	igt_require((output = set_fb_on_crtc(dpy, pipe, &fb)));
> +	output = set_fb_on_crtc(dpy, pipe, &fb);
>  	primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
>  
>  	igt_display_commit2(dpy, dpy->is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY);
> @@ -337,7 +329,7 @@ igt_main
>  		errno = 0;
>  
>  		igt_fixture {
> -			igt_skip_on(n >= display.n_pipes);
> +			igt_display_require_output_on_pipe(&display, n);
>  		}
>  
>  		igt_subtest_f("basic-flip-%s",
> -- 
> 2.16.2
> 
> _______________________________________________
> igt-dev mailing list
> igt-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/igt-dev

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

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

* Re: [igt-dev] [PATCH i-g-t 5/5] tests/kms_chv_cursor_fail: Handle cleanup better.
  2018-03-14 11:20 ` [igt-dev] [PATCH i-g-t 5/5] tests/kms_chv_cursor_fail: Handle cleanup better Maarten Lankhorst
@ 2018-03-14 14:48   ` Ville Syrjälä
  2018-03-19 15:07     ` Maarten Lankhorst
  0 siblings, 1 reply; 20+ messages in thread
From: Ville Syrjälä @ 2018-03-14 14:48 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: igt-dev

On Wed, Mar 14, 2018 at 12:20:21PM +0100, Maarten Lankhorst wrote:
> Clean up cursor fb in cleanup_crtc, which means that cursor fb
> has to be created after prepare_crtc() is called.
> 
> This will fix a small leak when a subtest fails.
> 
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> ---
>  tests/kms_chv_cursor_fail.c | 7 ++-----
>  1 file changed, 2 insertions(+), 5 deletions(-)
> 
> diff --git a/tests/kms_chv_cursor_fail.c b/tests/kms_chv_cursor_fail.c
> index 0dd366c3b4b1..7138e549aeb7 100644
> --- a/tests/kms_chv_cursor_fail.c
> +++ b/tests/kms_chv_cursor_fail.c
> @@ -224,6 +224,7 @@ static void cleanup_crtc(data_t *data)
>  	data->pipe_crc = NULL;
>  
>  	igt_remove_fb(data->drm_fd, &data->primary_fb);
> +	igt_remove_fb(data->drm_fd, &data->fb);
>  }
>  
>  static void prepare_crtc(data_t *data)
> @@ -262,15 +263,11 @@ static void prepare_crtc(data_t *data)
>  
>  static void test_crtc(data_t *data, unsigned int edges)
>  {
> -	cleanup_crtc(data);
> +	prepare_crtc(data);
>  
>  	create_cursor_fb(data, data->curw, data->curh);

4 and 5 lgtm as well

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

>  
> -	prepare_crtc(data);
> -
>  	test_edges(data, edges);
> -
> -	igt_remove_fb(data->drm_fd, &data->fb);
>  }
>  
>  static int opt_handler(int opt, int opt_index, void *_data)
> -- 
> 2.16.2
> 
> _______________________________________________
> igt-dev mailing list
> igt-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/igt-dev

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

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

* [igt-dev] ✗ Fi.CI.IGT: failure for lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe.
  2018-03-14 11:20 [igt-dev] [PATCH i-g-t 0/5] lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe Maarten Lankhorst
                   ` (5 preceding siblings ...)
  2018-03-14 13:37 ` [igt-dev] ✓ Fi.CI.BAT: success for lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe Patchwork
@ 2018-03-14 17:22 ` Patchwork
  2018-03-15 18:31 ` [igt-dev] ✗ Fi.CI.BAT: warning for lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe. (rev2) Patchwork
                   ` (4 subsequent siblings)
  11 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2018-03-14 17:22 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: igt-dev

== Series Details ==

Series: lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe.
URL   : https://patchwork.freedesktop.org/series/39953/
State : failure

== Summary ==

---- Possible new issues:

Test kms_rmfb:
        Subgroup close-fd:
                pass       -> CRASH      (shard-apl)
                pass       -> CRASH      (shard-hsw)
                pass       -> CRASH      (shard-snb)
        Subgroup rmfb-ioctl:
                pass       -> CRASH      (shard-apl)
                pass       -> CRASH      (shard-hsw)
                pass       -> CRASH      (shard-snb)

---- Known issues:

Test kms_flip:
        Subgroup dpms-vs-vblank-race:
                pass       -> FAIL       (shard-hsw) fdo#103060
        Subgroup flip-vs-panning-vs-hang-interruptible:
                dmesg-warn -> PASS       (shard-snb) fdo#103821
        Subgroup plain-flip-fb-recreate:
                pass       -> FAIL       (shard-hsw) fdo#100368
Test kms_plane:
        Subgroup plane-position-hole-dpms-pipe-b-planes:
                fail       -> PASS       (shard-apl) fdo#103166 +1
Test kms_rotation_crc:
        Subgroup sprite-rotation-180:
                pass       -> FAIL       (shard-snb) fdo#105185 +1

fdo#103060 https://bugs.freedesktop.org/show_bug.cgi?id=103060
fdo#103821 https://bugs.freedesktop.org/show_bug.cgi?id=103821
fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368
fdo#103166 https://bugs.freedesktop.org/show_bug.cgi?id=103166
fdo#105185 https://bugs.freedesktop.org/show_bug.cgi?id=105185

shard-apl        total:3446 pass:1796 dwarn:1   dfail:0   fail:8   skip:1637 time:12420s
shard-hsw        total:3480 pass:1765 dwarn:1   dfail:0   fail:4   skip:1707 time:11728s
shard-snb        total:3480 pass:1356 dwarn:1   dfail:0   fail:4   skip:2117 time:7201s
Blacklisted hosts:
shard-kbl        total:3395 pass:1882 dwarn:1   dfail:0   fail:9   skip:1500 time:9138s

== Logs ==

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

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

* [igt-dev] [PATCH i-g-t] lib/igt_kms: Add functions to get only a single output for a pipe, v2.
  2018-03-14 14:43   ` Ville Syrjälä
@ 2018-03-15 16:58     ` Maarten Lankhorst
  0 siblings, 0 replies; 20+ messages in thread
From: Maarten Lankhorst @ 2018-03-15 16:58 UTC (permalink / raw)
  To: igt-dev

igt_get_single_output_for_pipe() will give a valid output for a pipe,
for_each_pipe_with_single_output will iterate over all pipes, and
will be called for each pipe with an output once.

Changes since v1:
- pipe = __outputs - __output returned a negative number for pipe,
  correctly set it to __output - __outputs.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
The macro was almost correct! Good thing I had kms_rmfb expose the flaw. :)

 lib/igt_kms.c | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 lib/igt_kms.h | 26 +++++++++++++++++
 2 files changed, 119 insertions(+)

diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 6bac4d1fae50..1313ef12ebc5 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -2195,6 +2195,99 @@ igt_plane_t *igt_pipe_get_plane_type(igt_pipe_t *pipe, int plane_type)
 	return &pipe->planes[plane_idx];
 }
 
+static bool output_is_internal_panel(igt_output_t *output)
+{
+	switch (output->config.connector->connector_type) {
+	case DRM_MODE_CONNECTOR_LVDS:
+	case DRM_MODE_CONNECTOR_eDP:
+	case DRM_MODE_CONNECTOR_DSI:
+	case DRM_MODE_CONNECTOR_DPI:
+		return true;
+	default:
+		return false;
+	}
+}
+
+igt_output_t **__igt_pipe_populate_outputs(igt_display_t *display, igt_output_t **chosen_outputs)
+{
+	unsigned full_pipe_mask = (1 << (display->n_pipes)) - 1, assigned_pipes = 0;
+	igt_output_t *output;
+	int i, j;
+
+	memset(chosen_outputs, 0, sizeof(*chosen_outputs) * display->n_pipes);
+
+	/*
+	 * Try to assign all outputs to the first available CRTC for
+	 * it, start with the outputs restricted to 1 pipe, then increase
+	 * number of pipes until we assign connectors to all pipes.
+	 */
+	for (i = 0; i <= display->n_pipes; i++) {
+		for_each_connected_output(display, output) {
+			uint32_t pipe_mask = output->config.valid_crtc_idx_mask & full_pipe_mask;
+			bool found = false;
+
+			if (output_is_internal_panel(output)) {
+				/*
+				 * Internal panel should be assigned to pipe A
+				 * if possible, so make sure they're enumerated
+				 * first.
+				 */
+
+				if (i)
+					continue;
+			} else if (__builtin_popcount(pipe_mask) != i)
+				continue;
+
+			for (j = 0; j < display->n_pipes; j++) {
+				bool pipe_assigned = assigned_pipes & (1 << j);
+
+				if (pipe_assigned || !(pipe_mask & (1 << j)))
+					continue;
+
+				if (!found) {
+					/* We found an unassigned pipe, use it! */
+					found = true;
+					assigned_pipes |= 1 << j;
+					chosen_outputs[j] = output;
+				} else if (!chosen_outputs[j] ||
+					   /*
+					    * Overwrite internal panel if not assigned,
+					    * external outputs are faster to do modesets
+					    */
+					   output_is_internal_panel(chosen_outputs[j]))
+					chosen_outputs[j] = output;
+			}
+
+			if (!found)
+				igt_warn("Output %s could not be assigned to a pipe\n",
+					 igt_output_name(output));
+		}
+	}
+
+	return chosen_outputs;
+}
+
+/**
+ * igt_get_single_output_for_pipe:
+ * @display: a pointer to an #igt_display_t structure
+ * @pipe: The pipe for which an #igt_output_t must be returned.
+ *
+ * Get a compatible output for a pipe.
+ *
+ * Returns: A compatible output for a given pipe, or NULL.
+ */
+igt_output_t *igt_get_single_output_for_pipe(igt_display_t *display, enum pipe pipe)
+{
+	igt_output_t *chosen_outputs[display->n_pipes];
+
+	igt_assert(pipe != PIPE_NONE);
+	igt_require(pipe < display->n_pipes);
+
+	__igt_pipe_populate_outputs(display, chosen_outputs);
+
+	return chosen_outputs[pipe];
+}
+
 static igt_output_t *igt_pipe_get_output(igt_pipe_t *pipe)
 {
 	igt_display_t *display = pipe->display;
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 672930e9849f..24cb0b7e778b 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -380,7 +380,9 @@ igt_plane_t *igt_output_get_plane(igt_output_t *output, int plane_idx);
 igt_plane_t *igt_output_get_plane_type(igt_output_t *output, int plane_type);
 igt_output_t *igt_output_from_connector(igt_display_t *display,
     drmModeConnector *connector);
+
 igt_plane_t *igt_pipe_get_plane_type(igt_pipe_t *pipe, int plane_type);
+igt_output_t *igt_get_single_output_for_pipe(igt_display_t *display, enum pipe pipe);
 
 void igt_pipe_request_out_fence(igt_pipe_t *pipe);
 
@@ -468,6 +470,10 @@ static inline bool igt_output_is_connected(igt_output_t *output)
  *
  * This for loop is called over all connected outputs. This function
  * will try every combination of @pipe and @output.
+ *
+ * If you only need to test a single output for each pipe, use
+ * for_each_pipe_with_single_output(), if you only need an
+ * output for a single pipe, use igt_get_single_output_for_pipe().
  */
 #define for_each_pipe_with_valid_output(display, pipe, output) \
 	for (int con__ = (pipe) = 0; \
@@ -476,6 +482,26 @@ static inline bool igt_output_is_connected(igt_output_t *output)
 		for_each_if ((((output) = &(display)->outputs[con__]), \
 			     igt_pipe_connector_valid((pipe), (output))))
 
+igt_output_t **__igt_pipe_populate_outputs(igt_display_t *display,
+					   igt_output_t **chosen_outputs);
+
+/**
+ * for_each_pipe_with_single_output:
+ * @display: a pointer to an #igt_display_t structure
+ * @pipe: The pipe for which this @pipe / @output combination is valid.
+ * @output: The output for which this @pipe / @output combination is valid.
+ *
+ * This loop is called over all pipes, and will try to find a compatible output
+ * for each pipe. Unlike for_each_pipe_with_valid_output(), this function will
+ * be called at most once for each pipe.
+ */
+#define for_each_pipe_with_single_output(display, pipe, output) \
+	for (igt_output_t *__outputs[(display)->n_pipes], \
+	     **__output = __igt_pipe_populate_outputs((display), __outputs); \
+	     __output < &__outputs[(display)->n_pipes]; __output++) \
+		for_each_if (*__output && \
+			     ((pipe) = (__output - __outputs), (output) = *__output, 1))
+
 /**
  * for_each_valid_output_on_pipe:
  * @display: a pointer to an #igt_display_t structure
-- 
2.16.2

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

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

* [igt-dev] ✗ Fi.CI.BAT: warning for lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe. (rev2)
  2018-03-14 11:20 [igt-dev] [PATCH i-g-t 0/5] lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe Maarten Lankhorst
                   ` (6 preceding siblings ...)
  2018-03-14 17:22 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
@ 2018-03-15 18:31 ` Patchwork
  2018-03-15 19:29 ` Patchwork
                   ` (3 subsequent siblings)
  11 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2018-03-15 18:31 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: igt-dev

== Series Details ==

Series: lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe. (rev2)
URL   : https://patchwork.freedesktop.org/series/39953/
State : warning

== Summary ==

IGT patchset tested on top of latest successful build
17ae4da9059464b9386dd56b07f29322c914ff7b tests/kms_plane_scaling: Change minimum fb height for YUV 420 planar

with latest DRM-Tip kernel build CI_DRM_3934
3b4800f0237f drm-tip: 2018y-03m-15d-15h-48m-56s UTC integration manifest

Testlist changes:
+igt@kms_chv_cursor_fail@pipe-d-64x64-bottom-edge
+igt@kms_chv_cursor_fail@pipe-d-64x64-left-edge
+igt@kms_chv_cursor_fail@pipe-d-64x64-right-edge
+igt@kms_chv_cursor_fail@pipe-d-64x64-top-edge
+igt@kms_chv_cursor_fail@pipe-d-128x128-bottom-edge
+igt@kms_chv_cursor_fail@pipe-d-128x128-left-edge
+igt@kms_chv_cursor_fail@pipe-d-128x128-right-edge
+igt@kms_chv_cursor_fail@pipe-d-128x128-top-edge
+igt@kms_chv_cursor_fail@pipe-d-256x256-bottom-edge
+igt@kms_chv_cursor_fail@pipe-d-256x256-left-edge
+igt@kms_chv_cursor_fail@pipe-d-256x256-right-edge
+igt@kms_chv_cursor_fail@pipe-d-256x256-top-edge
+igt@kms_chv_cursor_fail@pipe-e-64x64-bottom-edge
+igt@kms_chv_cursor_fail@pipe-e-64x64-left-edge
+igt@kms_chv_cursor_fail@pipe-e-64x64-right-edge
+igt@kms_chv_cursor_fail@pipe-e-64x64-top-edge
+igt@kms_chv_cursor_fail@pipe-e-128x128-bottom-edge
+igt@kms_chv_cursor_fail@pipe-e-128x128-left-edge
+igt@kms_chv_cursor_fail@pipe-e-128x128-right-edge
+igt@kms_chv_cursor_fail@pipe-e-128x128-top-edge
+igt@kms_chv_cursor_fail@pipe-e-256x256-bottom-edge
+igt@kms_chv_cursor_fail@pipe-e-256x256-left-edge
+igt@kms_chv_cursor_fail@pipe-e-256x256-right-edge
+igt@kms_chv_cursor_fail@pipe-e-256x256-top-edge
+igt@kms_chv_cursor_fail@pipe-f-64x64-bottom-edge
+igt@kms_chv_cursor_fail@pipe-f-64x64-left-edge
+igt@kms_chv_cursor_fail@pipe-f-64x64-right-edge
+igt@kms_chv_cursor_fail@pipe-f-64x64-top-edge
+igt@kms_chv_cursor_fail@pipe-f-128x128-bottom-edge
+igt@kms_chv_cursor_fail@pipe-f-128x128-left-edge
+igt@kms_chv_cursor_fail@pipe-f-128x128-right-edge
+igt@kms_chv_cursor_fail@pipe-f-128x128-top-edge
+igt@kms_chv_cursor_fail@pipe-f-256x256-bottom-edge
+igt@kms_chv_cursor_fail@pipe-f-256x256-left-edge
+igt@kms_chv_cursor_fail@pipe-f-256x256-right-edge
+igt@kms_chv_cursor_fail@pipe-f-256x256-top-edge

---- Possible new issues:

Test kms_busy:
        Subgroup basic-flip-c:
                pass       -> SKIP       (fi-bsw-n3050)

---- Known issues:

Test gem_mmap_gtt:
        Subgroup basic-small-bo-tiledx:
                pass       -> FAIL       (fi-gdg-551) fdo#102575
Test kms_flip:
        Subgroup basic-flip-vs-wf_vblank:
                pass       -> FAIL       (fi-cfl-s2) fdo#100368
Test kms_pipe_crc_basic:
        Subgroup suspend-read-crc-pipe-c:
                pass       -> INCOMPLETE (fi-bxt-dsi) fdo#103927

fdo#102575 https://bugs.freedesktop.org/show_bug.cgi?id=102575
fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368
fdo#103927 https://bugs.freedesktop.org/show_bug.cgi?id=103927

fi-bdw-5557u     total:285  pass:264  dwarn:0   dfail:0   fail:0   skip:21  time:434s
fi-bdw-gvtdvm    total:285  pass:261  dwarn:0   dfail:0   fail:0   skip:24  time:440s
fi-blb-e6850     total:285  pass:220  dwarn:1   dfail:0   fail:0   skip:64  time:381s
fi-bsw-n3050     total:285  pass:238  dwarn:0   dfail:0   fail:0   skip:47  time:538s
fi-bwr-2160      total:285  pass:180  dwarn:0   dfail:0   fail:0   skip:105 time:296s
fi-bxt-dsi       total:243  pass:216  dwarn:0   dfail:0   fail:0   skip:26 
fi-bxt-j4205     total:285  pass:256  dwarn:0   dfail:0   fail:0   skip:29  time:515s
fi-byt-j1900     total:285  pass:250  dwarn:0   dfail:0   fail:0   skip:35  time:519s
fi-byt-n2820     total:285  pass:246  dwarn:0   dfail:0   fail:0   skip:39  time:506s
fi-cfl-8700k     total:285  pass:257  dwarn:0   dfail:0   fail:0   skip:28  time:406s
fi-cfl-s2        total:285  pass:258  dwarn:0   dfail:0   fail:1   skip:26  time:581s
fi-cfl-u         total:285  pass:259  dwarn:0   dfail:0   fail:0   skip:26  time:513s
fi-cnl-drrs      total:285  pass:254  dwarn:3   dfail:0   fail:0   skip:28  time:535s
fi-cnl-y3        total:285  pass:259  dwarn:0   dfail:0   fail:0   skip:26  time:582s
fi-elk-e7500     total:285  pass:226  dwarn:0   dfail:0   fail:0   skip:59  time:431s
fi-gdg-551       total:285  pass:176  dwarn:0   dfail:0   fail:1   skip:108 time:319s
fi-glk-1         total:285  pass:257  dwarn:0   dfail:0   fail:0   skip:28  time:535s
fi-hsw-4770      total:285  pass:258  dwarn:0   dfail:0   fail:0   skip:27  time:401s
fi-ilk-650       total:285  pass:225  dwarn:0   dfail:0   fail:0   skip:60  time:420s
fi-ivb-3520m     total:285  pass:256  dwarn:0   dfail:0   fail:0   skip:29  time:464s
fi-ivb-3770      total:285  pass:252  dwarn:0   dfail:0   fail:0   skip:33  time:428s
fi-kbl-7500u     total:285  pass:260  dwarn:1   dfail:0   fail:0   skip:24  time:482s
fi-kbl-7567u     total:285  pass:265  dwarn:0   dfail:0   fail:0   skip:20  time:466s
fi-kbl-r         total:285  pass:258  dwarn:0   dfail:0   fail:0   skip:27  time:513s
fi-pnv-d510      total:285  pass:219  dwarn:1   dfail:0   fail:0   skip:65  time:657s
fi-skl-6260u     total:285  pass:265  dwarn:0   dfail:0   fail:0   skip:20  time:444s
fi-skl-6600u     total:285  pass:258  dwarn:0   dfail:0   fail:0   skip:27  time:529s
fi-skl-6700hq    total:285  pass:259  dwarn:0   dfail:0   fail:0   skip:26  time:540s
fi-skl-6700k2    total:285  pass:261  dwarn:0   dfail:0   fail:0   skip:24  time:509s
fi-skl-6770hq    total:285  pass:265  dwarn:0   dfail:0   fail:0   skip:20  time:494s
fi-skl-guc       total:285  pass:257  dwarn:0   dfail:0   fail:0   skip:28  time:429s
fi-skl-gvtdvm    total:285  pass:262  dwarn:0   dfail:0   fail:0   skip:23  time:446s
fi-snb-2520m     total:3    pass:2    dwarn:0   dfail:0   fail:0   skip:0  
fi-snb-2600      total:285  pass:245  dwarn:0   dfail:0   fail:0   skip:40  time:407s

== Logs ==

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

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

* [igt-dev] ✗ Fi.CI.BAT: warning for lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe. (rev2)
  2018-03-14 11:20 [igt-dev] [PATCH i-g-t 0/5] lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe Maarten Lankhorst
                   ` (7 preceding siblings ...)
  2018-03-15 18:31 ` [igt-dev] ✗ Fi.CI.BAT: warning for lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe. (rev2) Patchwork
@ 2018-03-15 19:29 ` Patchwork
  2018-03-16  7:29 ` Patchwork
                   ` (2 subsequent siblings)
  11 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2018-03-15 19:29 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: igt-dev

== Series Details ==

Series: lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe. (rev2)
URL   : https://patchwork.freedesktop.org/series/39953/
State : warning

== Summary ==

IGT patchset tested on top of latest successful build
2e92134b4e4f754239f9721b8781ce2fc0aab07c tests/kms_frontbuffer_tracking: Reduce fbc status spam, v2.

with latest DRM-Tip kernel build CI_DRM_3934
3b4800f0237f drm-tip: 2018y-03m-15d-15h-48m-56s UTC integration manifest

Testlist changes:
+igt@kms_chv_cursor_fail@pipe-d-64x64-bottom-edge
+igt@kms_chv_cursor_fail@pipe-d-64x64-left-edge
+igt@kms_chv_cursor_fail@pipe-d-64x64-right-edge
+igt@kms_chv_cursor_fail@pipe-d-64x64-top-edge
+igt@kms_chv_cursor_fail@pipe-d-128x128-bottom-edge
+igt@kms_chv_cursor_fail@pipe-d-128x128-left-edge
+igt@kms_chv_cursor_fail@pipe-d-128x128-right-edge
+igt@kms_chv_cursor_fail@pipe-d-128x128-top-edge
+igt@kms_chv_cursor_fail@pipe-d-256x256-bottom-edge
+igt@kms_chv_cursor_fail@pipe-d-256x256-left-edge
+igt@kms_chv_cursor_fail@pipe-d-256x256-right-edge
+igt@kms_chv_cursor_fail@pipe-d-256x256-top-edge
+igt@kms_chv_cursor_fail@pipe-e-64x64-bottom-edge
+igt@kms_chv_cursor_fail@pipe-e-64x64-left-edge
+igt@kms_chv_cursor_fail@pipe-e-64x64-right-edge
+igt@kms_chv_cursor_fail@pipe-e-64x64-top-edge
+igt@kms_chv_cursor_fail@pipe-e-128x128-bottom-edge
+igt@kms_chv_cursor_fail@pipe-e-128x128-left-edge
+igt@kms_chv_cursor_fail@pipe-e-128x128-right-edge
+igt@kms_chv_cursor_fail@pipe-e-128x128-top-edge
+igt@kms_chv_cursor_fail@pipe-e-256x256-bottom-edge
+igt@kms_chv_cursor_fail@pipe-e-256x256-left-edge
+igt@kms_chv_cursor_fail@pipe-e-256x256-right-edge
+igt@kms_chv_cursor_fail@pipe-e-256x256-top-edge
+igt@kms_chv_cursor_fail@pipe-f-64x64-bottom-edge
+igt@kms_chv_cursor_fail@pipe-f-64x64-left-edge
+igt@kms_chv_cursor_fail@pipe-f-64x64-right-edge
+igt@kms_chv_cursor_fail@pipe-f-64x64-top-edge
+igt@kms_chv_cursor_fail@pipe-f-128x128-bottom-edge
+igt@kms_chv_cursor_fail@pipe-f-128x128-left-edge
+igt@kms_chv_cursor_fail@pipe-f-128x128-right-edge
+igt@kms_chv_cursor_fail@pipe-f-128x128-top-edge
+igt@kms_chv_cursor_fail@pipe-f-256x256-bottom-edge
+igt@kms_chv_cursor_fail@pipe-f-256x256-left-edge
+igt@kms_chv_cursor_fail@pipe-f-256x256-right-edge
+igt@kms_chv_cursor_fail@pipe-f-256x256-top-edge

---- Possible new issues:

Test kms_busy:
        Subgroup basic-flip-c:
                pass       -> SKIP       (fi-bsw-n3050)

---- Known issues:

Test debugfs_test:
        Subgroup read_all_entries:
                incomplete -> PASS       (fi-snb-2520m) fdo#103713
Test gem_mmap_gtt:
        Subgroup basic-small-bo-tiledx:
                pass       -> FAIL       (fi-gdg-551) fdo#102575
Test kms_pipe_crc_basic:
        Subgroup suspend-read-crc-pipe-b:
                pass       -> DMESG-WARN (fi-cnl-y3) fdo#104951

fdo#103713 https://bugs.freedesktop.org/show_bug.cgi?id=103713
fdo#102575 https://bugs.freedesktop.org/show_bug.cgi?id=102575
fdo#104951 https://bugs.freedesktop.org/show_bug.cgi?id=104951

fi-bdw-5557u     total:285  pass:264  dwarn:0   dfail:0   fail:0   skip:21  time:433s
fi-bdw-gvtdvm    total:285  pass:261  dwarn:0   dfail:0   fail:0   skip:24  time:445s
fi-blb-e6850     total:285  pass:220  dwarn:1   dfail:0   fail:0   skip:64  time:383s
fi-bsw-n3050     total:285  pass:238  dwarn:0   dfail:0   fail:0   skip:47  time:540s
fi-bwr-2160      total:285  pass:180  dwarn:0   dfail:0   fail:0   skip:105 time:299s
fi-bxt-dsi       total:285  pass:255  dwarn:0   dfail:0   fail:0   skip:30  time:516s
fi-bxt-j4205     total:285  pass:256  dwarn:0   dfail:0   fail:0   skip:29  time:512s
fi-byt-j1900     total:285  pass:250  dwarn:0   dfail:0   fail:0   skip:35  time:520s
fi-byt-n2820     total:285  pass:246  dwarn:0   dfail:0   fail:0   skip:39  time:505s
fi-cfl-8700k     total:285  pass:257  dwarn:0   dfail:0   fail:0   skip:28  time:411s
fi-cfl-s2        total:285  pass:259  dwarn:0   dfail:0   fail:0   skip:26  time:573s
fi-cfl-u         total:285  pass:259  dwarn:0   dfail:0   fail:0   skip:26  time:514s
fi-cnl-drrs      total:285  pass:254  dwarn:3   dfail:0   fail:0   skip:28  time:520s
fi-cnl-y3        total:285  pass:258  dwarn:1   dfail:0   fail:0   skip:26  time:588s
fi-elk-e7500     total:285  pass:226  dwarn:0   dfail:0   fail:0   skip:59  time:420s
fi-gdg-551       total:285  pass:176  dwarn:0   dfail:0   fail:1   skip:108 time:320s
fi-glk-1         total:285  pass:257  dwarn:0   dfail:0   fail:0   skip:28  time:538s
fi-hsw-4770      total:285  pass:258  dwarn:0   dfail:0   fail:0   skip:27  time:404s
fi-ilk-650       total:285  pass:225  dwarn:0   dfail:0   fail:0   skip:60  time:426s
fi-ivb-3520m     total:285  pass:256  dwarn:0   dfail:0   fail:0   skip:29  time:473s
fi-ivb-3770      total:285  pass:252  dwarn:0   dfail:0   fail:0   skip:33  time:433s
fi-kbl-7500u     total:285  pass:260  dwarn:1   dfail:0   fail:0   skip:24  time:475s
fi-kbl-7567u     total:285  pass:265  dwarn:0   dfail:0   fail:0   skip:20  time:471s
fi-kbl-r         total:285  pass:258  dwarn:0   dfail:0   fail:0   skip:27  time:512s
fi-pnv-d510      total:285  pass:219  dwarn:1   dfail:0   fail:0   skip:65  time:654s
fi-skl-6260u     total:285  pass:265  dwarn:0   dfail:0   fail:0   skip:20  time:444s
fi-skl-6600u     total:285  pass:258  dwarn:0   dfail:0   fail:0   skip:27  time:529s
fi-skl-6700hq    total:285  pass:259  dwarn:0   dfail:0   fail:0   skip:26  time:541s
fi-skl-6700k2    total:285  pass:261  dwarn:0   dfail:0   fail:0   skip:24  time:506s
fi-skl-6770hq    total:285  pass:265  dwarn:0   dfail:0   fail:0   skip:20  time:502s
fi-skl-guc       total:285  pass:257  dwarn:0   dfail:0   fail:0   skip:28  time:427s
fi-skl-gvtdvm    total:285  pass:262  dwarn:0   dfail:0   fail:0   skip:23  time:446s
fi-snb-2520m     total:285  pass:245  dwarn:0   dfail:0   fail:0   skip:40  time:563s
fi-snb-2600      total:285  pass:245  dwarn:0   dfail:0   fail:0   skip:40  time:403s

== Logs ==

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

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

* [igt-dev] ✗ Fi.CI.BAT: warning for lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe. (rev2)
  2018-03-14 11:20 [igt-dev] [PATCH i-g-t 0/5] lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe Maarten Lankhorst
                   ` (8 preceding siblings ...)
  2018-03-15 19:29 ` Patchwork
@ 2018-03-16  7:29 ` Patchwork
  2018-03-16  9:03 ` [igt-dev] ✓ Fi.CI.BAT: success for lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe. (rev3) Patchwork
  2018-03-16 10:41 ` [igt-dev] ✗ Fi.CI.IGT: warning " Patchwork
  11 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2018-03-16  7:29 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: igt-dev

== Series Details ==

Series: lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe. (rev2)
URL   : https://patchwork.freedesktop.org/series/39953/
State : warning

== Summary ==

IGT patchset tested on top of latest successful build
2e92134b4e4f754239f9721b8781ce2fc0aab07c tests/kms_frontbuffer_tracking: Reduce fbc status spam, v2.

with latest DRM-Tip kernel build CI_DRM_3935
9ac56f76a6a2 drm-tip: 2018y-03m-15d-22h-52m-42s UTC integration manifest

Testlist changes:
+igt@kms_chv_cursor_fail@pipe-d-64x64-bottom-edge
+igt@kms_chv_cursor_fail@pipe-d-64x64-left-edge
+igt@kms_chv_cursor_fail@pipe-d-64x64-right-edge
+igt@kms_chv_cursor_fail@pipe-d-64x64-top-edge
+igt@kms_chv_cursor_fail@pipe-d-128x128-bottom-edge
+igt@kms_chv_cursor_fail@pipe-d-128x128-left-edge
+igt@kms_chv_cursor_fail@pipe-d-128x128-right-edge
+igt@kms_chv_cursor_fail@pipe-d-128x128-top-edge
+igt@kms_chv_cursor_fail@pipe-d-256x256-bottom-edge
+igt@kms_chv_cursor_fail@pipe-d-256x256-left-edge
+igt@kms_chv_cursor_fail@pipe-d-256x256-right-edge
+igt@kms_chv_cursor_fail@pipe-d-256x256-top-edge
+igt@kms_chv_cursor_fail@pipe-e-64x64-bottom-edge
+igt@kms_chv_cursor_fail@pipe-e-64x64-left-edge
+igt@kms_chv_cursor_fail@pipe-e-64x64-right-edge
+igt@kms_chv_cursor_fail@pipe-e-64x64-top-edge
+igt@kms_chv_cursor_fail@pipe-e-128x128-bottom-edge
+igt@kms_chv_cursor_fail@pipe-e-128x128-left-edge
+igt@kms_chv_cursor_fail@pipe-e-128x128-right-edge
+igt@kms_chv_cursor_fail@pipe-e-128x128-top-edge
+igt@kms_chv_cursor_fail@pipe-e-256x256-bottom-edge
+igt@kms_chv_cursor_fail@pipe-e-256x256-left-edge
+igt@kms_chv_cursor_fail@pipe-e-256x256-right-edge
+igt@kms_chv_cursor_fail@pipe-e-256x256-top-edge
+igt@kms_chv_cursor_fail@pipe-f-64x64-bottom-edge
+igt@kms_chv_cursor_fail@pipe-f-64x64-left-edge
+igt@kms_chv_cursor_fail@pipe-f-64x64-right-edge
+igt@kms_chv_cursor_fail@pipe-f-64x64-top-edge
+igt@kms_chv_cursor_fail@pipe-f-128x128-bottom-edge
+igt@kms_chv_cursor_fail@pipe-f-128x128-left-edge
+igt@kms_chv_cursor_fail@pipe-f-128x128-right-edge
+igt@kms_chv_cursor_fail@pipe-f-128x128-top-edge
+igt@kms_chv_cursor_fail@pipe-f-256x256-bottom-edge
+igt@kms_chv_cursor_fail@pipe-f-256x256-left-edge
+igt@kms_chv_cursor_fail@pipe-f-256x256-right-edge
+igt@kms_chv_cursor_fail@pipe-f-256x256-top-edge

---- Possible new issues:

Test kms_busy:
        Subgroup basic-flip-c:
                pass       -> SKIP       (fi-bsw-n3050)

---- Known issues:

Test gem_mmap_gtt:
        Subgroup basic-small-bo-tiledx:
                pass       -> FAIL       (fi-gdg-551) fdo#102575
Test prime_vgem:
        Subgroup basic-fence-flip:
                pass       -> FAIL       (fi-ilk-650) fdo#104008

fdo#102575 https://bugs.freedesktop.org/show_bug.cgi?id=102575
fdo#104008 https://bugs.freedesktop.org/show_bug.cgi?id=104008

fi-bdw-5557u     total:285  pass:264  dwarn:0   dfail:0   fail:0   skip:21  time:432s
fi-bdw-gvtdvm    total:285  pass:261  dwarn:0   dfail:0   fail:0   skip:24  time:442s
fi-blb-e6850     total:285  pass:220  dwarn:1   dfail:0   fail:0   skip:64  time:381s
fi-bsw-n3050     total:285  pass:238  dwarn:0   dfail:0   fail:0   skip:47  time:536s
fi-bwr-2160      total:285  pass:180  dwarn:0   dfail:0   fail:0   skip:105 time:298s
fi-bxt-j4205     total:285  pass:256  dwarn:0   dfail:0   fail:0   skip:29  time:512s
fi-byt-j1900     total:285  pass:250  dwarn:0   dfail:0   fail:0   skip:35  time:515s
fi-byt-n2820     total:285  pass:246  dwarn:0   dfail:0   fail:0   skip:39  time:503s
fi-cfl-8700k     total:285  pass:257  dwarn:0   dfail:0   fail:0   skip:28  time:410s
fi-cfl-s2        total:285  pass:259  dwarn:0   dfail:0   fail:0   skip:26  time:579s
fi-cfl-u         total:285  pass:259  dwarn:0   dfail:0   fail:0   skip:26  time:513s
fi-cnl-drrs      total:285  pass:254  dwarn:3   dfail:0   fail:0   skip:28  time:525s
fi-elk-e7500     total:285  pass:226  dwarn:0   dfail:0   fail:0   skip:59  time:429s
fi-gdg-551       total:285  pass:176  dwarn:0   dfail:0   fail:1   skip:108 time:319s
fi-hsw-4770      total:285  pass:258  dwarn:0   dfail:0   fail:0   skip:27  time:401s
fi-ilk-650       total:285  pass:224  dwarn:0   dfail:0   fail:1   skip:60  time:421s
fi-ivb-3520m     total:285  pass:256  dwarn:0   dfail:0   fail:0   skip:29  time:470s
fi-ivb-3770      total:285  pass:252  dwarn:0   dfail:0   fail:0   skip:33  time:429s
fi-kbl-7500u     total:285  pass:260  dwarn:1   dfail:0   fail:0   skip:24  time:475s
fi-kbl-7567u     total:285  pass:265  dwarn:0   dfail:0   fail:0   skip:20  time:470s
fi-kbl-r         total:285  pass:258  dwarn:0   dfail:0   fail:0   skip:27  time:513s
fi-pnv-d510      total:285  pass:219  dwarn:1   dfail:0   fail:0   skip:65  time:655s
fi-skl-6260u     total:285  pass:265  dwarn:0   dfail:0   fail:0   skip:20  time:445s
fi-skl-6600u     total:285  pass:258  dwarn:0   dfail:0   fail:0   skip:27  time:534s
fi-skl-6700hq    total:285  pass:259  dwarn:0   dfail:0   fail:0   skip:26  time:540s
fi-skl-6700k2    total:285  pass:261  dwarn:0   dfail:0   fail:0   skip:24  time:506s
fi-skl-6770hq    total:285  pass:265  dwarn:0   dfail:0   fail:0   skip:20  time:502s
fi-skl-guc       total:285  pass:257  dwarn:0   dfail:0   fail:0   skip:28  time:428s
fi-skl-gvtdvm    total:285  pass:262  dwarn:0   dfail:0   fail:0   skip:23  time:448s
fi-snb-2520m     total:285  pass:245  dwarn:0   dfail:0   fail:0   skip:40  time:585s
fi-snb-2600      total:285  pass:245  dwarn:0   dfail:0   fail:0   skip:40  time:399s

== Logs ==

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

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

* [igt-dev] [PATCH i-g-t] tests/kms_busy: Convert to using igt_get_single_output_for_pipe, v2.
  2018-03-14 14:46   ` Ville Syrjälä
@ 2018-03-16  8:28     ` Maarten Lankhorst
  0 siblings, 0 replies; 20+ messages in thread
From: Maarten Lankhorst @ 2018-03-16  8:28 UTC (permalink / raw)
  To: igt-dev

Put a single igt_display_require_output_on_pipe in the fixture,
so we know we always have an output on the pipe and can always
assume it's not NULL.

Changes since v1:
- Move igt_subtest_group upwards, to prevent a skip when no valid
  output can be found on pipe A, but can be found on other pipes.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> #v1
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tests/kms_busy.c | 128 +++++++++++++++++++++++++------------------------------
 1 file changed, 59 insertions(+), 69 deletions(-)

diff --git a/tests/kms_busy.c b/tests/kms_busy.c
index 0828a8b38a06..4a4e0e15608c 100644
--- a/tests/kms_busy.c
+++ b/tests/kms_busy.c
@@ -35,31 +35,23 @@ IGT_TEST_DESCRIPTION("Basic check of KMS ABI with busy framebuffers.");
 static igt_output_t *
 set_fb_on_crtc(igt_display_t *dpy, int pipe, struct igt_fb *fb)
 {
+	drmModeModeInfoPtr mode;
+	igt_plane_t *primary;
 	igt_output_t *output;
 
-	for_each_valid_output_on_pipe(dpy, pipe, output) {
-		drmModeModeInfoPtr mode;
-		igt_plane_t *primary;
-
-		if (output->pending_pipe != PIPE_NONE)
-			continue;
+	output = igt_get_single_output_for_pipe(dpy, pipe);
 
-		igt_output_set_pipe(output, pipe);
-		mode = igt_output_get_mode(output);
+	igt_output_set_pipe(output, pipe);
+	mode = igt_output_get_mode(output);
 
-		igt_create_pattern_fb(dpy->drm_fd,
-				      mode->hdisplay, mode->vdisplay,
-				      DRM_FORMAT_XRGB8888,
-				      LOCAL_I915_FORMAT_MOD_X_TILED,
-				      fb);
-
-		primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
-		igt_plane_set_fb(primary, fb);
+	igt_create_pattern_fb(dpy->drm_fd, mode->hdisplay, mode->vdisplay,
+			      DRM_FORMAT_XRGB8888,
+			      LOCAL_I915_FORMAT_MOD_X_TILED, fb);
 
-		return output;
-	}
+	primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
+	igt_plane_set_fb(primary, fb);
 
-	return NULL;
+	return output;
 }
 
 static void do_cleanup_display(igt_display_t *dpy)
@@ -168,7 +160,7 @@ static void test_flip(igt_display_t *dpy, unsigned ring, int pipe, bool modeset)
 
 	signal(SIGALRM, sighandler);
 
-	igt_require((output = set_fb_on_crtc(dpy, pipe, &fb[0])));
+	output = set_fb_on_crtc(dpy, pipe, &fb[0]);
 	igt_display_commit2(dpy, COMMIT_LEGACY);
 
 	igt_create_pattern_fb(dpy->drm_fd,
@@ -246,7 +238,7 @@ static void test_hang(igt_display_t *dpy, unsigned ring,
 	igt_output_t *output;
 	igt_plane_t *primary;
 
-	igt_require((output = set_fb_on_crtc(dpy, pipe, &fb[0])));
+	output = set_fb_on_crtc(dpy, pipe, &fb[0]);
 	igt_display_commit2(dpy, COMMIT_ATOMIC);
 	primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
 
@@ -290,7 +282,7 @@ static void test_pageflip_modeset_hang(igt_display_t *dpy,
 	igt_plane_t *primary;
 	igt_spin_t *t;
 
-	igt_require((output = set_fb_on_crtc(dpy, pipe, &fb)));
+	output = set_fb_on_crtc(dpy, pipe, &fb);
 	primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
 
 	igt_display_commit2(dpy, dpy->is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY);
@@ -333,86 +325,84 @@ igt_main
 
 	/* XXX Extend to cover atomic rendering tests to all planes + legacy */
 
-	for_each_pipe_static(n) {
+	for_each_pipe_static(n) igt_subtest_group {
+		igt_hang_t hang;
+
 		errno = 0;
 
 		igt_fixture {
-			igt_skip_on(n >= display.n_pipes);
+			igt_display_require_output_on_pipe(&display, n);
 		}
 
 		igt_subtest_f("basic-flip-%s",
-			      kmstest_pipe_name(n)) {
+			kmstest_pipe_name(n)) {
 			igt_require(gem_has_ring(display.drm_fd,
 						e->exec_id | e->flags));
 
 			test_flip(&display, e->exec_id | e->flags, n, false);
 		}
 		igt_subtest_f("basic-modeset-%s",
-			      kmstest_pipe_name(n)) {
+			kmstest_pipe_name(n)) {
 			igt_require(gem_has_ring(display.drm_fd,
 						e->exec_id | e->flags));
 
 			test_flip(&display, e->exec_id | e->flags, n, true);
 		}
 
-		igt_subtest_group {
-			igt_hang_t hang;
-
-			igt_fixture {
-				igt_require(gem_has_ring(display.drm_fd,
-							e->exec_id | e->flags));
+		igt_fixture {
+			igt_require(gem_has_ring(display.drm_fd,
+						e->exec_id | e->flags));
 
-				hang = igt_allow_hang(display.drm_fd, 0, 0);
-			}
+			hang = igt_allow_hang(display.drm_fd, 0, 0);
+		}
 
-			igt_subtest_f("extended-pageflip-modeset-hang-oldfb-%s-%s",
-				      e->name, kmstest_pipe_name(n)) {
-				igt_require(gem_has_ring(display.drm_fd,
-							e->exec_id | e->flags));
+		igt_subtest_f("extended-pageflip-modeset-hang-oldfb-%s-%s",
+				e->name, kmstest_pipe_name(n)) {
+			igt_require(gem_has_ring(display.drm_fd,
+						e->exec_id | e->flags));
 
-				test_pageflip_modeset_hang(&display, e->exec_id | e->flags, n);
-			}
+			test_pageflip_modeset_hang(&display, e->exec_id | e->flags, n);
+		}
 
-			igt_fixture
-				igt_require(display.is_atomic);
+		igt_fixture
+			igt_require(display.is_atomic);
 
-			igt_subtest_f("extended-pageflip-hang-oldfb-%s-%s",
-				      e->name, kmstest_pipe_name(n))
-				test_hang(&display, e->exec_id | e->flags, n, false, false);
+		igt_subtest_f("extended-pageflip-hang-oldfb-%s-%s",
+				e->name, kmstest_pipe_name(n))
+			test_hang(&display, e->exec_id | e->flags, n, false, false);
 
-			igt_subtest_f("extended-pageflip-hang-newfb-%s-%s",
-				      e->name, kmstest_pipe_name(n))
-				test_hang(&display, e->exec_id | e->flags, n, false, true);
+		igt_subtest_f("extended-pageflip-hang-newfb-%s-%s",
+				e->name, kmstest_pipe_name(n))
+			test_hang(&display, e->exec_id | e->flags, n, false, true);
 
-			igt_subtest_f("extended-modeset-hang-oldfb-%s-%s",
-				      e->name, kmstest_pipe_name(n))
-				test_hang(&display, e->exec_id | e->flags, n, true, false);
+		igt_subtest_f("extended-modeset-hang-oldfb-%s-%s",
+				e->name, kmstest_pipe_name(n))
+			test_hang(&display, e->exec_id | e->flags, n, true, false);
 
-			igt_subtest_f("extended-modeset-hang-newfb-%s-%s",
-				      e->name, kmstest_pipe_name(n))
-				test_hang(&display, e->exec_id | e->flags, n, true, true);
+		igt_subtest_f("extended-modeset-hang-newfb-%s-%s",
+				e->name, kmstest_pipe_name(n))
+			test_hang(&display, e->exec_id | e->flags, n, true, true);
 
-			igt_subtest_f("extended-modeset-hang-oldfb-with-reset-%s-%s",
-				      e->name, kmstest_pipe_name(n)) {
-				igt_set_module_param_int("force_reset_modeset_test", 1);
+		igt_subtest_f("extended-modeset-hang-oldfb-with-reset-%s-%s",
+				e->name, kmstest_pipe_name(n)) {
+			igt_set_module_param_int("force_reset_modeset_test", 1);
 
-				test_hang(&display, e->exec_id | e->flags, n, true, false);
+			test_hang(&display, e->exec_id | e->flags, n, true, false);
 
-				igt_set_module_param_int("force_reset_modeset_test", 0);
-			}
+			igt_set_module_param_int("force_reset_modeset_test", 0);
+		}
 
-			igt_subtest_f("extended-modeset-hang-newfb-with-reset-%s-%s",
-				      e->name, kmstest_pipe_name(n)) {
-				igt_set_module_param_int("force_reset_modeset_test", 1);
+		igt_subtest_f("extended-modeset-hang-newfb-with-reset-%s-%s",
+				e->name, kmstest_pipe_name(n)) {
+			igt_set_module_param_int("force_reset_modeset_test", 1);
 
-				test_hang(&display, e->exec_id | e->flags, n, true, true);
+			test_hang(&display, e->exec_id | e->flags, n, true, true);
 
-				igt_set_module_param_int("force_reset_modeset_test", 0);
-			}
+			igt_set_module_param_int("force_reset_modeset_test", 0);
+		}
 
-			igt_fixture {
-				igt_disallow_hang(display.drm_fd, hang);
-			}
+		igt_fixture {
+			igt_disallow_hang(display.drm_fd, hang);
 		}
 	}
 
-- 
2.16.2

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

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

* [igt-dev] ✓ Fi.CI.BAT: success for lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe. (rev3)
  2018-03-14 11:20 [igt-dev] [PATCH i-g-t 0/5] lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe Maarten Lankhorst
                   ` (9 preceding siblings ...)
  2018-03-16  7:29 ` Patchwork
@ 2018-03-16  9:03 ` Patchwork
  2018-03-16 10:41 ` [igt-dev] ✗ Fi.CI.IGT: warning " Patchwork
  11 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2018-03-16  9:03 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: igt-dev

== Series Details ==

Series: lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe. (rev3)
URL   : https://patchwork.freedesktop.org/series/39953/
State : success

== Summary ==

IGT patchset tested on top of latest successful build
2e92134b4e4f754239f9721b8781ce2fc0aab07c tests/kms_frontbuffer_tracking: Reduce fbc status spam, v2.

with latest DRM-Tip kernel build CI_DRM_3936
e867298503d2 drm-tip: 2018y-03m-16d-07h-43m-57s UTC integration manifest

Testlist changes:
+igt@kms_chv_cursor_fail@pipe-d-64x64-bottom-edge
+igt@kms_chv_cursor_fail@pipe-d-64x64-left-edge
+igt@kms_chv_cursor_fail@pipe-d-64x64-right-edge
+igt@kms_chv_cursor_fail@pipe-d-64x64-top-edge
+igt@kms_chv_cursor_fail@pipe-d-128x128-bottom-edge
+igt@kms_chv_cursor_fail@pipe-d-128x128-left-edge
+igt@kms_chv_cursor_fail@pipe-d-128x128-right-edge
+igt@kms_chv_cursor_fail@pipe-d-128x128-top-edge
+igt@kms_chv_cursor_fail@pipe-d-256x256-bottom-edge
+igt@kms_chv_cursor_fail@pipe-d-256x256-left-edge
+igt@kms_chv_cursor_fail@pipe-d-256x256-right-edge
+igt@kms_chv_cursor_fail@pipe-d-256x256-top-edge
+igt@kms_chv_cursor_fail@pipe-e-64x64-bottom-edge
+igt@kms_chv_cursor_fail@pipe-e-64x64-left-edge
+igt@kms_chv_cursor_fail@pipe-e-64x64-right-edge
+igt@kms_chv_cursor_fail@pipe-e-64x64-top-edge
+igt@kms_chv_cursor_fail@pipe-e-128x128-bottom-edge
+igt@kms_chv_cursor_fail@pipe-e-128x128-left-edge
+igt@kms_chv_cursor_fail@pipe-e-128x128-right-edge
+igt@kms_chv_cursor_fail@pipe-e-128x128-top-edge
+igt@kms_chv_cursor_fail@pipe-e-256x256-bottom-edge
+igt@kms_chv_cursor_fail@pipe-e-256x256-left-edge
+igt@kms_chv_cursor_fail@pipe-e-256x256-right-edge
+igt@kms_chv_cursor_fail@pipe-e-256x256-top-edge
+igt@kms_chv_cursor_fail@pipe-f-64x64-bottom-edge
+igt@kms_chv_cursor_fail@pipe-f-64x64-left-edge
+igt@kms_chv_cursor_fail@pipe-f-64x64-right-edge
+igt@kms_chv_cursor_fail@pipe-f-64x64-top-edge
+igt@kms_chv_cursor_fail@pipe-f-128x128-bottom-edge
+igt@kms_chv_cursor_fail@pipe-f-128x128-left-edge
+igt@kms_chv_cursor_fail@pipe-f-128x128-right-edge
+igt@kms_chv_cursor_fail@pipe-f-128x128-top-edge
+igt@kms_chv_cursor_fail@pipe-f-256x256-bottom-edge
+igt@kms_chv_cursor_fail@pipe-f-256x256-left-edge
+igt@kms_chv_cursor_fail@pipe-f-256x256-right-edge
+igt@kms_chv_cursor_fail@pipe-f-256x256-top-edge

fi-bdw-5557u     total:285  pass:264  dwarn:0   dfail:0   fail:0   skip:21  time:432s
fi-bdw-gvtdvm    total:285  pass:261  dwarn:0   dfail:0   fail:0   skip:24  time:442s
fi-blb-e6850     total:285  pass:220  dwarn:1   dfail:0   fail:0   skip:64  time:380s
fi-bsw-n3050     total:285  pass:239  dwarn:0   dfail:0   fail:0   skip:46  time:538s
fi-bwr-2160      total:285  pass:180  dwarn:0   dfail:0   fail:0   skip:105 time:298s
fi-bxt-j4205     total:285  pass:256  dwarn:0   dfail:0   fail:0   skip:29  time:511s
fi-byt-j1900     total:285  pass:250  dwarn:0   dfail:0   fail:0   skip:35  time:517s
fi-byt-n2820     total:285  pass:246  dwarn:0   dfail:0   fail:0   skip:39  time:505s
fi-cfl-8700k     total:285  pass:257  dwarn:0   dfail:0   fail:0   skip:28  time:411s
fi-cfl-s2        total:285  pass:259  dwarn:0   dfail:0   fail:0   skip:26  time:574s
fi-cfl-u         total:285  pass:259  dwarn:0   dfail:0   fail:0   skip:26  time:513s
fi-cnl-drrs      total:285  pass:254  dwarn:3   dfail:0   fail:0   skip:28  time:524s
fi-cnl-y3        total:285  pass:259  dwarn:0   dfail:0   fail:0   skip:26  time:586s
fi-elk-e7500     total:285  pass:226  dwarn:0   dfail:0   fail:0   skip:59  time:420s
fi-gdg-551       total:285  pass:176  dwarn:0   dfail:0   fail:1   skip:108 time:320s
fi-glk-1         total:285  pass:257  dwarn:0   dfail:0   fail:0   skip:28  time:539s
fi-hsw-4770      total:285  pass:258  dwarn:0   dfail:0   fail:0   skip:27  time:403s
fi-ilk-650       total:285  pass:225  dwarn:0   dfail:0   fail:0   skip:60  time:423s
fi-ivb-3520m     total:285  pass:256  dwarn:0   dfail:0   fail:0   skip:29  time:471s
fi-ivb-3770      total:285  pass:252  dwarn:0   dfail:0   fail:0   skip:33  time:429s
fi-kbl-7500u     total:285  pass:260  dwarn:1   dfail:0   fail:0   skip:24  time:474s
fi-kbl-7567u     total:285  pass:265  dwarn:0   dfail:0   fail:0   skip:20  time:471s
fi-kbl-r         total:285  pass:258  dwarn:0   dfail:0   fail:0   skip:27  time:516s
fi-pnv-d510      total:285  pass:219  dwarn:1   dfail:0   fail:0   skip:65  time:656s
fi-skl-6260u     total:285  pass:265  dwarn:0   dfail:0   fail:0   skip:20  time:444s
fi-skl-6600u     total:285  pass:258  dwarn:0   dfail:0   fail:0   skip:27  time:533s
fi-skl-6700hq    total:285  pass:259  dwarn:0   dfail:0   fail:0   skip:26  time:540s
fi-skl-6700k2    total:285  pass:261  dwarn:0   dfail:0   fail:0   skip:24  time:503s
fi-skl-6770hq    total:285  pass:265  dwarn:0   dfail:0   fail:0   skip:20  time:490s
fi-skl-guc       total:285  pass:257  dwarn:0   dfail:0   fail:0   skip:28  time:431s
fi-skl-gvtdvm    total:285  pass:262  dwarn:0   dfail:0   fail:0   skip:23  time:447s
fi-snb-2520m     total:285  pass:245  dwarn:0   dfail:0   fail:0   skip:40  time:586s
fi-snb-2600      total:285  pass:245  dwarn:0   dfail:0   fail:0   skip:40  time:399s

== Logs ==

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

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

* [igt-dev] ✗ Fi.CI.IGT: warning for lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe. (rev3)
  2018-03-14 11:20 [igt-dev] [PATCH i-g-t 0/5] lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe Maarten Lankhorst
                   ` (10 preceding siblings ...)
  2018-03-16  9:03 ` [igt-dev] ✓ Fi.CI.BAT: success for lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe. (rev3) Patchwork
@ 2018-03-16 10:41 ` Patchwork
  11 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2018-03-16 10:41 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: igt-dev

== Series Details ==

Series: lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe. (rev3)
URL   : https://patchwork.freedesktop.org/series/39953/
State : warning

== Summary ==

---- Possible new issues:

Test drv_suspend:
        Subgroup fence-restore-tiled2untiled:
                pass       -> SKIP       (shard-snb)
Test gem_tiled_blits:
        Subgroup normal:
                pass       -> SKIP       (shard-apl)
Test gem_tiled_swapping:
        Subgroup non-threaded:
                skip       -> PASS       (shard-snb)

---- Known issues:

Test gem_eio:
        Subgroup in-flight-contexts:
                pass       -> INCOMPLETE (shard-apl) fdo#105341
Test kms_flip:
        Subgroup 2x-flip-vs-expired-vblank-interruptible:
                dmesg-warn -> PASS       (shard-hsw) fdo#102887
        Subgroup modeset-vs-vblank-race:
                pass       -> FAIL       (shard-hsw) fdo#103060
Test kms_plane_multiple:
        Subgroup atomic-pipe-a-tiling-x:
                fail       -> PASS       (shard-snb) fdo#103166
Test kms_rotation_crc:
        Subgroup primary-rotation-180:
                fail       -> PASS       (shard-snb) fdo#103925 +1
Test kms_vblank:
        Subgroup pipe-b-ts-continuation-suspend:
                pass       -> SKIP       (shard-snb) fdo#105411
Test perf:
        Subgroup polling:
                pass       -> FAIL       (shard-hsw) fdo#102252

fdo#105341 https://bugs.freedesktop.org/show_bug.cgi?id=105341
fdo#102887 https://bugs.freedesktop.org/show_bug.cgi?id=102887
fdo#103060 https://bugs.freedesktop.org/show_bug.cgi?id=103060
fdo#103166 https://bugs.freedesktop.org/show_bug.cgi?id=103166
fdo#103925 https://bugs.freedesktop.org/show_bug.cgi?id=103925
fdo#105411 https://bugs.freedesktop.org/show_bug.cgi?id=105411
fdo#102252 https://bugs.freedesktop.org/show_bug.cgi?id=102252

shard-apl        total:3392 pass:1771 dwarn:1   dfail:0   fail:7   skip:1611 time:12203s
shard-hsw        total:3478 pass:1766 dwarn:1   dfail:0   fail:3   skip:1707 time:11739s
shard-snb        total:3478 pass:1356 dwarn:1   dfail:0   fail:2   skip:2119 time:7154s
Blacklisted hosts:
shard-kbl        total:2117 pass:1167 dwarn:1   dfail:0   fail:8   skip:940 time:5692s

== Logs ==

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

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

* Re: [igt-dev] [PATCH i-g-t 5/5] tests/kms_chv_cursor_fail: Handle cleanup better.
  2018-03-14 14:48   ` Ville Syrjälä
@ 2018-03-19 15:07     ` Maarten Lankhorst
  0 siblings, 0 replies; 20+ messages in thread
From: Maarten Lankhorst @ 2018-03-19 15:07 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: igt-dev

Op 14-03-18 om 15:48 schreef Ville Syrjälä:
> On Wed, Mar 14, 2018 at 12:20:21PM +0100, Maarten Lankhorst wrote:
>> Clean up cursor fb in cleanup_crtc, which means that cursor fb
>> has to be created after prepare_crtc() is called.
>>
>> This will fix a small leak when a subtest fails.
>>
>> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
>> ---
>>  tests/kms_chv_cursor_fail.c | 7 ++-----
>>  1 file changed, 2 insertions(+), 5 deletions(-)
>>
>> diff --git a/tests/kms_chv_cursor_fail.c b/tests/kms_chv_cursor_fail.c
>> index 0dd366c3b4b1..7138e549aeb7 100644
>> --- a/tests/kms_chv_cursor_fail.c
>> +++ b/tests/kms_chv_cursor_fail.c
>> @@ -224,6 +224,7 @@ static void cleanup_crtc(data_t *data)
>>  	data->pipe_crc = NULL;
>>  
>>  	igt_remove_fb(data->drm_fd, &data->primary_fb);
>> +	igt_remove_fb(data->drm_fd, &data->fb);
>>  }
>>  
>>  static void prepare_crtc(data_t *data)
>> @@ -262,15 +263,11 @@ static void prepare_crtc(data_t *data)
>>  
>>  static void test_crtc(data_t *data, unsigned int edges)
>>  {
>> -	cleanup_crtc(data);
>> +	prepare_crtc(data);
>>  
>>  	create_cursor_fb(data, data->curw, data->curh);
> 4 and 5 lgtm as well
>
> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Thanks, pushed after tests succeeded. :)
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

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

end of thread, other threads:[~2018-03-19 15:07 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-14 11:20 [igt-dev] [PATCH i-g-t 0/5] lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe Maarten Lankhorst
2018-03-14 11:20 ` [igt-dev] [PATCH i-g-t 1/5] lib/igt_kms: Add functions to get only a single output for a pipe Maarten Lankhorst
2018-03-14 14:43   ` Ville Syrjälä
2018-03-15 16:58     ` [igt-dev] [PATCH i-g-t] lib/igt_kms: Add functions to get only a single output for a pipe, v2 Maarten Lankhorst
2018-03-14 11:20 ` [igt-dev] [PATCH i-g-t 2/5] tests/kms_rmfb: Use for_each_pipe_with_single_output Maarten Lankhorst
2018-03-14 14:44   ` Ville Syrjälä
2018-03-14 11:20 ` [igt-dev] [PATCH i-g-t 3/5] tests/kms_busy: Convert to using igt_get_single_output_for_pipe Maarten Lankhorst
2018-03-14 14:46   ` Ville Syrjälä
2018-03-16  8:28     ` [igt-dev] [PATCH i-g-t] tests/kms_busy: Convert to using igt_get_single_output_for_pipe, v2 Maarten Lankhorst
2018-03-14 11:20 ` [igt-dev] [PATCH i-g-t 4/5] tests/kms_chv_cursor_fail: Reorder tests, and use igt_display_require_output_on_pipe Maarten Lankhorst
2018-03-14 11:20 ` [igt-dev] [PATCH i-g-t 5/5] tests/kms_chv_cursor_fail: Handle cleanup better Maarten Lankhorst
2018-03-14 14:48   ` Ville Syrjälä
2018-03-19 15:07     ` Maarten Lankhorst
2018-03-14 13:37 ` [igt-dev] ✓ Fi.CI.BAT: success for lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe Patchwork
2018-03-14 17:22 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
2018-03-15 18:31 ` [igt-dev] ✗ Fi.CI.BAT: warning for lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe. (rev2) Patchwork
2018-03-15 19:29 ` Patchwork
2018-03-16  7:29 ` Patchwork
2018-03-16  9:03 ` [igt-dev] ✓ Fi.CI.BAT: success for lib/igt_kms: Add for_each_pipe_with_single_output and igt_get_single_output_for_pipe. (rev3) Patchwork
2018-03-16 10:41 ` [igt-dev] ✗ Fi.CI.IGT: warning " Patchwork

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