Skip to contentSkip to conversation

lib/igt_kms: Convert properties to be more atomic-like.

PATCH Superseded Maarten Lankhorst 3 participants 25 messages Sep 27, 2017 – Sep 29, 2017 Library code

v2 of 4 Superseded Latest is v4 →

lore
Share & tools
lore
#0 lore raw

v2 cover lib/igt_kms: Convert properties to be more atomic-like.

Instead of having to special case each property when it's added, I want to make sure that any test can add arbitrary properties without having to add too much code. Some of the members I want to expose directly, and I also add a way to set a blob as property for planes and pipes, which will be useful for the upcoming plane color management stuff.

Now with bugfixes!

Maarten Lankhorst (8):
tests: Stop looking at plane private members lib/igt_kms: Change output->pending_crtc_idx_mask to

    output->pending_pipe

lib/igt_kms: Commit primary plane when a modeset is forced on a pipe lib/igt_kms: Rework connector properties to be more atomic, v2. lib/igt_kms: Rework plane properties to be more atomic, v2. lib/igt_kms: Rework pipe properties to be more atomic, v2. igt/kms_rotation_crc : Fix flip tests for sprite plane
tests: Rename kms_pipe_color to kms_color

 lib/igt_kms.c                           | 587 +++++++++++++++-----------------
 lib/igt_kms.h                           | 154 ++++-----
 tests/Makefile.sources                  |   2 +-
 tests/kms_atomic_interruptible.c        |  20 +-
 tests/kms_atomic_transition.c           | 123 +++----
 tests/kms_busy.c                        |   7 +-
 tests/{kms_pipe_color.c => kms_color.c} |   4 +-
 tests/kms_concurrent.c                  |   4 +-
 tests/kms_crtc_background_color.c       |   2 +-
 tests/kms_cursor_legacy.c               |   8 +-
 tests/kms_fbc_crc.c                     |   3 +-
 tests/kms_panel_fitting.c               |  16 +-
 tests/kms_plane_scaling.c               |  14 +-
 tests/kms_rmfb.c                        |   2 +-
 tests/kms_rotation_crc.c                |  37 +-
 15 files changed, 463 insertions(+), 520 deletions(-)
 rename tests/{kms_pipe_color.c => kms_color.c} (99%)
Signature · 6 lines
2.14.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#1 lore raw

PATCH v2 1/8 tests: Stop looking at plane private members

Most of these tests have no reason to look at those members, so try other ways of getting the information.

---
 lib/igt_kms.h                 |  21 ++++++++
 tests/kms_atomic_transition.c | 117 +++++++++++++++++++++---------------------
 tests/kms_busy.c              |   5 +-
 tests/kms_concurrent.c        |   4 +-
 tests/kms_cursor_legacy.c     |   6 +--
 tests/kms_fbc_crc.c           |   3 +-
 tests/kms_panel_fitting.c     |  14 +----
 tests/kms_plane_scaling.c     |  14 +----
 tests/kms_rmfb.c              |   2 +-
 tests/kms_rotation_crc.c      |  10 ----
 10 files changed, 93 insertions(+), 103 deletions(-)
lib/igt_kms.h +21 -0
index 3d1061fa08c8..62197dcfea7b 100644
@@ -556,6 +556,27 @@ static inline bool igt_output_is_connected(igt_output_t *output)
 	igt_assert_lt(0, drmModeAtomicAddProperty(req, output->config.connector->connector_id,\
 						  output->config.atomic_props_connector[prop], value))
 
+/*
+ * igt_pipe_refresh:
+ * @display: a pointer to an #igt_display_t structure
+ * @pipe: Pipe to refresh
+ * @force: Should be set to true if mode_blob is no longer considered
+ * to be valid, for example after doing an atomic commit during fork or closing display fd.
+ *
+ * Requests the pipe to be part of the state on next update.
+ * This is useful when state may have been out of sync after
+ * a fork, or we just want to be sure the pipe is included
+ * in the next commit.
+ */
+static inline void
+igt_pipe_refresh(igt_display_t *display, enum pipe pipe, bool force)
+{
+	if (force)
+		display->pipes[pipe].mode_blob = 0;
+
+	display->pipes[pipe].mode_changed = true;
+}
+
 void igt_enable_connectors(void);
 void igt_reset_connectors(void);
 
tests/kms_atomic_transition.c +59 -58

254 lines not on this page · raw message

tests/kms_busy.c +4 -1
index 7e31c2c82dc5..f430beaf7373 100644
@@ -146,7 +146,10 @@ static void flip_to_fb(igt_display_t *dpy, int pipe,
 
 	if (modeset) {
 		igt_set_module_param_int("enable_hangcheck", 1);
-		dpy->pipes[pipe].mode_blob = 0;
+
+		/* Clear old mode blob. */
+		igt_pipe_refresh(dpy, pipe, true);
+
 		igt_output_set_pipe(output, pipe);
 		igt_display_commit2(dpy, COMMIT_ATOMIC);
 	}
tests/kms_concurrent.c +2 -2
index 5d1e0bc5ad19..7f44c596b4c4 100644
@@ -91,7 +91,7 @@ static void test_fini(data_t *data, enum pipe pipe, int n_planes,
 {
 	int i;
 
-	data->display.pipes[pipe].mode_blob = 0;
+	igt_pipe_refresh(&data->display, pipe, true);
 
 	for (i = 0; i < n_planes; i++) {
 		igt_plane_t *plane = data->plane[i];
@@ -292,7 +292,7 @@ test_resolution_with_output(data_t *data, enum pipe pipe, igt_output_t *output)
 
 	i = 0;
 	while (i < iterations || loop_forever) {
-		data->display.pipes[pipe].mode_blob = 0;
+		igt_pipe_refresh(&data->display, pipe, true);
 
 		mode_hi = igt_output_get_mode(output);
 		mode_lo = get_lowres_mode(data, mode_hi, output);
tests/kms_cursor_legacy.c +3 -3
index ba7c3f51ba21..65a001a9dec0 100644
@@ -784,7 +784,7 @@ static bool skip_on_unsupported_nonblocking_modeset(igt_display_t *display)
 
 	/* Force the next state to update all crtc's, to synchronize with the nonblocking modeset. */
 	for_each_pipe(display, pipe)
-		display->pipes[pipe].mode_changed = true;
+		igt_pipe_refresh(display, pipe, false);
 
 	return false;
 }
@@ -971,8 +971,8 @@ static void two_screens_flip_vs_cursor(igt_display_t *display, int nloops, bool
 
 		if (modeset) {
 			/* wait for pending modeset and page flip to complete, to prevent -EBUSY */
-			display->pipes[pipe].mode_changed = true;
-			display->pipes[pipe2].mode_changed = true;
+			igt_pipe_refresh(display, pipe, false);
+			igt_pipe_refresh(display, pipe2, false);
 			igt_display_commit2(display, COMMIT_ATOMIC);
 		}
 	}
tests/kms_fbc_crc.c +1 -2
index 08abb8b4b95e..06234566c232 100644
@@ -461,8 +461,7 @@ static void reset_display(data_t *data)
         igt_pipe_t *pipe = &display->pipes[pipe_id];
 		igt_plane_t *plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
 
-		if (plane->fb)
-			igt_plane_set_fb(plane, NULL);
+		igt_plane_set_fb(plane, NULL);
 	}
 
 	for_each_connected_output(display, data->output)
tests/kms_panel_fitting.c +1 -13
index 5266862a70cf..85a231e60ea2 100644
@@ -84,19 +84,7 @@ static void prepare_crtc(data_t *data, igt_output_t *output, enum pipe pipe,
 	}
 
 	igt_plane_set_fb(plane, &data->fb1);
-	if (s == COMMIT_LEGACY) {
-		int ret;
-		ret = drmModeSetCrtc(data->drm_fd,
-				plane->pipe->crtc_id,
-				data->fb_id1,
-				plane->src_x, plane->src_y,
-				&output->id,
-				1,
-				mode);
-		igt_assert_eq(ret, 0);
-	} else {
-		igt_display_commit2(display, s);
-	}
+	igt_display_commit2(display, s);
 }
 
 static void cleanup_crtc(data_t *data, igt_output_t *output, igt_plane_t *plane)
tests/kms_plane_scaling.c +1 -13
index 1457894aaa10..5ed69f35f267 100644
@@ -93,19 +93,7 @@ static void prepare_crtc(data_t *data, igt_output_t *output, enum pipe pipe,
 	}
 
 	igt_plane_set_fb(plane, &data->fb1);
-	if (s == COMMIT_LEGACY) {
-		int ret;
-		ret = drmModeSetCrtc(data->drm_fd,
-				plane->pipe->crtc_id,
-				data->fb_id1,
-				plane->src_x, plane->src_y,
-				&output->id,
-				1,
-				mode);
-		igt_assert_eq(ret, 0);
-	} else {
-		igt_display_commit2(display, s);
-	}
+	igt_display_commit2(display, s);
 }
 
 static void cleanup_crtc(data_t *data, igt_output_t *output, igt_plane_t *plane)
tests/kms_rmfb.c +1 -1
index 9f1f564e54aa..c97adceea761 100644
@@ -102,7 +102,7 @@ test_rmfb(struct rmfb_data *data, igt_output_t *output, enum pipe pipe, bool reo
 		drmSetClientCap(data->drm_fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1);
 		drmSetClientCap(data->drm_fd, DRM_CLIENT_CAP_ATOMIC, 1);
 
-		data->display.pipes[pipe].mode_blob = 0;
+		igt_pipe_refresh(&data->display, pipe, true);
 	} else {
 		igt_remove_fb(data->drm_fd, &fb);
 		igt_remove_fb(data->drm_fd, &argb_fb);
tests/kms_rotation_crc.c +0 -10
index 21e264addc09..4d2ef1c184f0 100644
@@ -465,12 +465,6 @@ static void test_plane_rotation_ytiled_obj(data_t *data,
 	igt_plane_set_fb(plane, &data->fb);
 	igt_plane_set_size(plane, h, w);
 
-	if (commit < COMMIT_ATOMIC)
-		drmModeObjectSetProperty(fd, plane->drm_plane->plane_id,
-					DRM_MODE_OBJECT_PLANE,
-					plane->rotation_property,
-					plane->rotation);
-
 	ret = igt_display_try_commit2(display, commit);
 
 	igt_output_set_pipe(output, PIPE_NONE);
@@ -562,10 +556,6 @@ static void test_plane_rotation_exhaust_fences(data_t *data,
 		igt_plane_set_rotation(plane, IGT_ROTATION_90);
 		igt_plane_set_size(plane, h, w);
 
-		drmModeObjectSetProperty(fd, plane->drm_plane->plane_id,
-					 DRM_MODE_OBJECT_PLANE,
-					 plane->rotation_property,
-					 plane->rotation);
 		igt_display_commit2(display, commit);
 		if (ret) {
 			igt_warn("failed to commit hardware rotated fb: %i\n", ret);
Signature · 6 lines
2.14.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#2 lore raw

PATCH v2 2/8 lib/igt_kms: Change output->pending_crtc_idx_mask to output->pending_pipe

In reply to Maarten Lankhorst

igt_output_set_pipe with PIPE_ANY used to mean that we bind the output to any pipe, but this is now a deprecated alias for PIPE_NONE, and means the output will be unbound.

Because of this it's better to change output->pending_crtc_idx_mask to an enum pipe, because only a single choice may be given for a pipe.

---
 lib/igt_kms.c                 | 46 ++++++++++++++++++++-----------------------
 lib/igt_kms.h                 |  2 +-
 tests/kms_atomic_transition.c |  4 ++--
 tests/kms_busy.c              |  2 +-
 tests/kms_cursor_legacy.c     |  2 +-
 5 files changed, 26 insertions(+), 30 deletions(-)
lib/igt_kms.c +21 -25
index 7bcafc072f70..a5db6bc493c2 100644
@@ -1561,9 +1561,10 @@ static void igt_display_log_shift(igt_display_t *display, int shift)
 static void igt_output_refresh(igt_output_t *output)
 {
 	igt_display_t *display = output->display;
-	unsigned long crtc_idx_mask;
+	unsigned long crtc_idx_mask = 0;
 
-	crtc_idx_mask = output->pending_crtc_idx_mask;
+	if (output->pending_pipe != PIPE_NONE)
+		crtc_idx_mask = 1 << output->pending_pipe;
 
 	kmstest_free_connector_config(&output->config);
 
@@ -1587,11 +1588,8 @@ static void igt_output_refresh(igt_output_t *output)
 						    BROADCAST_RGB_FULL);
 	}
 
-	if (output->config.pipe == PIPE_NONE)
-		return;
-
 	LOG(display, "%s: Selecting pipe %s\n", output->name,
-	    kmstest_pipe_name(output->config.pipe));
+	    kmstest_pipe_name(output->pending_pipe));
 }
 
 static bool
@@ -1830,7 +1828,7 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 		 * a pipe is set with igt_output_set_pipe().
 		 */
 		output->force_reprobe = true;
-		output->pending_crtc_idx_mask = 0;
+		output->pending_pipe = PIPE_NONE;
 		output->id = resources->connectors[i];
 		output->display = display;
 
@@ -1960,10 +1958,12 @@ static void igt_display_refresh(igt_display_t *display)
 	for (i = 0; i < display->n_outputs; i++) {
 		output = &display->outputs[i];
 
-		if (pipes_in_use & output->pending_crtc_idx_mask)
-			goto report_dup;
+		if (output->pending_pipe != PIPE_NONE) {
+			if (pipes_in_use & (1 << output->pending_pipe))
+				goto report_dup;
 
-		pipes_in_use |= output->pending_crtc_idx_mask;
+			pipes_in_use |= 1 << output->pending_pipe;
+		}
 
 		if (output->force_reprobe)
 			igt_output_refresh(output);
@@ -1975,11 +1975,11 @@ report_dup:
 	for (; i > 0; i--) {
 		igt_output_t *b = &display->outputs[i - 1];
 
-		igt_assert_f(output->pending_crtc_idx_mask !=
-			     b->pending_crtc_idx_mask,
+		igt_assert_f(output->pending_pipe !=
+			     b->pending_pipe,
 			     "%s and %s are both trying to use pipe %s\n",
 			     igt_output_name(output), igt_output_name(b),
-			     kmstest_pipe_name(ffs(b->pending_crtc_idx_mask) - 1));
+			     kmstest_pipe_name(output->pending_pipe));
 	}
 }
 
@@ -1988,7 +1988,7 @@ static igt_pipe_t *igt_output_get_driving_pipe(igt_output_t *output)
 	igt_display_t *display = output->display;
 	enum pipe pipe;
 
-	if (!output->pending_crtc_idx_mask) {
+	if (output->pending_pipe == PIPE_NONE) {
 		/*
 		 * The user hasn't specified a pipe to use, return none.
 		 */
@@ -1998,7 +1998,7 @@ static igt_pipe_t *igt_output_get_driving_pipe(igt_output_t *output)
 		 * Otherwise, return the pending pipe (ie the pipe that should
 		 * drive this output after the commit()
 		 */
-		pipe = ffs(output->pending_crtc_idx_mask) - 1;
+		pipe = output->pending_pipe;
 	}
 
 	igt_assert(pipe >= 0 && pipe < display->n_pipes);
@@ -2051,7 +2051,7 @@ static igt_output_t *igt_pipe_get_output(igt_pipe_t *pipe)
 	for (i = 0; i < display->n_outputs; i++) {
 		igt_output_t *output = &display->outputs[i];
 
-		if (output->pending_crtc_idx_mask == (1 << pipe->pipe))
+		if (output->pending_pipe == pipe->pipe)
 			return output;
 	}
 
@@ -2860,22 +2860,18 @@ void igt_output_set_pipe(igt_output_t *output, enum pipe pipe)
 
 	igt_assert(output->name);
 
-	if (output->pending_crtc_idx_mask) {
+	if (output->pending_pipe != PIPE_NONE) {
 		old_pipe = igt_output_get_driving_pipe(output);
 
 		old_pipe->mode_changed = true;
 	}
 
-	if (pipe == PIPE_NONE) {
-		LOG(display, "%s: set_pipe(any)\n", igt_output_name(output));
-		output->pending_crtc_idx_mask = 0;
-	} else {
-		LOG(display, "%s: set_pipe(%s)\n", igt_output_name(output),
-		    kmstest_pipe_name(pipe));
-		output->pending_crtc_idx_mask = 1 << pipe;
+	LOG(display, "%s: set_pipe(%s)\n", igt_output_name(output),
+	    kmstest_pipe_name(pipe));
+	output->pending_pipe = pipe;
 
+	if (pipe != PIPE_NONE)
 		display->pipes[pipe].mode_changed = true;
-	}
 
 	output->config.pipe_changed = true;
 
lib/igt_kms.h +1 -1
index 62197dcfea7b..8dc118c961b7 100644
@@ -361,7 +361,7 @@ typedef struct {
 	struct kmstest_connector_config config;
 	char *name;
 	bool force_reprobe;
-	unsigned long pending_crtc_idx_mask;
+	enum pipe pending_pipe;
 	bool use_override_mode;
 	drmModeModeInfo override_mode;
 } igt_output_t;
tests/kms_atomic_transition.c +2 -2
index 48823a09aed2..2ae75f2d6630 100644
@@ -644,7 +644,7 @@ static unsigned set_combinations(igt_display_t *display, unsigned mask, struct i
 		event_mask |= 1 << pipe;
 
 		for_each_valid_output_on_pipe(display, pipe, output) {
-			if (output->pending_crtc_idx_mask)
+			if (output->pending_pipe != PIPE_NONE)
 				continue;
 
 			mode = igt_output_get_mode(output);
@@ -726,7 +726,7 @@ static void run_modeset_tests(igt_display_t *display, int howmany, bool nonblock
 			pipe_crcs[i] = igt_pipe_crc_new(display->drm_fd, i, INTEL_PIPE_CRC_SOURCE_AUTO);
 
 		for_each_valid_output_on_pipe(display, i, output) {
-			if (output->pending_crtc_idx_mask)
+			if (output->pending_pipe != PIPE_NONE)
 				continue;
 
 			igt_output_set_pipe(output, i);
tests/kms_busy.c +1 -1
index f430beaf7373..0828a8b38a06 100644
@@ -41,7 +41,7 @@ set_fb_on_crtc(igt_display_t *dpy, int pipe, struct igt_fb *fb)
 		drmModeModeInfoPtr mode;
 		igt_plane_t *primary;
 
-		if (output->pending_crtc_idx_mask)
+		if (output->pending_pipe != PIPE_NONE)
 			continue;
 
 		igt_output_set_pipe(output, pipe);
tests/kms_cursor_legacy.c +1 -1
index 65a001a9dec0..fc7526833673 100644
@@ -155,7 +155,7 @@ static igt_output_t *set_fb_on_crtc(igt_display_t *display, enum pipe pipe, stru
 		drmModeModeInfoPtr mode;
 		igt_plane_t *primary;
 
-		if (output->pending_crtc_idx_mask)
+		if (output->pending_pipe != PIPE_NONE)
 			continue;
 
 		igt_output_set_pipe(output, pipe);
Signature · 6 lines
2.14.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#3 lore raw

PATCH v2 3/8 lib/igt_kms: Commit primary plane when a modeset is forced on a pipe

In reply to Maarten Lankhorst

In between tests, some tests can do the following sequence:

(pipe C configured with FB)
igt_plane_set_fb(primary (pipe C), NULL);
/* Clear rotation property first */
igt_display_commit2(display, COMMIT_UNIVERSAL);

/* disable pipe */
igt_display_commit2(display, COMMIT_LEGACY);

This would result in PIPE_C not being properly disabled, which will cause an error on the next mode. This can be seen when running the full kms_rotation_crc testcase without --subtest, it will fail on exhaust-fences because the bad-tiling subtest wasn't able to disable pipe C correctly.

Testcase: kms_rotation_crc

---
 lib/igt_kms.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
lib/igt_kms.c +1 -1
index a5db6bc493c2..d25090b05c70 100644
@@ -2332,7 +2332,7 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
 	igt_assert(!primary->rotation_changed);
 
 	if (!primary->fb_changed && !primary->position_changed &&
-	    !primary->size_changed)
+	    !primary->size_changed && !primary->pipe->mode_changed)
 		return 0;
 
 	crtc_id = pipe->crtc_id;
Signature · 6 lines
2.14.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#4 lore raw

PATCH v2 4/8 lib/igt_kms: Rework connector properties to be more atomic, v2.

In reply to Maarten Lankhorst

In the future I want to allow tests to commit more properties, but for this to work I have to fix all properties to work better with atomic commit. Instead of special casing each property make a bitmask for all property changed flags, and try to commit all properties.

Changs since v1:
- Mention which properties we set to what.
- Assert the property to be set is valid.

---
 lib/igt_kms.c                    | 44 +++++++++++++++++++---------------------
 lib/igt_kms.h                    | 35 +++++++++++++++++++-------------
 tests/kms_atomic_interruptible.c |  4 ++--
 tests/kms_panel_fitting.c        |  2 +-
 4 files changed, 45 insertions(+), 40 deletions(-)
lib/igt_kms.c +21 -23
index d25090b05c70..07d2074c2b1a 100644
@@ -248,7 +248,7 @@ igt_atomic_fill_connector_props(igt_display_t *display, igt_output_t *output,
 			if (strcmp(prop->name, conn_prop_names[j]) != 0)
 				continue;
 
-			output->config.atomic_props_connector[j] = props->props[i];
+			output->props[j] = props->props[i];
 			break;
 		}
 
@@ -1834,7 +1834,7 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 
 		igt_output_refresh(output);
 
-		output->config.pipe_changed = true;
+		igt_output_set_prop_changed(output, IGT_CONNECTOR_CRTC_ID);
 	}
 
 	drmModeFreePlaneResources(plane_resources);
@@ -2514,23 +2514,24 @@ static void igt_atomic_prepare_crtc_commit(igt_pipe_t *pipe_obj, drmModeAtomicRe
 static void igt_atomic_prepare_connector_commit(igt_output_t *output, drmModeAtomicReq *req)
 {
 
-	struct kmstest_connector_config *config = &output->config;
+	int i;
 
-	if (config->connector_scaling_mode_changed)
-		igt_atomic_populate_connector_req(req, output, IGT_CONNECTOR_SCALING_MODE, config->connector_scaling_mode);
+	for (i = 0; i < IGT_NUM_CONNECTOR_PROPS; i++) {
+		if (!igt_output_is_prop_changed(output, i))
+			continue;
 
-	if (config->pipe_changed) {
-		uint32_t crtc_id = 0;
+		/* it's an error to try an unsupported feature */
+		igt_assert(output->props[i]);
 
-		if (output->config.pipe != PIPE_NONE)
-			crtc_id = output->config.crtc->crtc_id;
+		igt_debug("%s: Setting property \"%s\" to 0x%"PRIx64"/%"PRIi64"\n",
+			  igt_output_name(output), igt_connector_prop_names[i],
+			  output->values[i], output->values[i]);
 
-		igt_atomic_populate_connector_req(req, output, IGT_CONNECTOR_CRTC_ID, crtc_id);
+		igt_assert_lt(0, drmModeAtomicAddProperty(req,
+					  output->config.connector->connector_id,
+					  output->props[i],
+					  output->values[i]));
 	}
-	/*
-	 *	TODO: Add all other connector level properties here
-	 */
-
 }
 
 /*
@@ -2625,11 +2626,10 @@ display_commit_changed(igt_display_t *display, enum igt_commit_style s)
 	for (i = 0; i < display->n_outputs; i++) {
 		igt_output_t *output = &display->outputs[i];
 
-		if (s != COMMIT_UNIVERSAL)
-			output->config.pipe_changed = false;
-
 		if (s == COMMIT_ATOMIC)
-			output->config.connector_scaling_mode_changed = false;
+			output->changed = 0;
+		else if (s != COMMIT_UNIVERSAL)
+			igt_output_clear_prop_changed(output, IGT_CONNECTOR_CRTC_ID);
 	}
 }
 
@@ -2873,18 +2873,16 @@ void igt_output_set_pipe(igt_output_t *output, enum pipe pipe)
 	if (pipe != PIPE_NONE)
 		display->pipes[pipe].mode_changed = true;
 
-	output->config.pipe_changed = true;
+	igt_output_set_prop_value(output, IGT_CONNECTOR_CRTC_ID, pipe == PIPE_NONE ? 0 : display->pipes[pipe].crtc_id);
 
 	igt_output_refresh(output);
 }
 
 void igt_output_set_scaling_mode(igt_output_t *output, uint64_t scaling_mode)
 {
-	output->config.connector_scaling_mode_changed = true;
-
-	output->config.connector_scaling_mode = scaling_mode;
+	igt_output_set_prop_value(output, IGT_CONNECTOR_SCALING_MODE, scaling_mode);
 
-	igt_require(output->config.atomic_props_connector[IGT_CONNECTOR_SCALING_MODE]);
+	igt_require(output->props[IGT_CONNECTOR_SCALING_MODE]);
 }
 
 igt_plane_t *igt_output_get_plane(igt_output_t *output, int plane_idx)
lib/igt_kms.h +21 -14
index 8dc118c961b7..1ef10e7d525c 100644
@@ -131,10 +131,7 @@ struct kmstest_connector_config {
 	drmModeConnector *connector;
 	drmModeEncoder *encoder;
 	drmModeModeInfo default_mode;
-	uint64_t connector_scaling_mode;
-	bool connector_scaling_mode_changed;
-	bool pipe_changed;
-	uint32_t atomic_props_connector[IGT_NUM_CONNECTOR_PROPS];
+
 	int pipe;
 	unsigned valid_crtc_idx_mask;
 };
@@ -364,6 +361,12 @@ typedef struct {
 	enum pipe pending_pipe;
 	bool use_override_mode;
 	drmModeModeInfo override_mode;
+
+	/* bitmask of changed properties */
+	uint64_t changed;
+
+	uint32_t props[IGT_NUM_CONNECTOR_PROPS];
+	uint64_t values[IGT_NUM_CONNECTOR_PROPS];
 } igt_output_t;
 
 struct igt_display {
@@ -545,16 +548,20 @@ static inline bool igt_output_is_connected(igt_output_t *output)
 #define igt_atomic_populate_crtc_req(req, pipe, prop, value) \
 	igt_assert_lt(0, drmModeAtomicAddProperty(req, pipe->crtc_id,\
 						  pipe->atomic_props_crtc[prop], value))
-/**
- * igt_atomic_populate_connector_req:
- * @req: A pointer to drmModeAtomicReq
- * @output: A pointer igt_output_t
- * @prop: one of igt_atomic_connector_properties
- * @value: the value to add
- */
-#define igt_atomic_populate_connector_req(req, output, prop, value) \
-	igt_assert_lt(0, drmModeAtomicAddProperty(req, output->config.connector->connector_id,\
-						  output->config.atomic_props_connector[prop], value))
+
+#define igt_output_is_prop_changed(output, prop) \
+	(!!((output)->changed & (1 << (prop))))
+#define igt_output_set_prop_changed(output, prop) \
+	(output)->changed |= 1 << (prop)
+
+#define igt_output_clear_prop_changed(output, prop) \
+	(output)->changed &= ~(1 << (prop))
+
+#define igt_output_set_prop_value(output, prop, value) \
+	do { \
+		(output)->values[prop] = (value); \
+		igt_output_set_prop_changed(output, prop); \
+	} while (0)
 
 /*
  * igt_pipe_refresh:
tests/kms_atomic_interruptible.c +2 -2
index 4e06ee4e2d6b..2d19fe967809 100644
@@ -159,7 +159,7 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
 					plane->pipe->atomic_props_crtc[IGT_CRTC_MODE_ID],
 					plane->pipe->atomic_props_crtc[IGT_CRTC_ACTIVE],
 					/* connector: 1 prop */
-					output->config.atomic_props_connector[IGT_CONNECTOR_CRTC_ID],
+					output->props[IGT_CONNECTOR_CRTC_ID],
 					/* plane: remainder props */
 					plane->atomic_props_plane[IGT_PLANE_CRTC_ID],
 					plane->atomic_props_plane[IGT_PLANE_FB_ID],
@@ -204,7 +204,7 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
 			case test_legacy_dpms: {
 				struct drm_mode_connector_set_property prop = {
 					.value = DRM_MODE_DPMS_OFF,
-					.prop_id = output->config.atomic_props_connector[IGT_CONNECTOR_DPMS],
+					.prop_id = output->props[IGT_CONNECTOR_DPMS],
 					.connector_id = output->id,
 				};
 
tests/kms_panel_fitting.c +1 -1
index 85a231e60ea2..e4ea355611c3 100644
@@ -275,7 +275,7 @@ static void test_atomic_fastset(igt_display_t *display)
 	igt_require(intel_gen(intel_get_drm_devid(display->drm_fd)) >= 5);
 
 	for_each_pipe_with_valid_output(display, pipe, output) {
-		if (!output->config.atomic_props_connector[IGT_CONNECTOR_SCALING_MODE])
+		if (!output->props[IGT_CONNECTOR_SCALING_MODE])
 			continue;
 
 		test_panel_fitting_fastset(display, pipe, output);
Signature · 6 lines
2.14.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#5 lore raw

PATCH v2 5/8 lib/igt_kms: Rework plane properties to be more atomic, v2.

In reply to Maarten Lankhorst

In the future I want to allow tests to commit more properties, but for this to work I have to fix all properties to work better with atomic commit. Instead of special casing each property make a bitmask for all property changed flags, and try to commit all properties.

Changes since v1:
- Remove special dumping of src and crtc coordinates.
- Dump all modified coordinates.

---
 lib/igt_kms.c                    | 292 +++++++++++++++++----------------------
 lib/igt_kms.h                    |  59 ++++----
 tests/kms_atomic_interruptible.c |  12 +-
 tests/kms_rotation_crc.c         |   4 +-
 4 files changed, 159 insertions(+), 208 deletions(-)
lib/igt_kms.c +127 -165
index 07d2074c2b1a..3181ee605195 100644
@@ -192,11 +192,11 @@ const char *igt_connector_prop_names[IGT_NUM_CONNECTOR_PROPS] = {
 
 /*
  * Retrieve all the properies specified in props_name and store them into
- * plane->atomic_props_plane.
+ * plane->props.
  */
 static void
-igt_atomic_fill_plane_props(igt_display_t *display, igt_plane_t *plane,
-			int num_props, const char **prop_names)
+igt_fill_plane_props(igt_display_t *display, igt_plane_t *plane,
+		     int num_props, const char **prop_names)
 {
 	drmModeObjectPropertiesPtr props;
 	int i, j, fd;
@@ -214,7 +214,7 @@ igt_atomic_fill_plane_props(igt_display_t *display, igt_plane_t *plane,
 			if (strcmp(prop->name, prop_names[j]) != 0)
 				continue;
 
-			plane->atomic_props_plane[j] = props->props[i];
+			plane->props[j] = props->props[i];
 			break;
 		}
 
@@ -1659,7 +1659,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 	drmModeRes *resources;
 	drmModePlaneRes *plane_resources;
 	int i;
-	int is_atomic = 0;
 
 	memset(display, 0, sizeof(igt_display_t));
 
@@ -1679,7 +1678,9 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 	igt_assert_f(display->pipes, "Failed to allocate memory for %d pipes\n", display->n_pipes);
 
 	drmSetClientCap(drm_fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1);
-	is_atomic = drmSetClientCap(drm_fd, DRM_CLIENT_CAP_ATOMIC, 1);
+	if (drmSetClientCap(drm_fd, DRM_CLIENT_CAP_ATOMIC, 1) == 0)
+		display->is_atomic = 1;
+
 	plane_resources = drmModeGetPlaneResources(display->drm_fd);
 	igt_assert(plane_resources);
 
@@ -1776,19 +1777,15 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 			plane->type = type;
 			plane->pipe = pipe;
 			plane->drm_plane = drm_plane;
-			plane->fence_fd = -1;
+			plane->values[IGT_PLANE_IN_FENCE_FD] = ~0ULL;
 
-			if (is_atomic == 0) {
-				display->is_atomic = 1;
-				igt_atomic_fill_plane_props(display, plane, IGT_NUM_PLANE_PROPS, igt_plane_prop_names);
-			}
+			igt_fill_plane_props(display, plane, IGT_NUM_PLANE_PROPS, igt_plane_prop_names);
 
 			get_plane_property(display->drm_fd, drm_plane->plane_id,
 					   "rotation",
-					   &plane->rotation_property,
-					   &prop_value,
+					   &plane->props[IGT_PLANE_ROTATION],
+					   &plane->values[IGT_PLANE_ROTATION],
 					   NULL);
-			plane->rotation = (igt_rotation_t)prop_value;
 		}
 
 		/*
@@ -1805,8 +1802,10 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 
 		pipe->n_planes = n_planes;
 
-		for_each_plane_on_pipe(display, i, plane)
-			plane->fb_changed = true;
+		for_each_plane_on_pipe(display, i, plane) {
+			igt_plane_set_prop_changed(plane, IGT_PLANE_FB_ID);
+			igt_plane_set_prop_changed(plane, IGT_PLANE_CRTC_ID);
+		}
 
 		pipe->mode_changed = true;
 	}
@@ -2070,18 +2069,7 @@ bool igt_pipe_get_property(igt_pipe_t *pipe, const char *name,
 
 static uint32_t igt_plane_get_fb_id(igt_plane_t *plane)
 {
-	if (plane->fb)
-		return plane->fb->fb_id;
-	else
-		return 0;
-}
-
-static uint32_t igt_plane_get_fb_gem_handle(igt_plane_t *plane)
-{
-	if (plane->fb)
-		return plane->fb->gem_handle;
-	else
-		return 0;
+	return plane->values[IGT_PLANE_FB_ID];
 }
 
 #define CHECK_RETURN(r, fail) {	\
@@ -2090,9 +2078,6 @@ static uint32_t igt_plane_get_fb_gem_handle(igt_plane_t *plane)
 	igt_assert_eq(r, 0);	\
 }
 
-
-
-
 /*
  * Add position and fb changes of a plane to the atomic property set
  */
@@ -2101,63 +2086,31 @@ igt_atomic_prepare_plane_commit(igt_plane_t *plane, igt_pipe_t *pipe,
 	drmModeAtomicReq *req)
 {
 	igt_display_t *display = pipe->display;
-	uint32_t fb_id, crtc_id;
+	int i;
 
 	igt_assert(plane->drm_plane);
 
-	/* it's an error to try an unsupported feature */
-	igt_assert(igt_plane_supports_rotation(plane) ||
-			!plane->rotation_changed);
-
-	fb_id = igt_plane_get_fb_id(plane);
-	crtc_id = pipe->crtc_id;
-
 	LOG(display,
 	    "populating plane data: %s.%d, fb %u\n",
 	    kmstest_pipe_name(pipe->pipe),
 	    plane->index,
-	    fb_id);
+	    igt_plane_get_fb_id(plane));
 
-	if (plane->fence_fd >= 0) {
-		uint64_t fence_fd = (int64_t) plane->fence_fd;
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_IN_FENCE_FD, fence_fd);
-	}
-
-	if (plane->fb_changed) {
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_ID, fb_id ? crtc_id : 0);
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_FB_ID, fb_id);
-	}
-
-	if (plane->position_changed || plane->size_changed) {
-		uint32_t src_x = IGT_FIXED(plane->src_x, 0); /* src_x */
-		uint32_t src_y = IGT_FIXED(plane->src_y, 0); /* src_y */
-		uint32_t src_w = IGT_FIXED(plane->src_w, 0); /* src_w */
-		uint32_t src_h = IGT_FIXED(plane->src_h, 0); /* src_h */
-		int32_t crtc_x = plane->crtc_x;
-		int32_t crtc_y = plane->crtc_y;
-		uint32_t crtc_w = plane->crtc_w;
-		uint32_t crtc_h = plane->crtc_h;
+	for (i = 0; i < IGT_NUM_PLANE_PROPS; i++) {
+		if (!igt_plane_is_prop_changed(plane, i))
+			continue;
 
-		LOG(display,
-		"src = (%d, %d) %u x %u "
-		"dst = (%d, %d) %u x %u\n",
-		src_x >> 16, src_y >> 16, src_w >> 16, src_h >> 16,
-		crtc_x, crtc_y, crtc_w, crtc_h);
+		/* it's an error to try an unsupported feature */
+		igt_assert(plane->props[i]);
 
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_X, src_x);
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_Y, src_y);
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_W, src_w);
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_H, src_h);
+		igt_debug("plane %s.%d: Setting property \"%s\" to 0x%"PRIx64"/%"PRIi64"\n",
+			kmstest_pipe_name(pipe->pipe), plane->index, igt_plane_prop_names[i],
+			plane->values[i], plane->values[i]);
 
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_X, crtc_x);
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_Y, crtc_y);
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_W, crtc_w);
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_H, crtc_h);
+		igt_assert_lt(0, drmModeAtomicAddProperty(req, plane->drm_plane->plane_id,
+						  plane->props[i],
+						  plane->values[i]));
 	}
-
-	if (plane->rotation_changed)
-		igt_atomic_populate_plane_req(req, plane,
-			IGT_PLANE_ROTATION, plane->rotation);
 }
 
 
@@ -2183,17 +2136,20 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
 	int32_t crtc_y;
 	uint32_t crtc_w;
 	uint32_t crtc_h;
+	bool setplane =
+		igt_plane_is_prop_changed(plane, IGT_PLANE_FB_ID) ||
+		plane->changed & IGT_PLANE_COORD_CHANGED_MASK;
 
 	igt_assert(plane->drm_plane);
 
 	/* it's an error to try an unsupported feature */
 	igt_assert(igt_plane_supports_rotation(plane) ||
-		   !plane->rotation_changed);
+		   !igt_plane_is_prop_changed(plane, IGT_PLANE_ROTATION));
 
 	fb_id = igt_plane_get_fb_id(plane);
 	crtc_id = pipe->crtc_id;
 
-	if ((plane->fb_changed || plane->size_changed) && fb_id == 0) {
+	if (setplane && fb_id == 0) {
 		LOG(display,
 		    "SetPlane pipe %s, plane %d, disabling\n",
 		    kmstest_pipe_name(pipe->pipe),
@@ -2212,16 +2168,15 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
 				      IGT_FIXED(0,0) /* src_h */);
 
 		CHECK_RETURN(ret, fail_on_error);
-	} else if (plane->fb_changed || plane->position_changed ||
-		plane->size_changed) {
-		src_x = IGT_FIXED(plane->src_x,0); /* src_x */
-		src_y = IGT_FIXED(plane->src_y,0); /* src_y */
-		src_w = IGT_FIXED(plane->src_w,0); /* src_w */
-		src_h = IGT_FIXED(plane->src_h,0); /* src_h */
-		crtc_x = plane->crtc_x;
-		crtc_y = plane->crtc_y;
-		crtc_w = plane->crtc_w;
-		crtc_h = plane->crtc_h;
+	} else if (setplane) {
+		src_x = plane->values[IGT_PLANE_SRC_X];
+		src_y = plane->values[IGT_PLANE_SRC_Y];
+		src_w = plane->values[IGT_PLANE_SRC_W];
+		src_h = plane->values[IGT_PLANE_SRC_H];
+		crtc_x = plane->values[IGT_PLANE_CRTC_X];
+		crtc_y = plane->values[IGT_PLANE_CRTC_Y];
+		crtc_w = plane->values[IGT_PLANE_CRTC_W];
+		crtc_h = plane->values[IGT_PLANE_CRTC_H];
 
 		LOG(display,
 		    "SetPlane %s.%d, fb %u, src = (%d, %d) "
@@ -2245,9 +2200,10 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
 		CHECK_RETURN(ret, fail_on_error);
 	}
 
-	if (plane->rotation_changed) {
-		ret = igt_plane_set_property(plane, plane->rotation_property,
-				       plane->rotation);
+	if (igt_plane_is_prop_changed(plane, IGT_PLANE_ROTATION)) {
+		ret = igt_plane_set_property(plane,
+					     plane->props[IGT_PLANE_ROTATION],
+					     plane->values[IGT_PLANE_ROTATION]);
 
 		CHECK_RETURN(ret, fail_on_error);
 	}
@@ -2269,35 +2225,30 @@ static int igt_cursor_commit_legacy(igt_plane_t *cursor,
 	uint32_t crtc_id = pipe->crtc_id;
 	int ret;
 
-	if (cursor->fb_changed) {
-		uint32_t gem_handle = igt_plane_get_fb_gem_handle(cursor);
-
-		if (gem_handle) {
+	if (igt_plane_is_prop_changed(cursor, IGT_PLANE_FB_ID)) {
+		if (cursor->gem_handle)
 			LOG(display,
 			    "SetCursor pipe %s, fb %u %dx%d\n",
 			    kmstest_pipe_name(pipe->pipe),
-			    gem_handle,
-			    cursor->crtc_w, cursor->crtc_h);
-
-			ret = drmModeSetCursor(display->drm_fd, crtc_id,
-					       gem_handle,
-					       cursor->crtc_w,
-					       cursor->crtc_h);
-		} else {
+			    cursor->gem_handle,
+			    (unsigned)cursor->values[IGT_PLANE_CRTC_W],
+			    (unsigned)cursor->values[IGT_PLANE_CRTC_H]);
+		else
 			LOG(display,
 			    "SetCursor pipe %s, disabling\n",
 			    kmstest_pipe_name(pipe->pipe));
 
-			ret = drmModeSetCursor(display->drm_fd, crtc_id,
-					       0, 0, 0);
-		}
-
+		ret = drmModeSetCursor(display->drm_fd, crtc_id,
+				       cursor->gem_handle,
+				       cursor->values[IGT_PLANE_CRTC_W],
+				       cursor->values[IGT_PLANE_CRTC_H]);
 		CHECK_RETURN(ret, fail_on_error);
 	}
 
-	if (cursor->position_changed) {
-		int x = cursor->crtc_x;
-		int y = cursor->crtc_y;
+	if (igt_plane_is_prop_changed(cursor, IGT_PLANE_CRTC_X) ||
+	    igt_plane_is_prop_changed(cursor, IGT_PLANE_CRTC_Y)) {
+		int x = cursor->values[IGT_PLANE_CRTC_X];
+		int y = cursor->values[IGT_PLANE_CRTC_Y];
 
 		LOG(display,
 		    "MoveCursor pipe %s, (%d, %d)\n",
@@ -2326,13 +2277,14 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
 	int ret;
 
 	/* Primary planes can't be windowed when using a legacy commit */
-	igt_assert((primary->crtc_x == 0 && primary->crtc_y == 0));
+	igt_assert((primary->values[IGT_PLANE_CRTC_X] == 0 && primary->values[IGT_PLANE_CRTC_Y] == 0));
 
 	/* nor rotated */
-	igt_assert(!primary->rotation_changed);
+	igt_assert(!igt_plane_is_prop_changed(primary, IGT_PLANE_ROTATION));
 
-	if (!primary->fb_changed && !primary->position_changed &&
-	    !primary->size_changed && !primary->pipe->mode_changed)
+	if (!igt_plane_is_prop_changed(primary, IGT_PLANE_FB_ID) &&
+	    !(primary->changed & IGT_PLANE_COORD_CHANGED_MASK) &&
+	    !primary->pipe->mode_changed)
 		return 0;
 
 	crtc_id = pipe->crtc_id;
@@ -2343,19 +2295,22 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
 		mode = NULL;
 
 	if (fb_id) {
+		uint32_t src_x = primary->values[IGT_PLANE_SRC_X] >> 16;
+		uint32_t src_y = primary->values[IGT_PLANE_SRC_Y] >> 16;
+
 		LOG(display,
 		    "%s: SetCrtc pipe %s, fb %u, src (%d, %d), "
 		    "mode %dx%d\n",
 		    igt_output_name(output),
 		    kmstest_pipe_name(pipe->pipe),
 		    fb_id,
-		    primary->src_x, primary->src_y,
+		    src_x, src_y,
 		    mode->hdisplay, mode->vdisplay);
 
 		ret = drmModeSetCrtc(display->drm_fd,
 				     crtc_id,
 				     fb_id,
-				     primary->src_x, primary->src_y,
+				     src_x, src_y,
 				     &output->id,
 				     1,
 				     mode);
@@ -2608,18 +2563,27 @@ display_commit_changed(igt_display_t *display, enum igt_commit_style s)
 		}
 
 		for_each_plane_on_pipe(display, pipe, plane) {
-			plane->fb_changed = false;
-			plane->position_changed = false;
-			plane->size_changed = false;
+			if (s == COMMIT_ATOMIC) {
+				int fd;
+				plane->changed = 0;
 
-			if (s != COMMIT_LEGACY ||
-			    !(plane->type == DRM_PLANE_TYPE_PRIMARY ||
-			      plane->type == DRM_PLANE_TYPE_CURSOR))
-				plane->rotation_changed = false;
+				fd = plane->values[IGT_PLANE_IN_FENCE_FD];
+				if (fd != -1)
+					close(fd);
 
-			if (s == COMMIT_ATOMIC)
 				/* reset fence_fd to prevent it from being set for the next commit */
-				igt_plane_set_fence_fd(plane, -1);
+				plane->values[IGT_PLANE_IN_FENCE_FD] = -1;
+			} else {
+				plane->changed &= ~IGT_PLANE_COORD_CHANGED_MASK;
+
+				igt_plane_clear_prop_changed(plane, IGT_PLANE_CRTC_ID);
+				igt_plane_clear_prop_changed(plane, IGT_PLANE_FB_ID);
+
+				if (s != COMMIT_LEGACY ||
+				    !(plane->type == DRM_PLANE_TYPE_PRIMARY ||
+				      plane->type == DRM_PLANE_TYPE_CURSOR))
+					igt_plane_clear_prop_changed(plane, IGT_PLANE_ROTATION);
+			}
 		}
 	}
 
@@ -2913,30 +2877,31 @@ void igt_plane_set_fb(igt_plane_t *plane, struct igt_fb *fb)
 	LOG(display, "%s.%d: plane_set_fb(%d)\n", kmstest_pipe_name(pipe->pipe),
 	    plane->index, fb ? fb->fb_id : 0);
 
-	plane->fb = fb;
+	igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_ID, fb ? pipe->crtc_id : 0);
+	igt_plane_set_prop_value(plane, IGT_PLANE_FB_ID, fb ? fb->fb_id : 0);
+
+	if (plane->type == DRM_PLANE_TYPE_CURSOR && fb)
+		plane->gem_handle = fb->gem_handle;
+	else
+		plane->gem_handle = 0;
+
 	/* hack to keep tests working that don't call igt_plane_set_size() */
 	if (fb) {
 		/* set default plane size as fb size */
-		plane->crtc_w = fb->width;
-		plane->crtc_h = fb->height;
+		igt_plane_set_position(plane, 0, 0);
+		igt_plane_set_size(plane, fb->width, fb->height);
 
 		/* set default src pos/size as fb size */
-		plane->src_x = 0;
-		plane->src_y = 0;
-		plane->src_w = fb->width;
-		plane->src_h = fb->height;
+		igt_fb_set_position(fb, plane, 0, 0);
+		igt_fb_set_size(fb, plane, fb->width, fb->height);
 	} else {
-		plane->src_x = 0;
-		plane->src_y = 0;
-		plane->src_w = 0;
-		plane->src_h = 0;
+		igt_plane_set_position(plane, 0, 0);
+		igt_plane_set_size(plane, 0, 0);
 
-		plane->crtc_w = 0;
-		plane->crtc_h = 0;
+		/* set default src pos/size as fb size */
+		igt_fb_set_position(fb, plane, 0, 0);
+		igt_fb_set_size(fb, plane, 0, 0);
 	}
-
-	plane->fb_changed = true;
-	plane->size_changed = true;
 }
 
 /**
@@ -2949,12 +2914,19 @@ void igt_plane_set_fb(igt_plane_t *plane, struct igt_fb *fb)
  */
 void igt_plane_set_fence_fd(igt_plane_t *plane, int fence_fd)
 {
-	close(plane->fence_fd);
+	int64_t fd;
 
-	if (fcntl(fence_fd, F_GETFD) != -1)
-		plane->fence_fd = dup(fence_fd);
-	else
-		plane->fence_fd = -1;
+	fd = plane->values[IGT_PLANE_IN_FENCE_FD];
+	if (fd != -1)
+		close(fd);
+
+	if (fence_fd != -1) {
+		fd = dup(fence_fd);
+		igt_fail_on(fd == -1);
+	} else
+		fd = -1;
+
+	igt_plane_set_prop_value(plane, IGT_PLANE_IN_FENCE_FD, fd);
 }
 
 void igt_plane_set_position(igt_plane_t *plane, int x, int y)
@@ -2965,10 +2937,8 @@ void igt_plane_set_position(igt_plane_t *plane, int x, int y)
 	LOG(display, "%s.%d: plane_set_position(%d,%d)\n",
 	    kmstest_pipe_name(pipe->pipe), plane->index, x, y);
 
-	plane->crtc_x = x;
-	plane->crtc_y = y;
-
-	plane->position_changed = true;
+	igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_X, x);
+	igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_Y, y);
 }
 
 /**
@@ -2989,10 +2959,8 @@ void igt_plane_set_size(igt_plane_t *plane, int w, int h)
 	LOG(display, "%s.%d: plane_set_size (%dx%d)\n",
 	    kmstest_pipe_name(pipe->pipe), plane->index, w, h);
 
-	plane->crtc_w = w;
-	plane->crtc_h = h;
-
-	plane->size_changed = true;
+	igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_W, w);
+	igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_H, h);
 }
 
 /**
@@ -3014,10 +2982,8 @@ void igt_fb_set_position(struct igt_fb *fb, igt_plane_t *plane,
 	LOG(display, "%s.%d: fb_set_position(%d,%d)\n",
 	    kmstest_pipe_name(pipe->pipe), plane->index, x, y);
 
-	plane->src_x = x;
-	plane->src_y = y;
-
-	plane->fb_changed = true;
+	igt_plane_set_prop_value(plane, IGT_PLANE_SRC_X, IGT_FIXED(x, 0));
+	igt_plane_set_prop_value(plane, IGT_PLANE_SRC_Y, IGT_FIXED(y, 0));
 }
 
 /**
@@ -3040,10 +3006,8 @@ void igt_fb_set_size(struct igt_fb *fb, igt_plane_t *plane,
 	LOG(display, "%s.%d: fb_set_size(%dx%d)\n",
 	    kmstest_pipe_name(pipe->pipe), plane->index, w, h);
 
-	plane->src_w = w;
-	plane->src_h = h;
-
-	plane->fb_changed = true;
+	igt_plane_set_prop_value(plane, IGT_PLANE_SRC_W, IGT_FIXED(w, 0));
+	igt_plane_set_prop_value(plane, IGT_PLANE_SRC_H, IGT_FIXED(h, 0));
 }
 
 static const char *rotation_name(igt_rotation_t rotation)
@@ -3071,9 +3035,7 @@ void igt_plane_set_rotation(igt_plane_t *plane, igt_rotation_t rotation)
 	    kmstest_pipe_name(pipe->pipe),
 	    plane->index, rotation_name(rotation));
 
-	plane->rotation = rotation;
-
-	plane->rotation_changed = true;
+	igt_plane_set_prop_value(plane, IGT_PLANE_ROTATION, rotation);
 }
 
 /**
lib/igt_kms.h +24 -35

90 lines not on this page · raw message

tests/kms_atomic_interruptible.c +6 -6
index 2d19fe967809..5570854390ea 100644
@@ -161,12 +161,12 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
 					/* connector: 1 prop */
 					output->props[IGT_CONNECTOR_CRTC_ID],
 					/* plane: remainder props */
-					plane->atomic_props_plane[IGT_PLANE_CRTC_ID],
-					plane->atomic_props_plane[IGT_PLANE_FB_ID],
-					plane->atomic_props_plane[IGT_PLANE_SRC_W],
-					plane->atomic_props_plane[IGT_PLANE_SRC_H],
-					plane->atomic_props_plane[IGT_PLANE_CRTC_W],
-					plane->atomic_props_plane[IGT_PLANE_CRTC_H]
+					plane->props[IGT_PLANE_CRTC_ID],
+					plane->props[IGT_PLANE_FB_ID],
+					plane->props[IGT_PLANE_SRC_W],
+					plane->props[IGT_PLANE_SRC_H],
+					plane->props[IGT_PLANE_CRTC_W],
+					plane->props[IGT_PLANE_CRTC_H]
 				};
 				uint64_t prop_vals[] = {
 					/* crtc */
tests/kms_rotation_crc.c +2 -2
index 4d2ef1c184f0..4932a0d44410 100644
@@ -122,11 +122,11 @@ static void prepare_crtc(data_t *data, igt_output_t *output, enum pipe pipe,
 	igt_plane_set_fb(primary, &data->fb_modeset);
 
 	if (commit < COMMIT_ATOMIC) {
-		primary->rotation_changed = false;
+		igt_plane_clear_prop_changed(primary, IGT_PLANE_ROTATION);
 		igt_display_commit(display);
 
 		if (plane->type == DRM_PLANE_TYPE_PRIMARY)
-			primary->rotation_changed = true;
+			igt_plane_set_prop_changed(primary, IGT_PLANE_ROTATION);
 	}
 
 	igt_plane_set_fb(plane, NULL);
Signature · 6 lines
2.14.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#6 lore raw

PATCH v2 5/8 lib/igt_kms: Rework plane properties to be more atomic, v3.

In the future I want to allow tests to commit more properties, but for this to work I have to fix all properties to work better with atomic commit. Instead of special casing each property make a bitmask for all property changed flags, and try to commit all properties.

Changes since v1:
- Remove special dumping of src and crtc coordinates.
- Dump all modified coordinates.
Changes since v2:
- Move igt_plane_set_prop_changed up slightly.

---
 lib/igt_kms.c                    | 293 +++++++++++++++++----------------------
 lib/igt_kms.h                    |  59 ++++----
 tests/kms_atomic_interruptible.c |  12 +-
 tests/kms_rotation_crc.c         |   4 +-
 4 files changed, 159 insertions(+), 209 deletions(-)
lib/igt_kms.c +127 -166
index 07d2074c2b1a..6e0052ebe7a7 100644
@@ -192,11 +192,11 @@ const char *igt_connector_prop_names[IGT_NUM_CONNECTOR_PROPS] = {
 
 /*
  * Retrieve all the properies specified in props_name and store them into
- * plane->atomic_props_plane.
+ * plane->props.
  */
 static void
-igt_atomic_fill_plane_props(igt_display_t *display, igt_plane_t *plane,
-			int num_props, const char **prop_names)
+igt_fill_plane_props(igt_display_t *display, igt_plane_t *plane,
+		     int num_props, const char **prop_names)
 {
 	drmModeObjectPropertiesPtr props;
 	int i, j, fd;
@@ -214,7 +214,7 @@ igt_atomic_fill_plane_props(igt_display_t *display, igt_plane_t *plane,
 			if (strcmp(prop->name, prop_names[j]) != 0)
 				continue;
 
-			plane->atomic_props_plane[j] = props->props[i];
+			plane->props[j] = props->props[i];
 			break;
 		}
 
@@ -1659,7 +1659,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 	drmModeRes *resources;
 	drmModePlaneRes *plane_resources;
 	int i;
-	int is_atomic = 0;
 
 	memset(display, 0, sizeof(igt_display_t));
 
@@ -1679,7 +1678,9 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 	igt_assert_f(display->pipes, "Failed to allocate memory for %d pipes\n", display->n_pipes);
 
 	drmSetClientCap(drm_fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1);
-	is_atomic = drmSetClientCap(drm_fd, DRM_CLIENT_CAP_ATOMIC, 1);
+	if (drmSetClientCap(drm_fd, DRM_CLIENT_CAP_ATOMIC, 1) == 0)
+		display->is_atomic = 1;
+
 	plane_resources = drmModeGetPlaneResources(display->drm_fd);
 	igt_assert(plane_resources);
 
@@ -1776,19 +1777,19 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 			plane->type = type;
 			plane->pipe = pipe;
 			plane->drm_plane = drm_plane;
-			plane->fence_fd = -1;
+			plane->values[IGT_PLANE_IN_FENCE_FD] = ~0ULL;
 
-			if (is_atomic == 0) {
-				display->is_atomic = 1;
-				igt_atomic_fill_plane_props(display, plane, IGT_NUM_PLANE_PROPS, igt_plane_prop_names);
-			}
+			igt_fill_plane_props(display, plane, IGT_NUM_PLANE_PROPS, igt_plane_prop_names);
 
 			get_plane_property(display->drm_fd, drm_plane->plane_id,
 					   "rotation",
-					   &plane->rotation_property,
-					   &prop_value,
+					   &plane->props[IGT_PLANE_ROTATION],
+					   &plane->values[IGT_PLANE_ROTATION],
 					   NULL);
-			plane->rotation = (igt_rotation_t)prop_value;
+
+			/* Clear any residual framebuffer on first commit. */
+			igt_plane_set_prop_changed(plane, IGT_PLANE_FB_ID);
+			igt_plane_set_prop_changed(plane, IGT_PLANE_CRTC_ID);
 		}
 
 		/*
@@ -1805,9 +1806,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 
 		pipe->n_planes = n_planes;
 
-		for_each_plane_on_pipe(display, i, plane)
-			plane->fb_changed = true;
-
 		pipe->mode_changed = true;
 	}
 
@@ -2070,18 +2068,7 @@ bool igt_pipe_get_property(igt_pipe_t *pipe, const char *name,
 
 static uint32_t igt_plane_get_fb_id(igt_plane_t *plane)
 {
-	if (plane->fb)
-		return plane->fb->fb_id;
-	else
-		return 0;
-}
-
-static uint32_t igt_plane_get_fb_gem_handle(igt_plane_t *plane)
-{
-	if (plane->fb)
-		return plane->fb->gem_handle;
-	else
-		return 0;
+	return plane->values[IGT_PLANE_FB_ID];
 }
 
 #define CHECK_RETURN(r, fail) {	\
@@ -2090,9 +2077,6 @@ static uint32_t igt_plane_get_fb_gem_handle(igt_plane_t *plane)
 	igt_assert_eq(r, 0);	\
 }
 
-
-
-
 /*
  * Add position and fb changes of a plane to the atomic property set
  */
@@ -2101,63 +2085,31 @@ igt_atomic_prepare_plane_commit(igt_plane_t *plane, igt_pipe_t *pipe,
 	drmModeAtomicReq *req)
 {
 	igt_display_t *display = pipe->display;
-	uint32_t fb_id, crtc_id;
+	int i;
 
 	igt_assert(plane->drm_plane);
 
-	/* it's an error to try an unsupported feature */
-	igt_assert(igt_plane_supports_rotation(plane) ||
-			!plane->rotation_changed);
-
-	fb_id = igt_plane_get_fb_id(plane);
-	crtc_id = pipe->crtc_id;
-
 	LOG(display,
 	    "populating plane data: %s.%d, fb %u\n",
 	    kmstest_pipe_name(pipe->pipe),
 	    plane->index,
-	    fb_id);
-
-	if (plane->fence_fd >= 0) {
-		uint64_t fence_fd = (int64_t) plane->fence_fd;
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_IN_FENCE_FD, fence_fd);
-	}
+	    igt_plane_get_fb_id(plane));
 
-	if (plane->fb_changed) {
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_ID, fb_id ? crtc_id : 0);
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_FB_ID, fb_id);
-	}
-
-	if (plane->position_changed || plane->size_changed) {
-		uint32_t src_x = IGT_FIXED(plane->src_x, 0); /* src_x */
-		uint32_t src_y = IGT_FIXED(plane->src_y, 0); /* src_y */
-		uint32_t src_w = IGT_FIXED(plane->src_w, 0); /* src_w */
-		uint32_t src_h = IGT_FIXED(plane->src_h, 0); /* src_h */
-		int32_t crtc_x = plane->crtc_x;
-		int32_t crtc_y = plane->crtc_y;
-		uint32_t crtc_w = plane->crtc_w;
-		uint32_t crtc_h = plane->crtc_h;
+	for (i = 0; i < IGT_NUM_PLANE_PROPS; i++) {
+		if (!igt_plane_is_prop_changed(plane, i))
+			continue;
 
-		LOG(display,
-		"src = (%d, %d) %u x %u "
-		"dst = (%d, %d) %u x %u\n",
-		src_x >> 16, src_y >> 16, src_w >> 16, src_h >> 16,
-		crtc_x, crtc_y, crtc_w, crtc_h);
+		/* it's an error to try an unsupported feature */
+		igt_assert(plane->props[i]);
 
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_X, src_x);
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_Y, src_y);
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_W, src_w);
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_H, src_h);
+		igt_debug("plane %s.%d: Setting property \"%s\" to 0x%"PRIx64"/%"PRIi64"\n",
+			kmstest_pipe_name(pipe->pipe), plane->index, igt_plane_prop_names[i],
+			plane->values[i], plane->values[i]);
 
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_X, crtc_x);
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_Y, crtc_y);
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_W, crtc_w);
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_H, crtc_h);
+		igt_assert_lt(0, drmModeAtomicAddProperty(req, plane->drm_plane->plane_id,
+						  plane->props[i],
+						  plane->values[i]));
 	}
-
-	if (plane->rotation_changed)
-		igt_atomic_populate_plane_req(req, plane,
-			IGT_PLANE_ROTATION, plane->rotation);
 }
 
 
@@ -2183,17 +2135,20 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
 	int32_t crtc_y;
 	uint32_t crtc_w;
 	uint32_t crtc_h;
+	bool setplane =
+		igt_plane_is_prop_changed(plane, IGT_PLANE_FB_ID) ||
+		plane->changed & IGT_PLANE_COORD_CHANGED_MASK;
 
 	igt_assert(plane->drm_plane);
 
 	/* it's an error to try an unsupported feature */
 	igt_assert(igt_plane_supports_rotation(plane) ||
-		   !plane->rotation_changed);
+		   !igt_plane_is_prop_changed(plane, IGT_PLANE_ROTATION));
 
 	fb_id = igt_plane_get_fb_id(plane);
 	crtc_id = pipe->crtc_id;
 
-	if ((plane->fb_changed || plane->size_changed) && fb_id == 0) {
+	if (setplane && fb_id == 0) {
 		LOG(display,
 		    "SetPlane pipe %s, plane %d, disabling\n",
 		    kmstest_pipe_name(pipe->pipe),
@@ -2212,16 +2167,15 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
 				      IGT_FIXED(0,0) /* src_h */);
 
 		CHECK_RETURN(ret, fail_on_error);
-	} else if (plane->fb_changed || plane->position_changed ||
-		plane->size_changed) {
-		src_x = IGT_FIXED(plane->src_x,0); /* src_x */
-		src_y = IGT_FIXED(plane->src_y,0); /* src_y */
-		src_w = IGT_FIXED(plane->src_w,0); /* src_w */
-		src_h = IGT_FIXED(plane->src_h,0); /* src_h */
-		crtc_x = plane->crtc_x;
-		crtc_y = plane->crtc_y;
-		crtc_w = plane->crtc_w;
-		crtc_h = plane->crtc_h;
+	} else if (setplane) {
+		src_x = plane->values[IGT_PLANE_SRC_X];
+		src_y = plane->values[IGT_PLANE_SRC_Y];
+		src_w = plane->values[IGT_PLANE_SRC_W];
+		src_h = plane->values[IGT_PLANE_SRC_H];
+		crtc_x = plane->values[IGT_PLANE_CRTC_X];
+		crtc_y = plane->values[IGT_PLANE_CRTC_Y];
+		crtc_w = plane->values[IGT_PLANE_CRTC_W];
+		crtc_h = plane->values[IGT_PLANE_CRTC_H];
 
 		LOG(display,
 		    "SetPlane %s.%d, fb %u, src = (%d, %d) "
@@ -2245,9 +2199,10 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
 		CHECK_RETURN(ret, fail_on_error);
 	}
 
-	if (plane->rotation_changed) {
-		ret = igt_plane_set_property(plane, plane->rotation_property,
-				       plane->rotation);
+	if (igt_plane_is_prop_changed(plane, IGT_PLANE_ROTATION)) {
+		ret = igt_plane_set_property(plane,
+					     plane->props[IGT_PLANE_ROTATION],
+					     plane->values[IGT_PLANE_ROTATION]);
 
 		CHECK_RETURN(ret, fail_on_error);
 	}
@@ -2269,35 +2224,30 @@ static int igt_cursor_commit_legacy(igt_plane_t *cursor,
 	uint32_t crtc_id = pipe->crtc_id;
 	int ret;
 
-	if (cursor->fb_changed) {
-		uint32_t gem_handle = igt_plane_get_fb_gem_handle(cursor);
-
-		if (gem_handle) {
+	if (igt_plane_is_prop_changed(cursor, IGT_PLANE_FB_ID)) {
+		if (cursor->gem_handle)
 			LOG(display,
 			    "SetCursor pipe %s, fb %u %dx%d\n",
 			    kmstest_pipe_name(pipe->pipe),
-			    gem_handle,
-			    cursor->crtc_w, cursor->crtc_h);
-
-			ret = drmModeSetCursor(display->drm_fd, crtc_id,
-					       gem_handle,
-					       cursor->crtc_w,
-					       cursor->crtc_h);
-		} else {
+			    cursor->gem_handle,
+			    (unsigned)cursor->values[IGT_PLANE_CRTC_W],
+			    (unsigned)cursor->values[IGT_PLANE_CRTC_H]);
+		else
 			LOG(display,
 			    "SetCursor pipe %s, disabling\n",
 			    kmstest_pipe_name(pipe->pipe));
 
-			ret = drmModeSetCursor(display->drm_fd, crtc_id,
-					       0, 0, 0);
-		}
-
+		ret = drmModeSetCursor(display->drm_fd, crtc_id,
+				       cursor->gem_handle,
+				       cursor->values[IGT_PLANE_CRTC_W],
+				       cursor->values[IGT_PLANE_CRTC_H]);
 		CHECK_RETURN(ret, fail_on_error);
 	}
 
-	if (cursor->position_changed) {
-		int x = cursor->crtc_x;
-		int y = cursor->crtc_y;
+	if (igt_plane_is_prop_changed(cursor, IGT_PLANE_CRTC_X) ||
+	    igt_plane_is_prop_changed(cursor, IGT_PLANE_CRTC_Y)) {
+		int x = cursor->values[IGT_PLANE_CRTC_X];
+		int y = cursor->values[IGT_PLANE_CRTC_Y];
 
 		LOG(display,
 		    "MoveCursor pipe %s, (%d, %d)\n",
@@ -2326,13 +2276,14 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
 	int ret;
 
 	/* Primary planes can't be windowed when using a legacy commit */
-	igt_assert((primary->crtc_x == 0 && primary->crtc_y == 0));
+	igt_assert((primary->values[IGT_PLANE_CRTC_X] == 0 && primary->values[IGT_PLANE_CRTC_Y] == 0));
 
 	/* nor rotated */
-	igt_assert(!primary->rotation_changed);
+	igt_assert(!igt_plane_is_prop_changed(primary, IGT_PLANE_ROTATION));
 
-	if (!primary->fb_changed && !primary->position_changed &&
-	    !primary->size_changed && !primary->pipe->mode_changed)
+	if (!igt_plane_is_prop_changed(primary, IGT_PLANE_FB_ID) &&
+	    !(primary->changed & IGT_PLANE_COORD_CHANGED_MASK) &&
+	    !primary->pipe->mode_changed)
 		return 0;
 
 	crtc_id = pipe->crtc_id;
@@ -2343,19 +2294,22 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
 		mode = NULL;
 
 	if (fb_id) {
+		uint32_t src_x = primary->values[IGT_PLANE_SRC_X] >> 16;
+		uint32_t src_y = primary->values[IGT_PLANE_SRC_Y] >> 16;
+
 		LOG(display,
 		    "%s: SetCrtc pipe %s, fb %u, src (%d, %d), "
 		    "mode %dx%d\n",
 		    igt_output_name(output),
 		    kmstest_pipe_name(pipe->pipe),
 		    fb_id,
-		    primary->src_x, primary->src_y,
+		    src_x, src_y,
 		    mode->hdisplay, mode->vdisplay);
 
 		ret = drmModeSetCrtc(display->drm_fd,
 				     crtc_id,
 				     fb_id,
-				     primary->src_x, primary->src_y,
+				     src_x, src_y,
 				     &output->id,
 				     1,
 				     mode);
@@ -2608,18 +2562,27 @@ display_commit_changed(igt_display_t *display, enum igt_commit_style s)
 		}
 
 		for_each_plane_on_pipe(display, pipe, plane) {
-			plane->fb_changed = false;
-			plane->position_changed = false;
-			plane->size_changed = false;
+			if (s == COMMIT_ATOMIC) {
+				int fd;
+				plane->changed = 0;
 
-			if (s != COMMIT_LEGACY ||
-			    !(plane->type == DRM_PLANE_TYPE_PRIMARY ||
-			      plane->type == DRM_PLANE_TYPE_CURSOR))
-				plane->rotation_changed = false;
+				fd = plane->values[IGT_PLANE_IN_FENCE_FD];
+				if (fd != -1)
+					close(fd);
 
-			if (s == COMMIT_ATOMIC)
 				/* reset fence_fd to prevent it from being set for the next commit */
-				igt_plane_set_fence_fd(plane, -1);
+				plane->values[IGT_PLANE_IN_FENCE_FD] = -1;
+			} else {
+				plane->changed &= ~IGT_PLANE_COORD_CHANGED_MASK;
+
+				igt_plane_clear_prop_changed(plane, IGT_PLANE_CRTC_ID);
+				igt_plane_clear_prop_changed(plane, IGT_PLANE_FB_ID);
+
+				if (s != COMMIT_LEGACY ||
+				    !(plane->type == DRM_PLANE_TYPE_PRIMARY ||
+				      plane->type == DRM_PLANE_TYPE_CURSOR))
+					igt_plane_clear_prop_changed(plane, IGT_PLANE_ROTATION);
+			}
 		}
 	}
 
@@ -2913,30 +2876,31 @@ void igt_plane_set_fb(igt_plane_t *plane, struct igt_fb *fb)
 	LOG(display, "%s.%d: plane_set_fb(%d)\n", kmstest_pipe_name(pipe->pipe),
 	    plane->index, fb ? fb->fb_id : 0);
 
-	plane->fb = fb;
+	igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_ID, fb ? pipe->crtc_id : 0);
+	igt_plane_set_prop_value(plane, IGT_PLANE_FB_ID, fb ? fb->fb_id : 0);
+
+	if (plane->type == DRM_PLANE_TYPE_CURSOR && fb)
+		plane->gem_handle = fb->gem_handle;
+	else
+		plane->gem_handle = 0;
+
 	/* hack to keep tests working that don't call igt_plane_set_size() */
 	if (fb) {
 		/* set default plane size as fb size */
-		plane->crtc_w = fb->width;
-		plane->crtc_h = fb->height;
+		igt_plane_set_position(plane, 0, 0);
+		igt_plane_set_size(plane, fb->width, fb->height);
 
 		/* set default src pos/size as fb size */
-		plane->src_x = 0;
-		plane->src_y = 0;
-		plane->src_w = fb->width;
-		plane->src_h = fb->height;
+		igt_fb_set_position(fb, plane, 0, 0);
+		igt_fb_set_size(fb, plane, fb->width, fb->height);
 	} else {
-		plane->src_x = 0;
-		plane->src_y = 0;
-		plane->src_w = 0;
-		plane->src_h = 0;
+		igt_plane_set_position(plane, 0, 0);
+		igt_plane_set_size(plane, 0, 0);
 
-		plane->crtc_w = 0;
-		plane->crtc_h = 0;
+		/* set default src pos/size as fb size */
+		igt_fb_set_position(fb, plane, 0, 0);
+		igt_fb_set_size(fb, plane, 0, 0);
 	}
-
-	plane->fb_changed = true;
-	plane->size_changed = true;
 }
 
 /**
@@ -2949,12 +2913,19 @@ void igt_plane_set_fb(igt_plane_t *plane, struct igt_fb *fb)
  */
 void igt_plane_set_fence_fd(igt_plane_t *plane, int fence_fd)
 {
-	close(plane->fence_fd);
+	int64_t fd;
 
-	if (fcntl(fence_fd, F_GETFD) != -1)
-		plane->fence_fd = dup(fence_fd);
-	else
-		plane->fence_fd = -1;
+	fd = plane->values[IGT_PLANE_IN_FENCE_FD];
+	if (fd != -1)
+		close(fd);
+
+	if (fence_fd != -1) {
+		fd = dup(fence_fd);
+		igt_fail_on(fd == -1);
+	} else
+		fd = -1;
+
+	igt_plane_set_prop_value(plane, IGT_PLANE_IN_FENCE_FD, fd);
 }
 
 void igt_plane_set_position(igt_plane_t *plane, int x, int y)
@@ -2965,10 +2936,8 @@ void igt_plane_set_position(igt_plane_t *plane, int x, int y)
 	LOG(display, "%s.%d: plane_set_position(%d,%d)\n",
 	    kmstest_pipe_name(pipe->pipe), plane->index, x, y);
 
-	plane->crtc_x = x;
-	plane->crtc_y = y;
-
-	plane->position_changed = true;
+	igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_X, x);
+	igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_Y, y);
 }
 
 /**
@@ -2989,10 +2958,8 @@ void igt_plane_set_size(igt_plane_t *plane, int w, int h)
 	LOG(display, "%s.%d: plane_set_size (%dx%d)\n",
 	    kmstest_pipe_name(pipe->pipe), plane->index, w, h);
 
-	plane->crtc_w = w;
-	plane->crtc_h = h;
-
-	plane->size_changed = true;
+	igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_W, w);
+	igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_H, h);
 }
 
 /**
@@ -3014,10 +2981,8 @@ void igt_fb_set_position(struct igt_fb *fb, igt_plane_t *plane,
 	LOG(display, "%s.%d: fb_set_position(%d,%d)\n",
 	    kmstest_pipe_name(pipe->pipe), plane->index, x, y);
 
-	plane->src_x = x;
-	plane->src_y = y;
-
-	plane->fb_changed = true;
+	igt_plane_set_prop_value(plane, IGT_PLANE_SRC_X, IGT_FIXED(x, 0));
+	igt_plane_set_prop_value(plane, IGT_PLANE_SRC_Y, IGT_FIXED(y, 0));
 }
 
 /**
@@ -3040,10 +3005,8 @@ void igt_fb_set_size(struct igt_fb *fb, igt_plane_t *plane,
 	LOG(display, "%s.%d: fb_set_size(%dx%d)\n",
 	    kmstest_pipe_name(pipe->pipe), plane->index, w, h);
 
-	plane->src_w = w;
-	plane->src_h = h;
-
-	plane->fb_changed = true;
+	igt_plane_set_prop_value(plane, IGT_PLANE_SRC_W, IGT_FIXED(w, 0));
+	igt_plane_set_prop_value(plane, IGT_PLANE_SRC_H, IGT_FIXED(h, 0));
 }
 
 static const char *rotation_name(igt_rotation_t rotation)
@@ -3071,9 +3034,7 @@ void igt_plane_set_rotation(igt_plane_t *plane, igt_rotation_t rotation)
 	    kmstest_pipe_name(pipe->pipe),
 	    plane->index, rotation_name(rotation));
 
-	plane->rotation = rotation;
-
-	plane->rotation_changed = true;
+	igt_plane_set_prop_value(plane, IGT_PLANE_ROTATION, rotation);
 }
 
 /**
lib/igt_kms.h +24 -35

90 lines not on this page · raw message

tests/kms_atomic_interruptible.c +6 -6
index 2d19fe967809..5570854390ea 100644
@@ -161,12 +161,12 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
 					/* connector: 1 prop */
 					output->props[IGT_CONNECTOR_CRTC_ID],
 					/* plane: remainder props */
-					plane->atomic_props_plane[IGT_PLANE_CRTC_ID],
-					plane->atomic_props_plane[IGT_PLANE_FB_ID],
-					plane->atomic_props_plane[IGT_PLANE_SRC_W],
-					plane->atomic_props_plane[IGT_PLANE_SRC_H],
-					plane->atomic_props_plane[IGT_PLANE_CRTC_W],
-					plane->atomic_props_plane[IGT_PLANE_CRTC_H]
+					plane->props[IGT_PLANE_CRTC_ID],
+					plane->props[IGT_PLANE_FB_ID],
+					plane->props[IGT_PLANE_SRC_W],
+					plane->props[IGT_PLANE_SRC_H],
+					plane->props[IGT_PLANE_CRTC_W],
+					plane->props[IGT_PLANE_CRTC_H]
 				};
 				uint64_t prop_vals[] = {
 					/* crtc */
tests/kms_rotation_crc.c +2 -2
index 4d2ef1c184f0..4932a0d44410 100644
@@ -122,11 +122,11 @@ static void prepare_crtc(data_t *data, igt_output_t *output, enum pipe pipe,
 	igt_plane_set_fb(primary, &data->fb_modeset);
 
 	if (commit < COMMIT_ATOMIC) {
-		primary->rotation_changed = false;
+		igt_plane_clear_prop_changed(primary, IGT_PLANE_ROTATION);
 		igt_display_commit(display);
 
 		if (plane->type == DRM_PLANE_TYPE_PRIMARY)
-			primary->rotation_changed = true;
+			igt_plane_set_prop_changed(primary, IGT_PLANE_ROTATION);
 	}
 
 	igt_plane_set_fb(plane, NULL);
Signature · 6 lines
2.14.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#7 lore raw

PATCH v2 5/8 lib/igt_kms: Rework plane properties to be more atomic, v4.

In the future I want to allow tests to commit more properties, but for this to work I have to fix all properties to work better with atomic commit. Instead of special casing each property make a bitmask for all property changed flags, and try to commit all properties.

Changes since v1:
- Remove special dumping of src and crtc coordinates.
- Dump all modified coordinates.
Changes since v2:
- Move igt_plane_set_prop_changed up slightly.
Changes since v3:
- Fix wrong ordering of set_position in kms_plane_lowres causing a test failure.

---
 lib/igt_kms.c                    | 293 +++++++++++++++++----------------------
 lib/igt_kms.h                    |  59 ++++----
 tests/kms_atomic_interruptible.c |  12 +-
 tests/kms_plane_lowres.c         |   2 +-
 tests/kms_rotation_crc.c         |   4 +-
 5 files changed, 160 insertions(+), 210 deletions(-)
lib/igt_kms.c +127 -166
index 07d2074c2b1a..6e0052ebe7a7 100644
@@ -192,11 +192,11 @@ const char *igt_connector_prop_names[IGT_NUM_CONNECTOR_PROPS] = {
 
 /*
  * Retrieve all the properies specified in props_name and store them into
- * plane->atomic_props_plane.
+ * plane->props.
  */
 static void
-igt_atomic_fill_plane_props(igt_display_t *display, igt_plane_t *plane,
-			int num_props, const char **prop_names)
+igt_fill_plane_props(igt_display_t *display, igt_plane_t *plane,
+		     int num_props, const char **prop_names)
 {
 	drmModeObjectPropertiesPtr props;
 	int i, j, fd;
@@ -214,7 +214,7 @@ igt_atomic_fill_plane_props(igt_display_t *display, igt_plane_t *plane,
 			if (strcmp(prop->name, prop_names[j]) != 0)
 				continue;
 
-			plane->atomic_props_plane[j] = props->props[i];
+			plane->props[j] = props->props[i];
 			break;
 		}
 
@@ -1659,7 +1659,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 	drmModeRes *resources;
 	drmModePlaneRes *plane_resources;
 	int i;
-	int is_atomic = 0;
 
 	memset(display, 0, sizeof(igt_display_t));
 
@@ -1679,7 +1678,9 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 	igt_assert_f(display->pipes, "Failed to allocate memory for %d pipes\n", display->n_pipes);
 
 	drmSetClientCap(drm_fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1);
-	is_atomic = drmSetClientCap(drm_fd, DRM_CLIENT_CAP_ATOMIC, 1);
+	if (drmSetClientCap(drm_fd, DRM_CLIENT_CAP_ATOMIC, 1) == 0)
+		display->is_atomic = 1;
+
 	plane_resources = drmModeGetPlaneResources(display->drm_fd);
 	igt_assert(plane_resources);
 
@@ -1776,19 +1777,19 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 			plane->type = type;
 			plane->pipe = pipe;
 			plane->drm_plane = drm_plane;
-			plane->fence_fd = -1;
+			plane->values[IGT_PLANE_IN_FENCE_FD] = ~0ULL;
 
-			if (is_atomic == 0) {
-				display->is_atomic = 1;
-				igt_atomic_fill_plane_props(display, plane, IGT_NUM_PLANE_PROPS, igt_plane_prop_names);
-			}
+			igt_fill_plane_props(display, plane, IGT_NUM_PLANE_PROPS, igt_plane_prop_names);
 
 			get_plane_property(display->drm_fd, drm_plane->plane_id,
 					   "rotation",
-					   &plane->rotation_property,
-					   &prop_value,
+					   &plane->props[IGT_PLANE_ROTATION],
+					   &plane->values[IGT_PLANE_ROTATION],
 					   NULL);
-			plane->rotation = (igt_rotation_t)prop_value;
+
+			/* Clear any residual framebuffer on first commit. */
+			igt_plane_set_prop_changed(plane, IGT_PLANE_FB_ID);
+			igt_plane_set_prop_changed(plane, IGT_PLANE_CRTC_ID);
 		}
 
 		/*
@@ -1805,9 +1806,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 
 		pipe->n_planes = n_planes;
 
-		for_each_plane_on_pipe(display, i, plane)
-			plane->fb_changed = true;
-
 		pipe->mode_changed = true;
 	}
 
@@ -2070,18 +2068,7 @@ bool igt_pipe_get_property(igt_pipe_t *pipe, const char *name,
 
 static uint32_t igt_plane_get_fb_id(igt_plane_t *plane)
 {
-	if (plane->fb)
-		return plane->fb->fb_id;
-	else
-		return 0;
-}
-
-static uint32_t igt_plane_get_fb_gem_handle(igt_plane_t *plane)
-{
-	if (plane->fb)
-		return plane->fb->gem_handle;
-	else
-		return 0;
+	return plane->values[IGT_PLANE_FB_ID];
 }
 
 #define CHECK_RETURN(r, fail) {	\
@@ -2090,9 +2077,6 @@ static uint32_t igt_plane_get_fb_gem_handle(igt_plane_t *plane)
 	igt_assert_eq(r, 0);	\
 }
 
-
-
-
 /*
  * Add position and fb changes of a plane to the atomic property set
  */
@@ -2101,63 +2085,31 @@ igt_atomic_prepare_plane_commit(igt_plane_t *plane, igt_pipe_t *pipe,
 	drmModeAtomicReq *req)
 {
 	igt_display_t *display = pipe->display;
-	uint32_t fb_id, crtc_id;
+	int i;
 
 	igt_assert(plane->drm_plane);
 
-	/* it's an error to try an unsupported feature */
-	igt_assert(igt_plane_supports_rotation(plane) ||
-			!plane->rotation_changed);
-
-	fb_id = igt_plane_get_fb_id(plane);
-	crtc_id = pipe->crtc_id;
-
 	LOG(display,
 	    "populating plane data: %s.%d, fb %u\n",
 	    kmstest_pipe_name(pipe->pipe),
 	    plane->index,
-	    fb_id);
-
-	if (plane->fence_fd >= 0) {
-		uint64_t fence_fd = (int64_t) plane->fence_fd;
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_IN_FENCE_FD, fence_fd);
-	}
+	    igt_plane_get_fb_id(plane));
 
-	if (plane->fb_changed) {
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_ID, fb_id ? crtc_id : 0);
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_FB_ID, fb_id);
-	}
-
-	if (plane->position_changed || plane->size_changed) {
-		uint32_t src_x = IGT_FIXED(plane->src_x, 0); /* src_x */
-		uint32_t src_y = IGT_FIXED(plane->src_y, 0); /* src_y */
-		uint32_t src_w = IGT_FIXED(plane->src_w, 0); /* src_w */
-		uint32_t src_h = IGT_FIXED(plane->src_h, 0); /* src_h */
-		int32_t crtc_x = plane->crtc_x;
-		int32_t crtc_y = plane->crtc_y;
-		uint32_t crtc_w = plane->crtc_w;
-		uint32_t crtc_h = plane->crtc_h;
+	for (i = 0; i < IGT_NUM_PLANE_PROPS; i++) {
+		if (!igt_plane_is_prop_changed(plane, i))
+			continue;
 
-		LOG(display,
-		"src = (%d, %d) %u x %u "
-		"dst = (%d, %d) %u x %u\n",
-		src_x >> 16, src_y >> 16, src_w >> 16, src_h >> 16,
-		crtc_x, crtc_y, crtc_w, crtc_h);
+		/* it's an error to try an unsupported feature */
+		igt_assert(plane->props[i]);
 
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_X, src_x);
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_Y, src_y);
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_W, src_w);
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_SRC_H, src_h);
+		igt_debug("plane %s.%d: Setting property \"%s\" to 0x%"PRIx64"/%"PRIi64"\n",
+			kmstest_pipe_name(pipe->pipe), plane->index, igt_plane_prop_names[i],
+			plane->values[i], plane->values[i]);
 
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_X, crtc_x);
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_Y, crtc_y);
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_W, crtc_w);
-		igt_atomic_populate_plane_req(req, plane, IGT_PLANE_CRTC_H, crtc_h);
+		igt_assert_lt(0, drmModeAtomicAddProperty(req, plane->drm_plane->plane_id,
+						  plane->props[i],
+						  plane->values[i]));
 	}
-
-	if (plane->rotation_changed)
-		igt_atomic_populate_plane_req(req, plane,
-			IGT_PLANE_ROTATION, plane->rotation);
 }
 
 
@@ -2183,17 +2135,20 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
 	int32_t crtc_y;
 	uint32_t crtc_w;
 	uint32_t crtc_h;
+	bool setplane =
+		igt_plane_is_prop_changed(plane, IGT_PLANE_FB_ID) ||
+		plane->changed & IGT_PLANE_COORD_CHANGED_MASK;
 
 	igt_assert(plane->drm_plane);
 
 	/* it's an error to try an unsupported feature */
 	igt_assert(igt_plane_supports_rotation(plane) ||
-		   !plane->rotation_changed);
+		   !igt_plane_is_prop_changed(plane, IGT_PLANE_ROTATION));
 
 	fb_id = igt_plane_get_fb_id(plane);
 	crtc_id = pipe->crtc_id;
 
-	if ((plane->fb_changed || plane->size_changed) && fb_id == 0) {
+	if (setplane && fb_id == 0) {
 		LOG(display,
 		    "SetPlane pipe %s, plane %d, disabling\n",
 		    kmstest_pipe_name(pipe->pipe),
@@ -2212,16 +2167,15 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
 				      IGT_FIXED(0,0) /* src_h */);
 
 		CHECK_RETURN(ret, fail_on_error);
-	} else if (plane->fb_changed || plane->position_changed ||
-		plane->size_changed) {
-		src_x = IGT_FIXED(plane->src_x,0); /* src_x */
-		src_y = IGT_FIXED(plane->src_y,0); /* src_y */
-		src_w = IGT_FIXED(plane->src_w,0); /* src_w */
-		src_h = IGT_FIXED(plane->src_h,0); /* src_h */
-		crtc_x = plane->crtc_x;
-		crtc_y = plane->crtc_y;
-		crtc_w = plane->crtc_w;
-		crtc_h = plane->crtc_h;
+	} else if (setplane) {
+		src_x = plane->values[IGT_PLANE_SRC_X];
+		src_y = plane->values[IGT_PLANE_SRC_Y];
+		src_w = plane->values[IGT_PLANE_SRC_W];
+		src_h = plane->values[IGT_PLANE_SRC_H];
+		crtc_x = plane->values[IGT_PLANE_CRTC_X];
+		crtc_y = plane->values[IGT_PLANE_CRTC_Y];
+		crtc_w = plane->values[IGT_PLANE_CRTC_W];
+		crtc_h = plane->values[IGT_PLANE_CRTC_H];
 
 		LOG(display,
 		    "SetPlane %s.%d, fb %u, src = (%d, %d) "
@@ -2245,9 +2199,10 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
 		CHECK_RETURN(ret, fail_on_error);
 	}
 
-	if (plane->rotation_changed) {
-		ret = igt_plane_set_property(plane, plane->rotation_property,
-				       plane->rotation);
+	if (igt_plane_is_prop_changed(plane, IGT_PLANE_ROTATION)) {
+		ret = igt_plane_set_property(plane,
+					     plane->props[IGT_PLANE_ROTATION],
+					     plane->values[IGT_PLANE_ROTATION]);
 
 		CHECK_RETURN(ret, fail_on_error);
 	}
@@ -2269,35 +2224,30 @@ static int igt_cursor_commit_legacy(igt_plane_t *cursor,
 	uint32_t crtc_id = pipe->crtc_id;
 	int ret;
 
-	if (cursor->fb_changed) {
-		uint32_t gem_handle = igt_plane_get_fb_gem_handle(cursor);
-
-		if (gem_handle) {
+	if (igt_plane_is_prop_changed(cursor, IGT_PLANE_FB_ID)) {
+		if (cursor->gem_handle)
 			LOG(display,
 			    "SetCursor pipe %s, fb %u %dx%d\n",
 			    kmstest_pipe_name(pipe->pipe),
-			    gem_handle,
-			    cursor->crtc_w, cursor->crtc_h);
-
-			ret = drmModeSetCursor(display->drm_fd, crtc_id,
-					       gem_handle,
-					       cursor->crtc_w,
-					       cursor->crtc_h);
-		} else {
+			    cursor->gem_handle,
+			    (unsigned)cursor->values[IGT_PLANE_CRTC_W],
+			    (unsigned)cursor->values[IGT_PLANE_CRTC_H]);
+		else
 			LOG(display,
 			    "SetCursor pipe %s, disabling\n",
 			    kmstest_pipe_name(pipe->pipe));
 
-			ret = drmModeSetCursor(display->drm_fd, crtc_id,
-					       0, 0, 0);
-		}
-
+		ret = drmModeSetCursor(display->drm_fd, crtc_id,
+				       cursor->gem_handle,
+				       cursor->values[IGT_PLANE_CRTC_W],
+				       cursor->values[IGT_PLANE_CRTC_H]);
 		CHECK_RETURN(ret, fail_on_error);
 	}
 
-	if (cursor->position_changed) {
-		int x = cursor->crtc_x;
-		int y = cursor->crtc_y;
+	if (igt_plane_is_prop_changed(cursor, IGT_PLANE_CRTC_X) ||
+	    igt_plane_is_prop_changed(cursor, IGT_PLANE_CRTC_Y)) {
+		int x = cursor->values[IGT_PLANE_CRTC_X];
+		int y = cursor->values[IGT_PLANE_CRTC_Y];
 
 		LOG(display,
 		    "MoveCursor pipe %s, (%d, %d)\n",
@@ -2326,13 +2276,14 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
 	int ret;
 
 	/* Primary planes can't be windowed when using a legacy commit */
-	igt_assert((primary->crtc_x == 0 && primary->crtc_y == 0));
+	igt_assert((primary->values[IGT_PLANE_CRTC_X] == 0 && primary->values[IGT_PLANE_CRTC_Y] == 0));
 
 	/* nor rotated */
-	igt_assert(!primary->rotation_changed);
+	igt_assert(!igt_plane_is_prop_changed(primary, IGT_PLANE_ROTATION));
 
-	if (!primary->fb_changed && !primary->position_changed &&
-	    !primary->size_changed && !primary->pipe->mode_changed)
+	if (!igt_plane_is_prop_changed(primary, IGT_PLANE_FB_ID) &&
+	    !(primary->changed & IGT_PLANE_COORD_CHANGED_MASK) &&
+	    !primary->pipe->mode_changed)
 		return 0;
 
 	crtc_id = pipe->crtc_id;
@@ -2343,19 +2294,22 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
 		mode = NULL;
 
 	if (fb_id) {
+		uint32_t src_x = primary->values[IGT_PLANE_SRC_X] >> 16;
+		uint32_t src_y = primary->values[IGT_PLANE_SRC_Y] >> 16;
+
 		LOG(display,
 		    "%s: SetCrtc pipe %s, fb %u, src (%d, %d), "
 		    "mode %dx%d\n",
 		    igt_output_name(output),
 		    kmstest_pipe_name(pipe->pipe),
 		    fb_id,
-		    primary->src_x, primary->src_y,
+		    src_x, src_y,
 		    mode->hdisplay, mode->vdisplay);
 
 		ret = drmModeSetCrtc(display->drm_fd,
 				     crtc_id,
 				     fb_id,
-				     primary->src_x, primary->src_y,
+				     src_x, src_y,
 				     &output->id,
 				     1,
 				     mode);
@@ -2608,18 +2562,27 @@ display_commit_changed(igt_display_t *display, enum igt_commit_style s)
 		}
 
 		for_each_plane_on_pipe(display, pipe, plane) {
-			plane->fb_changed = false;
-			plane->position_changed = false;
-			plane->size_changed = false;
+			if (s == COMMIT_ATOMIC) {
+				int fd;
+				plane->changed = 0;
 
-			if (s != COMMIT_LEGACY ||
-			    !(plane->type == DRM_PLANE_TYPE_PRIMARY ||
-			      plane->type == DRM_PLANE_TYPE_CURSOR))
-				plane->rotation_changed = false;
+				fd = plane->values[IGT_PLANE_IN_FENCE_FD];
+				if (fd != -1)
+					close(fd);
 
-			if (s == COMMIT_ATOMIC)
 				/* reset fence_fd to prevent it from being set for the next commit */
-				igt_plane_set_fence_fd(plane, -1);
+				plane->values[IGT_PLANE_IN_FENCE_FD] = -1;
+			} else {
+				plane->changed &= ~IGT_PLANE_COORD_CHANGED_MASK;
+
+				igt_plane_clear_prop_changed(plane, IGT_PLANE_CRTC_ID);
+				igt_plane_clear_prop_changed(plane, IGT_PLANE_FB_ID);
+
+				if (s != COMMIT_LEGACY ||
+				    !(plane->type == DRM_PLANE_TYPE_PRIMARY ||
+				      plane->type == DRM_PLANE_TYPE_CURSOR))
+					igt_plane_clear_prop_changed(plane, IGT_PLANE_ROTATION);
+			}
 		}
 	}
 
@@ -2913,30 +2876,31 @@ void igt_plane_set_fb(igt_plane_t *plane, struct igt_fb *fb)
 	LOG(display, "%s.%d: plane_set_fb(%d)\n", kmstest_pipe_name(pipe->pipe),
 	    plane->index, fb ? fb->fb_id : 0);
 
-	plane->fb = fb;
+	igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_ID, fb ? pipe->crtc_id : 0);
+	igt_plane_set_prop_value(plane, IGT_PLANE_FB_ID, fb ? fb->fb_id : 0);
+
+	if (plane->type == DRM_PLANE_TYPE_CURSOR && fb)
+		plane->gem_handle = fb->gem_handle;
+	else
+		plane->gem_handle = 0;
+
 	/* hack to keep tests working that don't call igt_plane_set_size() */
 	if (fb) {
 		/* set default plane size as fb size */
-		plane->crtc_w = fb->width;
-		plane->crtc_h = fb->height;
+		igt_plane_set_position(plane, 0, 0);
+		igt_plane_set_size(plane, fb->width, fb->height);
 
 		/* set default src pos/size as fb size */
-		plane->src_x = 0;
-		plane->src_y = 0;
-		plane->src_w = fb->width;
-		plane->src_h = fb->height;
+		igt_fb_set_position(fb, plane, 0, 0);
+		igt_fb_set_size(fb, plane, fb->width, fb->height);
 	} else {
-		plane->src_x = 0;
-		plane->src_y = 0;
-		plane->src_w = 0;
-		plane->src_h = 0;
+		igt_plane_set_position(plane, 0, 0);
+		igt_plane_set_size(plane, 0, 0);
 
-		plane->crtc_w = 0;
-		plane->crtc_h = 0;
+		/* set default src pos/size as fb size */
+		igt_fb_set_position(fb, plane, 0, 0);
+		igt_fb_set_size(fb, plane, 0, 0);
 	}
-
-	plane->fb_changed = true;
-	plane->size_changed = true;
 }
 
 /**
@@ -2949,12 +2913,19 @@ void igt_plane_set_fb(igt_plane_t *plane, struct igt_fb *fb)
  */
 void igt_plane_set_fence_fd(igt_plane_t *plane, int fence_fd)
 {
-	close(plane->fence_fd);
+	int64_t fd;
 
-	if (fcntl(fence_fd, F_GETFD) != -1)
-		plane->fence_fd = dup(fence_fd);
-	else
-		plane->fence_fd = -1;
+	fd = plane->values[IGT_PLANE_IN_FENCE_FD];
+	if (fd != -1)
+		close(fd);
+
+	if (fence_fd != -1) {
+		fd = dup(fence_fd);
+		igt_fail_on(fd == -1);
+	} else
+		fd = -1;
+
+	igt_plane_set_prop_value(plane, IGT_PLANE_IN_FENCE_FD, fd);
 }
 
 void igt_plane_set_position(igt_plane_t *plane, int x, int y)
@@ -2965,10 +2936,8 @@ void igt_plane_set_position(igt_plane_t *plane, int x, int y)
 	LOG(display, "%s.%d: plane_set_position(%d,%d)\n",
 	    kmstest_pipe_name(pipe->pipe), plane->index, x, y);
 
-	plane->crtc_x = x;
-	plane->crtc_y = y;
-
-	plane->position_changed = true;
+	igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_X, x);
+	igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_Y, y);
 }
 
 /**
@@ -2989,10 +2958,8 @@ void igt_plane_set_size(igt_plane_t *plane, int w, int h)
 	LOG(display, "%s.%d: plane_set_size (%dx%d)\n",
 	    kmstest_pipe_name(pipe->pipe), plane->index, w, h);
 
-	plane->crtc_w = w;
-	plane->crtc_h = h;
-
-	plane->size_changed = true;
+	igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_W, w);
+	igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_H, h);
 }
 
 /**
@@ -3014,10 +2981,8 @@ void igt_fb_set_position(struct igt_fb *fb, igt_plane_t *plane,
 	LOG(display, "%s.%d: fb_set_position(%d,%d)\n",
 	    kmstest_pipe_name(pipe->pipe), plane->index, x, y);
 
-	plane->src_x = x;
-	plane->src_y = y;
-
-	plane->fb_changed = true;
+	igt_plane_set_prop_value(plane, IGT_PLANE_SRC_X, IGT_FIXED(x, 0));
+	igt_plane_set_prop_value(plane, IGT_PLANE_SRC_Y, IGT_FIXED(y, 0));
 }
 
 /**
@@ -3040,10 +3005,8 @@ void igt_fb_set_size(struct igt_fb *fb, igt_plane_t *plane,
 	LOG(display, "%s.%d: fb_set_size(%dx%d)\n",
 	    kmstest_pipe_name(pipe->pipe), plane->index, w, h);
 
-	plane->src_w = w;
-	plane->src_h = h;
-
-	plane->fb_changed = true;
+	igt_plane_set_prop_value(plane, IGT_PLANE_SRC_W, IGT_FIXED(w, 0));
+	igt_plane_set_prop_value(plane, IGT_PLANE_SRC_H, IGT_FIXED(h, 0));
 }
 
 static const char *rotation_name(igt_rotation_t rotation)
@@ -3071,9 +3034,7 @@ void igt_plane_set_rotation(igt_plane_t *plane, igt_rotation_t rotation)
 	    kmstest_pipe_name(pipe->pipe),
 	    plane->index, rotation_name(rotation));
 
-	plane->rotation = rotation;
-
-	plane->rotation_changed = true;
+	igt_plane_set_prop_value(plane, IGT_PLANE_ROTATION, rotation);
 }
 
 /**
lib/igt_kms.h +24 -35

90 lines not on this page · raw message

tests/kms_atomic_interruptible.c +6 -6
index 2d19fe967809..5570854390ea 100644
@@ -161,12 +161,12 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
 					/* connector: 1 prop */
 					output->props[IGT_CONNECTOR_CRTC_ID],
 					/* plane: remainder props */
-					plane->atomic_props_plane[IGT_PLANE_CRTC_ID],
-					plane->atomic_props_plane[IGT_PLANE_FB_ID],
-					plane->atomic_props_plane[IGT_PLANE_SRC_W],
-					plane->atomic_props_plane[IGT_PLANE_SRC_H],
-					plane->atomic_props_plane[IGT_PLANE_CRTC_W],
-					plane->atomic_props_plane[IGT_PLANE_CRTC_H]
+					plane->props[IGT_PLANE_CRTC_ID],
+					plane->props[IGT_PLANE_FB_ID],
+					plane->props[IGT_PLANE_SRC_W],
+					plane->props[IGT_PLANE_SRC_H],
+					plane->props[IGT_PLANE_CRTC_W],
+					plane->props[IGT_PLANE_CRTC_H]
 				};
 				uint64_t prop_vals[] = {
 					/* crtc */
tests/kms_plane_lowres.c +1 -1
index b16c8cd433b2..613f68899601 100644
@@ -227,8 +227,8 @@ test_setup(data_t *data, enum pipe pipe, uint64_t modifier, int flags,
 				    1.0, 1.0, 0.0,
 				    &data->fb[i]);
 
-		igt_plane_set_position(data->plane[i], x, y);
 		igt_plane_set_fb(data->plane[i], &data->fb[i]);
+		igt_plane_set_position(data->plane[i], x, y);
 	}
 
 	return mode;
tests/kms_rotation_crc.c +2 -2
index 4d2ef1c184f0..4932a0d44410 100644
@@ -122,11 +122,11 @@ static void prepare_crtc(data_t *data, igt_output_t *output, enum pipe pipe,
 	igt_plane_set_fb(primary, &data->fb_modeset);
 
 	if (commit < COMMIT_ATOMIC) {
-		primary->rotation_changed = false;
+		igt_plane_clear_prop_changed(primary, IGT_PLANE_ROTATION);
 		igt_display_commit(display);
 
 		if (plane->type == DRM_PLANE_TYPE_PRIMARY)
-			primary->rotation_changed = true;
+			igt_plane_set_prop_changed(primary, IGT_PLANE_ROTATION);
 	}
 
 	igt_plane_set_fb(plane, NULL);
Signature · 6 lines
2.14.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#8 lore raw

PATCH 1/1 lib/igt_kms: Rework pipe properties to be more atomic, v4.1.

In the future I want to allow tests to commit more properties, but for this to work I have to fix all properties to work better with atomic commit. Instead of special casing each property make a bitmask for all property changed flags, and try to commit all properties.

This has been the most involved one, since legacy pipe commit still handles a lot of the properties differently from the rest.

Changes since v1:
- Dump all changed properties on commit.
- Fix bug in igt_pipe_refresh().
Changes since v2:
- Set pipe ACTIVE property changed flag on init. Changes since v3:
- Add a missing igt_pipe_refresh() to kms_atomic_interruptible.

---
Actually compiling now!

 lib/igt_kms.c                     | 217 ++++++++++++++++++++------------------
 lib/igt_kms.h                     |  77 ++++++--------
 tests/kms_atomic_interruptible.c  |   8 +-
 tests/kms_atomic_transition.c     |   2 +-
 tests/kms_crtc_background_color.c |   2 +-
 5 files changed, 151 insertions(+), 155 deletions(-)
lib/igt_kms.c +113 -104
index 6e0052ebe7a7..a81d7998433a 100644
@@ -259,8 +259,8 @@ igt_atomic_fill_connector_props(igt_display_t *display, igt_output_t *output,
 }
 
 static void
-igt_atomic_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
-			int num_crtc_props, const char **crtc_prop_names)
+igt_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
+		    int num_crtc_props, const char **crtc_prop_names)
 {
 	drmModeObjectPropertiesPtr props;
 	int i, j, fd;
@@ -278,7 +278,7 @@ igt_atomic_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
 			if (strcmp(prop->name, crtc_prop_names[j]) != 0)
 				continue;
 
-			pipe->atomic_props_crtc[j] = props->props[i];
+			pipe->props[j] = props->props[i];
 			break;
 		}
 
@@ -1690,7 +1690,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 		int p = 1;
 		int j, type;
 		uint8_t last_plane = 0, n_planes = 0;
-		uint64_t prop_value;
 
 		pipe->crtc_id = resources->crtcs[i];
 		pipe->display = display;
@@ -1700,29 +1699,16 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 		pipe->planes = NULL;
 		pipe->out_fence_fd = -1;
 
+		igt_fill_pipe_props(display, pipe, IGT_NUM_CRTC_PROPS, igt_crtc_prop_names);
+
+		/* Force modeset disable on first commit */
+		igt_pipe_obj_set_prop_changed(pipe, IGT_CRTC_MODE_ID);
+		igt_pipe_obj_set_prop_changed(pipe, IGT_CRTC_ACTIVE);
+
 		get_crtc_property(display->drm_fd, pipe->crtc_id,
-				    "background_color",
-				    &pipe->background_property,
-				    &prop_value,
+				    "background_color", NULL,
+				    &pipe->values[IGT_CRTC_BACKGROUND],
 				    NULL);
-		pipe->background = (uint32_t)prop_value;
-		get_crtc_property(display->drm_fd, pipe->crtc_id,
-				  "DEGAMMA_LUT",
-				  &pipe->degamma_property,
-				  NULL,
-				  NULL);
-		get_crtc_property(display->drm_fd, pipe->crtc_id,
-				  "CTM",
-				  &pipe->ctm_property,
-				  NULL,
-				  NULL);
-		get_crtc_property(display->drm_fd, pipe->crtc_id,
-				  "GAMMA_LUT",
-				  &pipe->gamma_property,
-				  NULL,
-				  NULL);
-
-		igt_atomic_fill_pipe_props(display, pipe, IGT_NUM_CRTC_PROPS, igt_crtc_prop_names);
 
 		/* count number of valid planes */
 		for (j = 0; j < plane_resources->count_planes; j++) {
@@ -1805,8 +1791,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 			igt_assert_eq(p, n_planes);
 
 		pipe->n_planes = n_planes;
-
-		pipe->mode_changed = true;
 	}
 
 	/*
@@ -2283,7 +2267,7 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
 
 	if (!igt_plane_is_prop_changed(primary, IGT_PLANE_FB_ID) &&
 	    !(primary->changed & IGT_PLANE_COORD_CHANGED_MASK) &&
-	    !primary->pipe->mode_changed)
+	    !igt_pipe_obj_is_prop_changed(primary->pipe, IGT_CRTC_MODE_ID))
 		return 0;
 
 	crtc_id = pipe->crtc_id;
@@ -2352,6 +2336,16 @@ static int igt_plane_commit(igt_plane_t *plane,
 	}
 }
 
+static bool is_atomic_prop(enum igt_atomic_crtc_properties prop)
+{
+       if (prop == IGT_CRTC_MODE_ID ||
+	   prop == IGT_CRTC_ACTIVE ||
+	   prop == IGT_CRTC_OUT_FENCE_PTR)
+		return true;
+
+	return false;
+}
+
 /*
  * Commit all plane changes to an output.  Note that if @s is COMMIT_LEGACY,
  * enabling/disabling the primary plane will also enable/disable the CRTC.
@@ -2369,19 +2363,9 @@ static int igt_pipe_commit(igt_pipe_t *pipe,
 	int i;
 	int ret;
 
-	if (pipe->background_changed) {
-		igt_crtc_set_property(pipe, pipe->background_property,
-			pipe->background);
-	}
-
-	if (pipe->color_mgmt_changed) {
-		igt_crtc_set_property(pipe, pipe->degamma_property,
-				      pipe->degamma_blob);
-		igt_crtc_set_property(pipe, pipe->ctm_property,
-				      pipe->ctm_blob);
-		igt_crtc_set_property(pipe, pipe->gamma_property,
-				      pipe->gamma_blob);
-	}
+	for (i = 0; i < IGT_NUM_CRTC_PROPS; i++)
+		if (!is_atomic_prop(i))
+			igt_crtc_set_property(pipe, pipe->props[i], pipe->values[i]);
 
 	for (i = 0; i < pipe->n_planes; i++) {
 		igt_plane_t *plane = &pipe->planes[i];
@@ -2394,9 +2378,10 @@ static int igt_pipe_commit(igt_pipe_t *pipe,
 }
 
 static void
-igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length)
+igt_pipe_replace_blob(igt_pipe_t *pipe, enum igt_atomic_crtc_properties prop, void *ptr, size_t length)
 {
 	igt_display_t *display = pipe->display;
+	uint64_t *blob = &pipe->values[prop];
 	uint32_t blob_id = 0;
 
 	if (*blob != 0)
@@ -2408,6 +2393,7 @@ igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length
 						     ptr, length, &blob_id) == 0);
 
 	*blob = blob_id;
+	igt_pipe_obj_set_prop_changed(pipe, prop);
 }
 
 /*
@@ -2415,51 +2401,23 @@ igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length
  */
 static void igt_atomic_prepare_crtc_commit(igt_pipe_t *pipe_obj, drmModeAtomicReq *req)
 {
-	if (pipe_obj->background_changed)
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_BACKGROUND, pipe_obj->background);
-
-	if (pipe_obj->color_mgmt_changed) {
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_DEGAMMA_LUT, pipe_obj->degamma_blob);
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_CTM, pipe_obj->ctm_blob);
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_GAMMA_LUT, pipe_obj->gamma_blob);
-	}
-
-	if (pipe_obj->mode_changed) {
-		igt_output_t *output = igt_pipe_get_output(pipe_obj);
-
-		if (!output) {
-			igt_pipe_replace_blob(pipe_obj, &pipe_obj->mode_blob, NULL, 0);
-
-			LOG(pipe_obj->display, "%s: Setting NULL mode\n",
-			    kmstest_pipe_name(pipe_obj->pipe));
-		} else {
-			drmModeModeInfo *mode = igt_output_get_mode(output);
+	int i;
 
-			igt_pipe_replace_blob(pipe_obj, &pipe_obj->mode_blob, mode, sizeof(*mode));
+	for (i = 0; i < IGT_NUM_CRTC_PROPS; i++) {
+		if (!igt_pipe_obj_is_prop_changed(pipe_obj, i))
+			continue;
 
-			LOG(pipe_obj->display, "%s: Setting mode %s from %s\n",
-			    kmstest_pipe_name(pipe_obj->pipe),
-			    mode->name, igt_output_name(output));
-		}
+		igt_debug("Pipe %s: Setting property \"%s\" to 0x%"PRIx64"/%"PRIi64"\n",
+			kmstest_pipe_name(pipe_obj->pipe), igt_crtc_prop_names[i],
+			pipe_obj->values[i], pipe_obj->values[i]);
 
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_MODE_ID, pipe_obj->mode_blob);
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_ACTIVE, !!output);
+		igt_assert_lt(0, drmModeAtomicAddProperty(req, pipe_obj->crtc_id, pipe_obj->props[i], pipe_obj->values[i]));
 	}
 
 	if (pipe_obj->out_fence_fd != -1) {
 		close(pipe_obj->out_fence_fd);
 		pipe_obj->out_fence_fd = -1;
 	}
-
-	if (pipe_obj->out_fence_requested)
-	{
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_OUT_FENCE_PTR,
-		    (uint64_t)(uintptr_t) &pipe_obj->out_fence_fd);
-	}
-
-	/*
-	 *	TODO: Add all crtc level properties here
-	 */
 }
 
 /*
@@ -2550,15 +2508,21 @@ display_commit_changed(igt_display_t *display, enum igt_commit_style s)
 		igt_pipe_t *pipe_obj = &display->pipes[pipe];
 		igt_plane_t *plane;
 
-		pipe_obj->color_mgmt_changed = false;
-		pipe_obj->background_changed = false;
+		if (s == COMMIT_ATOMIC) {
+			if (igt_pipe_obj_is_prop_changed(pipe_obj, IGT_CRTC_OUT_FENCE_PTR))
+				igt_assert(pipe_obj->out_fence_fd >= 0);
 
-		if (s != COMMIT_UNIVERSAL)
-			pipe_obj->mode_changed = false;
-
-		if (s == COMMIT_ATOMIC && pipe_obj->out_fence_requested) {
-			pipe_obj->out_fence_requested = false;
-			igt_assert(pipe_obj->out_fence_fd >= 0);
+			pipe_obj->changed = 0;
+		} else {
+			igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_BACKGROUND);
+			igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_CTM);
+			igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_DEGAMMA_LUT);
+			igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_GAMMA_LUT);
+
+			if (s != COMMIT_UNIVERSAL) {
+				igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
+				igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_ACTIVE);
+			}
 		}
 
 		for_each_plane_on_pipe(display, pipe, plane) {
@@ -2812,33 +2776,83 @@ void igt_output_override_mode(igt_output_t *output, drmModeModeInfo *mode)
 
 	output->use_override_mode = !!mode;
 
-	if (pipe)
-		pipe->mode_changed = true;
+	if (pipe) {
+		if (output->display->is_atomic)
+			igt_pipe_replace_blob(pipe, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(*mode));
+		else
+			igt_pipe_obj_set_prop_changed(pipe, IGT_CRTC_MODE_ID);
+	}
 }
 
 void igt_output_set_pipe(igt_output_t *output, enum pipe pipe)
 {
 	igt_display_t *display = output->display;
-	igt_pipe_t *old_pipe;
+	igt_pipe_t *old_pipe = NULL, *pipe_obj = NULL;;
 
 	igt_assert(output->name);
 
-	if (output->pending_pipe != PIPE_NONE) {
+	if (output->pending_pipe != PIPE_NONE)
 		old_pipe = igt_output_get_driving_pipe(output);
 
-		old_pipe->mode_changed = true;
-	}
+	if (pipe != PIPE_NONE)
+		pipe_obj = &display->pipes[pipe];
 
 	LOG(display, "%s: set_pipe(%s)\n", igt_output_name(output),
 	    kmstest_pipe_name(pipe));
 	output->pending_pipe = pipe;
 
-	if (pipe != PIPE_NONE)
-		display->pipes[pipe].mode_changed = true;
+	if (old_pipe) {
+		igt_output_t *old_output;
+
+		old_output = igt_pipe_get_output(old_pipe);
+		if (!old_output) {
+			if (display->is_atomic)
+				igt_pipe_replace_blob(old_pipe, IGT_CRTC_MODE_ID, NULL, 0);
+			else
+				igt_pipe_obj_set_prop_changed(old_pipe, IGT_CRTC_MODE_ID);
+
+			igt_pipe_obj_set_prop_value(old_pipe, IGT_CRTC_ACTIVE, 0);
+		}
+	}
 
 	igt_output_set_prop_value(output, IGT_CONNECTOR_CRTC_ID, pipe == PIPE_NONE ? 0 : display->pipes[pipe].crtc_id);
 
 	igt_output_refresh(output);
+
+	if (pipe_obj) {
+		if (display->is_atomic)
+			igt_pipe_replace_blob(pipe_obj, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(drmModeModeInfo));
+		else
+			igt_pipe_obj_set_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
+
+		igt_pipe_obj_set_prop_value(pipe_obj, IGT_CRTC_ACTIVE, 1);
+	}
+}
+
+/*
+ * igt_pipe_refresh:
+ * @display: a pointer to an #igt_display_t structure
+ * @pipe: Pipe to refresh
+ * @force: Should be set to true if mode_blob is no longer considered
+ * to be valid, for example after doing an atomic commit during fork or closing display fd.
+ *
+ * Requests the pipe to be part of the state on next update.
+ * This is useful when state may have been out of sync after
+ * a fork, or we just want to be sure the pipe is included
+ * in the next commit.
+ */
+void igt_pipe_refresh(igt_display_t *display, enum pipe pipe, bool force)
+{
+	igt_pipe_t *pipe_obj = &display->pipes[pipe];
+
+	if (force && display->is_atomic) {
+		igt_output_t *output = igt_pipe_get_output(pipe_obj);
+
+		pipe_obj->values[IGT_CRTC_MODE_ID] = 0;
+		if (output)
+			igt_pipe_replace_blob(pipe_obj, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(drmModeModeInfo));
+	} else
+		igt_pipe_obj_set_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
 }
 
 void igt_output_set_scaling_mode(igt_output_t *output, uint64_t scaling_mode)
@@ -3046,28 +3060,25 @@ void igt_plane_set_rotation(igt_plane_t *plane, igt_rotation_t rotation)
  */
 void igt_pipe_request_out_fence(igt_pipe_t *pipe)
 {
-	pipe->out_fence_requested = true;
+	igt_pipe_obj_set_prop_value(pipe, IGT_CRTC_OUT_FENCE_PTR, (ptrdiff_t)&pipe->out_fence_fd);
 }
 
 void
 igt_pipe_set_degamma_lut(igt_pipe_t *pipe, void *ptr, size_t length)
 {
-	igt_pipe_replace_blob(pipe, &pipe->degamma_blob, ptr, length);
-	pipe->color_mgmt_changed = 1;
+	igt_pipe_replace_blob(pipe, IGT_CRTC_DEGAMMA_LUT, ptr, length);
 }
 
 void
 igt_pipe_set_ctm_matrix(igt_pipe_t *pipe, void *ptr, size_t length)
 {
-	igt_pipe_replace_blob(pipe, &pipe->ctm_blob, ptr, length);
-	pipe->color_mgmt_changed = 1;
+	igt_pipe_replace_blob(pipe, IGT_CRTC_CTM, ptr, length);
 }
 
 void
 igt_pipe_set_gamma_lut(igt_pipe_t *pipe, void *ptr, size_t length)
 {
-	igt_pipe_replace_blob(pipe, &pipe->gamma_blob, ptr, length);
-	pipe->color_mgmt_changed = 1;
+	igt_pipe_replace_blob(pipe, IGT_CRTC_GAMMA_LUT, ptr, length);
 }
 
 /**
@@ -3088,9 +3099,7 @@ void igt_crtc_set_background(igt_pipe_t *pipe, uint64_t background)
 	    kmstest_pipe_name(pipe->pipe),
 	    pipe->pipe, background);
 
-	pipe->background = background;
-
-	pipe->background_changed = true;
+	igt_pipe_obj_set_prop_value(pipe, IGT_CRTC_BACKGROUND, background);
 }
 
 void igt_wait_for_vblank_count(int drm_fd, enum pipe pipe, int count)
lib/igt_kms.h +30 -47

100 lines not on this page · raw message

tests/kms_atomic_interruptible.c +6 -2
index 5570854390ea..0270c8f870bf 100644
@@ -156,8 +156,8 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
 				uint32_t count_props[3] = { 2, 1, 6 };
 				uint32_t props[] = {
 					/* crtc: 2 props */
-					plane->pipe->atomic_props_crtc[IGT_CRTC_MODE_ID],
-					plane->pipe->atomic_props_crtc[IGT_CRTC_ACTIVE],
+					plane->pipe->props[IGT_CRTC_MODE_ID],
+					plane->pipe->props[IGT_CRTC_ACTIVE],
 					/* connector: 1 prop */
 					output->props[IGT_CONNECTOR_CRTC_ID],
 					/* plane: remainder props */
@@ -253,6 +253,10 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
 
 	igt_waitchildren();
 
+	/* The mode is unset by the forked helper, force a refresh here */
+	if (test_type == test_legacy_modeset || test_type == test_atomic_modeset)
+		igt_pipe_refresh(display, pipe, true);
+
 	igt_plane_set_fb(plane, NULL);
 	igt_plane_set_fb(primary, NULL);
 	igt_output_set_pipe(output, PIPE_NONE);
tests/kms_atomic_transition.c +1 -1
index 2ae75f2d6630..7ddb65cea183 100644
@@ -633,7 +633,7 @@ static unsigned set_combinations(igt_display_t *display, unsigned mask, struct i
 		drmModeModeInfo *mode = NULL;
 
 		if (!(mask & (1 << pipe))) {
-			if (display->pipes[pipe].mode_blob) {
+			if (igt_pipe_is_prop_changed(display, pipe, IGT_CRTC_ACTIVE)) {
 				event_mask |= 1 << pipe;
 				igt_plane_set_fb(plane, NULL);
 			}
tests/kms_crtc_background_color.c +1 -1
index e12e163449f8..659a30b90219 100644
@@ -137,7 +137,7 @@ static void test_crtc_background(data_t *data)
 		igt_output_set_pipe(output, pipe);
 
 		plane = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
-		igt_require(plane->pipe->background_property);
+		igt_require(plane->pipe->props[IGT_CRTC_BACKGROUND]);
 
 		prepare_crtc(data, output, pipe, plane, 1, PURPLE, BLACK64);
 
Signature · 6 lines
2.14.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#9 lore raw

PATCH v2 6/8 lib/igt_kms: Rework pipe properties to be more atomic, v2.

In reply to Maarten Lankhorst

In the future I want to allow tests to commit more properties, but for this to work I have to fix all properties to work better with atomic commit. Instead of special casing each property make a bitmask for all property changed flags, and try to commit all properties.

This has been the most involved one, since legacy pipe commit still handles a lot of the properties differently from the rest.

Changes since v1:
- Dump all changed properties on commit.
- Fix bug in igt_pipe_refresh().

---
 lib/igt_kms.c                     | 213 ++++++++++++++++++++------------------
 lib/igt_kms.h                     |  77 ++++++--------
 tests/kms_atomic_interruptible.c  |   4 +-
 tests/kms_atomic_transition.c     |   2 +-
 tests/kms_crtc_background_color.c |   2 +-
 5 files changed, 144 insertions(+), 154 deletions(-)
lib/igt_kms.c +110 -103
index 3181ee605195..23bb543efd61 100644
@@ -259,8 +259,8 @@ igt_atomic_fill_connector_props(igt_display_t *display, igt_output_t *output,
 }
 
 static void
-igt_atomic_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
-			int num_crtc_props, const char **crtc_prop_names)
+igt_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
+		    int num_crtc_props, const char **crtc_prop_names)
 {
 	drmModeObjectPropertiesPtr props;
 	int i, j, fd;
@@ -278,7 +278,7 @@ igt_atomic_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
 			if (strcmp(prop->name, crtc_prop_names[j]) != 0)
 				continue;
 
-			pipe->atomic_props_crtc[j] = props->props[i];
+			pipe->props[j] = props->props[i];
 			break;
 		}
 
@@ -1690,7 +1690,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 		int p = 1;
 		int j, type;
 		uint8_t last_plane = 0, n_planes = 0;
-		uint64_t prop_value;
 
 		pipe->crtc_id = resources->crtcs[i];
 		pipe->display = display;
@@ -1700,29 +1699,12 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 		pipe->planes = NULL;
 		pipe->out_fence_fd = -1;
 
+		igt_fill_pipe_props(display, pipe, IGT_NUM_CRTC_PROPS, igt_crtc_prop_names);
+
 		get_crtc_property(display->drm_fd, pipe->crtc_id,
-				    "background_color",
-				    &pipe->background_property,
-				    &prop_value,
+				    "background_color", NULL,
+				    &pipe->values[IGT_CRTC_BACKGROUND],
 				    NULL);
-		pipe->background = (uint32_t)prop_value;
-		get_crtc_property(display->drm_fd, pipe->crtc_id,
-				  "DEGAMMA_LUT",
-				  &pipe->degamma_property,
-				  NULL,
-				  NULL);
-		get_crtc_property(display->drm_fd, pipe->crtc_id,
-				  "CTM",
-				  &pipe->ctm_property,
-				  NULL,
-				  NULL);
-		get_crtc_property(display->drm_fd, pipe->crtc_id,
-				  "GAMMA_LUT",
-				  &pipe->gamma_property,
-				  NULL,
-				  NULL);
-
-		igt_atomic_fill_pipe_props(display, pipe, IGT_NUM_CRTC_PROPS, igt_crtc_prop_names);
 
 		/* count number of valid planes */
 		for (j = 0; j < plane_resources->count_planes; j++) {
@@ -1807,7 +1789,7 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 			igt_plane_set_prop_changed(plane, IGT_PLANE_CRTC_ID);
 		}
 
-		pipe->mode_changed = true;
+		igt_pipe_refresh(display, i, false);
 	}
 
 	/*
@@ -2284,7 +2266,7 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
 
 	if (!igt_plane_is_prop_changed(primary, IGT_PLANE_FB_ID) &&
 	    !(primary->changed & IGT_PLANE_COORD_CHANGED_MASK) &&
-	    !primary->pipe->mode_changed)
+	    !igt_pipe_obj_is_prop_changed(primary->pipe, IGT_CRTC_MODE_ID))
 		return 0;
 
 	crtc_id = pipe->crtc_id;
@@ -2353,6 +2335,16 @@ static int igt_plane_commit(igt_plane_t *plane,
 	}
 }
 
+static bool is_atomic_prop(enum igt_atomic_crtc_properties prop)
+{
+       if (prop == IGT_CRTC_MODE_ID ||
+	   prop == IGT_CRTC_ACTIVE ||
+	   prop == IGT_CRTC_OUT_FENCE_PTR)
+		return true;
+
+	return false;
+}
+
 /*
  * Commit all plane changes to an output.  Note that if @s is COMMIT_LEGACY,
  * enabling/disabling the primary plane will also enable/disable the CRTC.
@@ -2370,19 +2362,9 @@ static int igt_pipe_commit(igt_pipe_t *pipe,
 	int i;
 	int ret;
 
-	if (pipe->background_changed) {
-		igt_crtc_set_property(pipe, pipe->background_property,
-			pipe->background);
-	}
-
-	if (pipe->color_mgmt_changed) {
-		igt_crtc_set_property(pipe, pipe->degamma_property,
-				      pipe->degamma_blob);
-		igt_crtc_set_property(pipe, pipe->ctm_property,
-				      pipe->ctm_blob);
-		igt_crtc_set_property(pipe, pipe->gamma_property,
-				      pipe->gamma_blob);
-	}
+	for (i = 0; i < IGT_NUM_CRTC_PROPS; i++)
+		if (!is_atomic_prop(i))
+			igt_crtc_set_property(pipe, pipe->props[i], pipe->values[i]);
 
 	for (i = 0; i < pipe->n_planes; i++) {
 		igt_plane_t *plane = &pipe->planes[i];
@@ -2395,9 +2377,10 @@ static int igt_pipe_commit(igt_pipe_t *pipe,
 }
 
 static void
-igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length)
+igt_pipe_replace_blob(igt_pipe_t *pipe, enum igt_atomic_crtc_properties prop, void *ptr, size_t length)
 {
 	igt_display_t *display = pipe->display;
+	uint64_t *blob = &pipe->values[prop];
 	uint32_t blob_id = 0;
 
 	if (*blob != 0)
@@ -2409,6 +2392,7 @@ igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length
 						     ptr, length, &blob_id) == 0);
 
 	*blob = blob_id;
+	igt_pipe_obj_set_prop_changed(pipe, prop);
 }
 
 /*
@@ -2416,51 +2400,23 @@ igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length
  */
 static void igt_atomic_prepare_crtc_commit(igt_pipe_t *pipe_obj, drmModeAtomicReq *req)
 {
-	if (pipe_obj->background_changed)
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_BACKGROUND, pipe_obj->background);
-
-	if (pipe_obj->color_mgmt_changed) {
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_DEGAMMA_LUT, pipe_obj->degamma_blob);
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_CTM, pipe_obj->ctm_blob);
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_GAMMA_LUT, pipe_obj->gamma_blob);
-	}
-
-	if (pipe_obj->mode_changed) {
-		igt_output_t *output = igt_pipe_get_output(pipe_obj);
-
-		if (!output) {
-			igt_pipe_replace_blob(pipe_obj, &pipe_obj->mode_blob, NULL, 0);
-
-			LOG(pipe_obj->display, "%s: Setting NULL mode\n",
-			    kmstest_pipe_name(pipe_obj->pipe));
-		} else {
-			drmModeModeInfo *mode = igt_output_get_mode(output);
+	int i;
 
-			igt_pipe_replace_blob(pipe_obj, &pipe_obj->mode_blob, mode, sizeof(*mode));
+	for (i = 0; i < IGT_NUM_CRTC_PROPS; i++) {
+		if (!igt_pipe_obj_is_prop_changed(pipe_obj, i))
+			continue;
 
-			LOG(pipe_obj->display, "%s: Setting mode %s from %s\n",
-			    kmstest_pipe_name(pipe_obj->pipe),
-			    mode->name, igt_output_name(output));
-		}
+		igt_debug("Pipe %s: Setting property \"%s\" to 0x%"PRIx64"/%"PRIi64"\n",
+			kmstest_pipe_name(pipe_obj->pipe), igt_crtc_prop_names[i],
+			pipe_obj->values[i], pipe_obj->values[i]);
 
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_MODE_ID, pipe_obj->mode_blob);
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_ACTIVE, !!output);
+		igt_assert_lt(0, drmModeAtomicAddProperty(req, pipe_obj->crtc_id, pipe_obj->props[i], pipe_obj->values[i]));
 	}
 
 	if (pipe_obj->out_fence_fd != -1) {
 		close(pipe_obj->out_fence_fd);
 		pipe_obj->out_fence_fd = -1;
 	}
-
-	if (pipe_obj->out_fence_requested)
-	{
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_OUT_FENCE_PTR,
-		    (uint64_t)(uintptr_t) &pipe_obj->out_fence_fd);
-	}
-
-	/*
-	 *	TODO: Add all crtc level properties here
-	 */
 }
 
 /*
@@ -2551,15 +2507,21 @@ display_commit_changed(igt_display_t *display, enum igt_commit_style s)
 		igt_pipe_t *pipe_obj = &display->pipes[pipe];
 		igt_plane_t *plane;
 
-		pipe_obj->color_mgmt_changed = false;
-		pipe_obj->background_changed = false;
-
-		if (s != COMMIT_UNIVERSAL)
-			pipe_obj->mode_changed = false;
+		if (s == COMMIT_ATOMIC) {
+			if (igt_pipe_obj_is_prop_changed(pipe_obj, IGT_CRTC_OUT_FENCE_PTR))
+				igt_assert(pipe_obj->out_fence_fd >= 0);
 
-		if (s == COMMIT_ATOMIC && pipe_obj->out_fence_requested) {
-			pipe_obj->out_fence_requested = false;
-			igt_assert(pipe_obj->out_fence_fd >= 0);
+			pipe_obj->changed = 0;
+		} else {
+			igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_BACKGROUND);
+			igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_CTM);
+			igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_DEGAMMA_LUT);
+			igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_GAMMA_LUT);
+
+			if (s != COMMIT_UNIVERSAL) {
+				igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
+				igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_ACTIVE);
+			}
 		}
 
 		for_each_plane_on_pipe(display, pipe, plane) {
@@ -2813,33 +2775,83 @@ void igt_output_override_mode(igt_output_t *output, drmModeModeInfo *mode)
 
 	output->use_override_mode = !!mode;
 
-	if (pipe)
-		pipe->mode_changed = true;
+	if (pipe) {
+		if (output->display->is_atomic)
+			igt_pipe_replace_blob(pipe, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(*mode));
+		else
+			igt_pipe_obj_set_prop_changed(pipe, IGT_CRTC_MODE_ID);
+	}
 }
 
 void igt_output_set_pipe(igt_output_t *output, enum pipe pipe)
 {
 	igt_display_t *display = output->display;
-	igt_pipe_t *old_pipe;
+	igt_pipe_t *old_pipe = NULL, *pipe_obj = NULL;;
 
 	igt_assert(output->name);
 
-	if (output->pending_pipe != PIPE_NONE) {
+	if (output->pending_pipe != PIPE_NONE)
 		old_pipe = igt_output_get_driving_pipe(output);
 
-		old_pipe->mode_changed = true;
-	}
+	if (pipe != PIPE_NONE)
+		pipe_obj = &display->pipes[pipe];
 
 	LOG(display, "%s: set_pipe(%s)\n", igt_output_name(output),
 	    kmstest_pipe_name(pipe));
 	output->pending_pipe = pipe;
 
-	if (pipe != PIPE_NONE)
-		display->pipes[pipe].mode_changed = true;
+	if (old_pipe) {
+		igt_output_t *old_output;
+
+		old_output = igt_pipe_get_output(old_pipe);
+		if (!old_output) {
+			if (display->is_atomic)
+				igt_pipe_replace_blob(old_pipe, IGT_CRTC_MODE_ID, NULL, 0);
+			else
+				igt_pipe_obj_set_prop_changed(old_pipe, IGT_CRTC_MODE_ID);
+
+			igt_pipe_obj_set_prop_value(old_pipe, IGT_CRTC_ACTIVE, 0);
+		}
+	}
 
 	igt_output_set_prop_value(output, IGT_CONNECTOR_CRTC_ID, pipe == PIPE_NONE ? 0 : display->pipes[pipe].crtc_id);
 
 	igt_output_refresh(output);
+
+	if (pipe_obj) {
+		if (display->is_atomic)
+			igt_pipe_replace_blob(pipe_obj, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(drmModeModeInfo));
+		else
+			igt_pipe_obj_set_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
+
+		igt_pipe_obj_set_prop_value(pipe_obj, IGT_CRTC_ACTIVE, 1);
+	}
+}
+
+/*
+ * igt_pipe_refresh:
+ * @display: a pointer to an #igt_display_t structure
+ * @pipe: Pipe to refresh
+ * @force: Should be set to true if mode_blob is no longer considered
+ * to be valid, for example after doing an atomic commit during fork or closing display fd.
+ *
+ * Requests the pipe to be part of the state on next update.
+ * This is useful when state may have been out of sync after
+ * a fork, or we just want to be sure the pipe is included
+ * in the next commit.
+ */
+void igt_pipe_refresh(igt_display_t *display, enum pipe pipe, bool force)
+{
+	igt_pipe_t *pipe_obj = &display->pipes[pipe];
+
+	if (force && display->is_atomic) {
+		igt_output_t *output = igt_pipe_get_output(pipe_obj);
+
+		pipe_obj->values[IGT_CRTC_MODE_ID] = 0;
+		if (output)
+			igt_pipe_replace_blob(pipe_obj, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(drmModeModeInfo));
+	} else
+		igt_pipe_obj_set_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
 }
 
 void igt_output_set_scaling_mode(igt_output_t *output, uint64_t scaling_mode)
@@ -3047,28 +3059,25 @@ void igt_plane_set_rotation(igt_plane_t *plane, igt_rotation_t rotation)
  */
 void igt_pipe_request_out_fence(igt_pipe_t *pipe)
 {
-	pipe->out_fence_requested = true;
+	igt_pipe_obj_set_prop_value(pipe, IGT_CRTC_OUT_FENCE_PTR, (ptrdiff_t)&pipe->out_fence_fd);
 }
 
 void
 igt_pipe_set_degamma_lut(igt_pipe_t *pipe, void *ptr, size_t length)
 {
-	igt_pipe_replace_blob(pipe, &pipe->degamma_blob, ptr, length);
-	pipe->color_mgmt_changed = 1;
+	igt_pipe_replace_blob(pipe, IGT_CRTC_DEGAMMA_LUT, ptr, length);
 }
 
 void
 igt_pipe_set_ctm_matrix(igt_pipe_t *pipe, void *ptr, size_t length)
 {
-	igt_pipe_replace_blob(pipe, &pipe->ctm_blob, ptr, length);
-	pipe->color_mgmt_changed = 1;
+	igt_pipe_replace_blob(pipe, IGT_CRTC_CTM, ptr, length);
 }
 
 void
 igt_pipe_set_gamma_lut(igt_pipe_t *pipe, void *ptr, size_t length)
 {
-	igt_pipe_replace_blob(pipe, &pipe->gamma_blob, ptr, length);
-	pipe->color_mgmt_changed = 1;
+	igt_pipe_replace_blob(pipe, IGT_CRTC_GAMMA_LUT, ptr, length);
 }
 
 /**
@@ -3089,9 +3098,7 @@ void igt_crtc_set_background(igt_pipe_t *pipe, uint64_t background)
 	    kmstest_pipe_name(pipe->pipe),
 	    pipe->pipe, background);
 
-	pipe->background = background;
-
-	pipe->background_changed = true;
+	igt_pipe_obj_set_prop_value(pipe, IGT_CRTC_BACKGROUND, background);
 }
 
 void igt_wait_for_vblank_count(int drm_fd, enum pipe pipe, int count)
lib/igt_kms.h +30 -47

100 lines not on this page · raw message

tests/kms_atomic_interruptible.c +2 -2
index 5570854390ea..dd753b6e5db3 100644
@@ -156,8 +156,8 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
 				uint32_t count_props[3] = { 2, 1, 6 };
 				uint32_t props[] = {
 					/* crtc: 2 props */
-					plane->pipe->atomic_props_crtc[IGT_CRTC_MODE_ID],
-					plane->pipe->atomic_props_crtc[IGT_CRTC_ACTIVE],
+					plane->pipe->props[IGT_CRTC_MODE_ID],
+					plane->pipe->props[IGT_CRTC_ACTIVE],
 					/* connector: 1 prop */
 					output->props[IGT_CONNECTOR_CRTC_ID],
 					/* plane: remainder props */
tests/kms_atomic_transition.c +1 -1
index 2ae75f2d6630..7ddb65cea183 100644
@@ -633,7 +633,7 @@ static unsigned set_combinations(igt_display_t *display, unsigned mask, struct i
 		drmModeModeInfo *mode = NULL;
 
 		if (!(mask & (1 << pipe))) {
-			if (display->pipes[pipe].mode_blob) {
+			if (igt_pipe_is_prop_changed(display, pipe, IGT_CRTC_ACTIVE)) {
 				event_mask |= 1 << pipe;
 				igt_plane_set_fb(plane, NULL);
 			}
tests/kms_crtc_background_color.c +1 -1
index e12e163449f8..659a30b90219 100644
@@ -137,7 +137,7 @@ static void test_crtc_background(data_t *data)
 		igt_output_set_pipe(output, pipe);
 
 		plane = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
-		igt_require(plane->pipe->background_property);
+		igt_require(plane->pipe->props[IGT_CRTC_BACKGROUND]);
 
 		prepare_crtc(data, output, pipe, plane, 1, PURPLE, BLACK64);
 
Signature · 6 lines
2.14.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#10 lore raw

PATCH v2 6/8 lib/igt_kms: Rework pipe properties to be more atomic, v3.

In the future I want to allow tests to commit more properties, but for this to work I have to fix all properties to work better with atomic commit. Instead of special casing each property make a bitmask for all property changed flags, and try to commit all properties.

This has been the most involved one, since legacy pipe commit still handles a lot of the properties differently from the rest.

Changes since v1:
- Dump all changed properties on commit.
- Fix bug in igt_pipe_refresh().
Changes since v2:
- Set pipe ACTIVE property changed flag on init.

---
 lib/igt_kms.c                     | 217 ++++++++++++++++++++------------------
 lib/igt_kms.h                     |  77 ++++++--------
 tests/kms_atomic_interruptible.c  |   4 +-
 tests/kms_atomic_transition.c     |   2 +-
 tests/kms_crtc_background_color.c |   2 +-
 5 files changed, 147 insertions(+), 155 deletions(-)
lib/igt_kms.c +113 -104
index 6e0052ebe7a7..a81d7998433a 100644
@@ -259,8 +259,8 @@ igt_atomic_fill_connector_props(igt_display_t *display, igt_output_t *output,
 }
 
 static void
-igt_atomic_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
-			int num_crtc_props, const char **crtc_prop_names)
+igt_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
+		    int num_crtc_props, const char **crtc_prop_names)
 {
 	drmModeObjectPropertiesPtr props;
 	int i, j, fd;
@@ -278,7 +278,7 @@ igt_atomic_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
 			if (strcmp(prop->name, crtc_prop_names[j]) != 0)
 				continue;
 
-			pipe->atomic_props_crtc[j] = props->props[i];
+			pipe->props[j] = props->props[i];
 			break;
 		}
 
@@ -1690,7 +1690,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 		int p = 1;
 		int j, type;
 		uint8_t last_plane = 0, n_planes = 0;
-		uint64_t prop_value;
 
 		pipe->crtc_id = resources->crtcs[i];
 		pipe->display = display;
@@ -1700,29 +1699,16 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 		pipe->planes = NULL;
 		pipe->out_fence_fd = -1;
 
+		igt_fill_pipe_props(display, pipe, IGT_NUM_CRTC_PROPS, igt_crtc_prop_names);
+
+		/* Force modeset disable on first commit */
+		igt_pipe_obj_set_prop_changed(pipe, IGT_CRTC_MODE_ID);
+		igt_pipe_obj_set_prop_changed(pipe, IGT_CRTC_ACTIVE);
+
 		get_crtc_property(display->drm_fd, pipe->crtc_id,
-				    "background_color",
-				    &pipe->background_property,
-				    &prop_value,
+				    "background_color", NULL,
+				    &pipe->values[IGT_CRTC_BACKGROUND],
 				    NULL);
-		pipe->background = (uint32_t)prop_value;
-		get_crtc_property(display->drm_fd, pipe->crtc_id,
-				  "DEGAMMA_LUT",
-				  &pipe->degamma_property,
-				  NULL,
-				  NULL);
-		get_crtc_property(display->drm_fd, pipe->crtc_id,
-				  "CTM",
-				  &pipe->ctm_property,
-				  NULL,
-				  NULL);
-		get_crtc_property(display->drm_fd, pipe->crtc_id,
-				  "GAMMA_LUT",
-				  &pipe->gamma_property,
-				  NULL,
-				  NULL);
-
-		igt_atomic_fill_pipe_props(display, pipe, IGT_NUM_CRTC_PROPS, igt_crtc_prop_names);
 
 		/* count number of valid planes */
 		for (j = 0; j < plane_resources->count_planes; j++) {
@@ -1805,8 +1791,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 			igt_assert_eq(p, n_planes);
 
 		pipe->n_planes = n_planes;
-
-		pipe->mode_changed = true;
 	}
 
 	/*
@@ -2283,7 +2267,7 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
 
 	if (!igt_plane_is_prop_changed(primary, IGT_PLANE_FB_ID) &&
 	    !(primary->changed & IGT_PLANE_COORD_CHANGED_MASK) &&
-	    !primary->pipe->mode_changed)
+	    !igt_pipe_obj_is_prop_changed(primary->pipe, IGT_CRTC_MODE_ID))
 		return 0;
 
 	crtc_id = pipe->crtc_id;
@@ -2352,6 +2336,16 @@ static int igt_plane_commit(igt_plane_t *plane,
 	}
 }
 
+static bool is_atomic_prop(enum igt_atomic_crtc_properties prop)
+{
+       if (prop == IGT_CRTC_MODE_ID ||
+	   prop == IGT_CRTC_ACTIVE ||
+	   prop == IGT_CRTC_OUT_FENCE_PTR)
+		return true;
+
+	return false;
+}
+
 /*
  * Commit all plane changes to an output.  Note that if @s is COMMIT_LEGACY,
  * enabling/disabling the primary plane will also enable/disable the CRTC.
@@ -2369,19 +2363,9 @@ static int igt_pipe_commit(igt_pipe_t *pipe,
 	int i;
 	int ret;
 
-	if (pipe->background_changed) {
-		igt_crtc_set_property(pipe, pipe->background_property,
-			pipe->background);
-	}
-
-	if (pipe->color_mgmt_changed) {
-		igt_crtc_set_property(pipe, pipe->degamma_property,
-				      pipe->degamma_blob);
-		igt_crtc_set_property(pipe, pipe->ctm_property,
-				      pipe->ctm_blob);
-		igt_crtc_set_property(pipe, pipe->gamma_property,
-				      pipe->gamma_blob);
-	}
+	for (i = 0; i < IGT_NUM_CRTC_PROPS; i++)
+		if (!is_atomic_prop(i))
+			igt_crtc_set_property(pipe, pipe->props[i], pipe->values[i]);
 
 	for (i = 0; i < pipe->n_planes; i++) {
 		igt_plane_t *plane = &pipe->planes[i];
@@ -2394,9 +2378,10 @@ static int igt_pipe_commit(igt_pipe_t *pipe,
 }
 
 static void
-igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length)
+igt_pipe_replace_blob(igt_pipe_t *pipe, enum igt_atomic_crtc_properties prop, void *ptr, size_t length)
 {
 	igt_display_t *display = pipe->display;
+	uint64_t *blob = &pipe->values[prop];
 	uint32_t blob_id = 0;
 
 	if (*blob != 0)
@@ -2408,6 +2393,7 @@ igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length
 						     ptr, length, &blob_id) == 0);
 
 	*blob = blob_id;
+	igt_pipe_obj_set_prop_changed(pipe, prop);
 }
 
 /*
@@ -2415,51 +2401,23 @@ igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length
  */
 static void igt_atomic_prepare_crtc_commit(igt_pipe_t *pipe_obj, drmModeAtomicReq *req)
 {
-	if (pipe_obj->background_changed)
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_BACKGROUND, pipe_obj->background);
-
-	if (pipe_obj->color_mgmt_changed) {
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_DEGAMMA_LUT, pipe_obj->degamma_blob);
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_CTM, pipe_obj->ctm_blob);
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_GAMMA_LUT, pipe_obj->gamma_blob);
-	}
-
-	if (pipe_obj->mode_changed) {
-		igt_output_t *output = igt_pipe_get_output(pipe_obj);
-
-		if (!output) {
-			igt_pipe_replace_blob(pipe_obj, &pipe_obj->mode_blob, NULL, 0);
-
-			LOG(pipe_obj->display, "%s: Setting NULL mode\n",
-			    kmstest_pipe_name(pipe_obj->pipe));
-		} else {
-			drmModeModeInfo *mode = igt_output_get_mode(output);
+	int i;
 
-			igt_pipe_replace_blob(pipe_obj, &pipe_obj->mode_blob, mode, sizeof(*mode));
+	for (i = 0; i < IGT_NUM_CRTC_PROPS; i++) {
+		if (!igt_pipe_obj_is_prop_changed(pipe_obj, i))
+			continue;
 
-			LOG(pipe_obj->display, "%s: Setting mode %s from %s\n",
-			    kmstest_pipe_name(pipe_obj->pipe),
-			    mode->name, igt_output_name(output));
-		}
+		igt_debug("Pipe %s: Setting property \"%s\" to 0x%"PRIx64"/%"PRIi64"\n",
+			kmstest_pipe_name(pipe_obj->pipe), igt_crtc_prop_names[i],
+			pipe_obj->values[i], pipe_obj->values[i]);
 
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_MODE_ID, pipe_obj->mode_blob);
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_ACTIVE, !!output);
+		igt_assert_lt(0, drmModeAtomicAddProperty(req, pipe_obj->crtc_id, pipe_obj->props[i], pipe_obj->values[i]));
 	}
 
 	if (pipe_obj->out_fence_fd != -1) {
 		close(pipe_obj->out_fence_fd);
 		pipe_obj->out_fence_fd = -1;
 	}
-
-	if (pipe_obj->out_fence_requested)
-	{
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_OUT_FENCE_PTR,
-		    (uint64_t)(uintptr_t) &pipe_obj->out_fence_fd);
-	}
-
-	/*
-	 *	TODO: Add all crtc level properties here
-	 */
 }
 
 /*
@@ -2550,15 +2508,21 @@ display_commit_changed(igt_display_t *display, enum igt_commit_style s)
 		igt_pipe_t *pipe_obj = &display->pipes[pipe];
 		igt_plane_t *plane;
 
-		pipe_obj->color_mgmt_changed = false;
-		pipe_obj->background_changed = false;
+		if (s == COMMIT_ATOMIC) {
+			if (igt_pipe_obj_is_prop_changed(pipe_obj, IGT_CRTC_OUT_FENCE_PTR))
+				igt_assert(pipe_obj->out_fence_fd >= 0);
 
-		if (s != COMMIT_UNIVERSAL)
-			pipe_obj->mode_changed = false;
-
-		if (s == COMMIT_ATOMIC && pipe_obj->out_fence_requested) {
-			pipe_obj->out_fence_requested = false;
-			igt_assert(pipe_obj->out_fence_fd >= 0);
+			pipe_obj->changed = 0;
+		} else {
+			igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_BACKGROUND);
+			igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_CTM);
+			igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_DEGAMMA_LUT);
+			igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_GAMMA_LUT);
+
+			if (s != COMMIT_UNIVERSAL) {
+				igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
+				igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_ACTIVE);
+			}
 		}
 
 		for_each_plane_on_pipe(display, pipe, plane) {
@@ -2812,33 +2776,83 @@ void igt_output_override_mode(igt_output_t *output, drmModeModeInfo *mode)
 
 	output->use_override_mode = !!mode;
 
-	if (pipe)
-		pipe->mode_changed = true;
+	if (pipe) {
+		if (output->display->is_atomic)
+			igt_pipe_replace_blob(pipe, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(*mode));
+		else
+			igt_pipe_obj_set_prop_changed(pipe, IGT_CRTC_MODE_ID);
+	}
 }
 
 void igt_output_set_pipe(igt_output_t *output, enum pipe pipe)
 {
 	igt_display_t *display = output->display;
-	igt_pipe_t *old_pipe;
+	igt_pipe_t *old_pipe = NULL, *pipe_obj = NULL;;
 
 	igt_assert(output->name);
 
-	if (output->pending_pipe != PIPE_NONE) {
+	if (output->pending_pipe != PIPE_NONE)
 		old_pipe = igt_output_get_driving_pipe(output);
 
-		old_pipe->mode_changed = true;
-	}
+	if (pipe != PIPE_NONE)
+		pipe_obj = &display->pipes[pipe];
 
 	LOG(display, "%s: set_pipe(%s)\n", igt_output_name(output),
 	    kmstest_pipe_name(pipe));
 	output->pending_pipe = pipe;
 
-	if (pipe != PIPE_NONE)
-		display->pipes[pipe].mode_changed = true;
+	if (old_pipe) {
+		igt_output_t *old_output;
+
+		old_output = igt_pipe_get_output(old_pipe);
+		if (!old_output) {
+			if (display->is_atomic)
+				igt_pipe_replace_blob(old_pipe, IGT_CRTC_MODE_ID, NULL, 0);
+			else
+				igt_pipe_obj_set_prop_changed(old_pipe, IGT_CRTC_MODE_ID);
+
+			igt_pipe_obj_set_prop_value(old_pipe, IGT_CRTC_ACTIVE, 0);
+		}
+	}
 
 	igt_output_set_prop_value(output, IGT_CONNECTOR_CRTC_ID, pipe == PIPE_NONE ? 0 : display->pipes[pipe].crtc_id);
 
 	igt_output_refresh(output);
+
+	if (pipe_obj) {
+		if (display->is_atomic)
+			igt_pipe_replace_blob(pipe_obj, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(drmModeModeInfo));
+		else
+			igt_pipe_obj_set_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
+
+		igt_pipe_obj_set_prop_value(pipe_obj, IGT_CRTC_ACTIVE, 1);
+	}
+}
+
+/*
+ * igt_pipe_refresh:
+ * @display: a pointer to an #igt_display_t structure
+ * @pipe: Pipe to refresh
+ * @force: Should be set to true if mode_blob is no longer considered
+ * to be valid, for example after doing an atomic commit during fork or closing display fd.
+ *
+ * Requests the pipe to be part of the state on next update.
+ * This is useful when state may have been out of sync after
+ * a fork, or we just want to be sure the pipe is included
+ * in the next commit.
+ */
+void igt_pipe_refresh(igt_display_t *display, enum pipe pipe, bool force)
+{
+	igt_pipe_t *pipe_obj = &display->pipes[pipe];
+
+	if (force && display->is_atomic) {
+		igt_output_t *output = igt_pipe_get_output(pipe_obj);
+
+		pipe_obj->values[IGT_CRTC_MODE_ID] = 0;
+		if (output)
+			igt_pipe_replace_blob(pipe_obj, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(drmModeModeInfo));
+	} else
+		igt_pipe_obj_set_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
 }
 
 void igt_output_set_scaling_mode(igt_output_t *output, uint64_t scaling_mode)
@@ -3046,28 +3060,25 @@ void igt_plane_set_rotation(igt_plane_t *plane, igt_rotation_t rotation)
  */
 void igt_pipe_request_out_fence(igt_pipe_t *pipe)
 {
-	pipe->out_fence_requested = true;
+	igt_pipe_obj_set_prop_value(pipe, IGT_CRTC_OUT_FENCE_PTR, (ptrdiff_t)&pipe->out_fence_fd);
 }
 
 void
 igt_pipe_set_degamma_lut(igt_pipe_t *pipe, void *ptr, size_t length)
 {
-	igt_pipe_replace_blob(pipe, &pipe->degamma_blob, ptr, length);
-	pipe->color_mgmt_changed = 1;
+	igt_pipe_replace_blob(pipe, IGT_CRTC_DEGAMMA_LUT, ptr, length);
 }
 
 void
 igt_pipe_set_ctm_matrix(igt_pipe_t *pipe, void *ptr, size_t length)
 {
-	igt_pipe_replace_blob(pipe, &pipe->ctm_blob, ptr, length);
-	pipe->color_mgmt_changed = 1;
+	igt_pipe_replace_blob(pipe, IGT_CRTC_CTM, ptr, length);
 }
 
 void
 igt_pipe_set_gamma_lut(igt_pipe_t *pipe, void *ptr, size_t length)
 {
-	igt_pipe_replace_blob(pipe, &pipe->gamma_blob, ptr, length);
-	pipe->color_mgmt_changed = 1;
+	igt_pipe_replace_blob(pipe, IGT_CRTC_GAMMA_LUT, ptr, length);
 }
 
 /**
@@ -3088,9 +3099,7 @@ void igt_crtc_set_background(igt_pipe_t *pipe, uint64_t background)
 	    kmstest_pipe_name(pipe->pipe),
 	    pipe->pipe, background);
 
-	pipe->background = background;
-
-	pipe->background_changed = true;
+	igt_pipe_obj_set_prop_value(pipe, IGT_CRTC_BACKGROUND, background);
 }
 
 void igt_wait_for_vblank_count(int drm_fd, enum pipe pipe, int count)
lib/igt_kms.h +30 -47

100 lines not on this page · raw message

tests/kms_atomic_interruptible.c +2 -2
index 5570854390ea..dd753b6e5db3 100644
@@ -156,8 +156,8 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
 				uint32_t count_props[3] = { 2, 1, 6 };
 				uint32_t props[] = {
 					/* crtc: 2 props */
-					plane->pipe->atomic_props_crtc[IGT_CRTC_MODE_ID],
-					plane->pipe->atomic_props_crtc[IGT_CRTC_ACTIVE],
+					plane->pipe->props[IGT_CRTC_MODE_ID],
+					plane->pipe->props[IGT_CRTC_ACTIVE],
 					/* connector: 1 prop */
 					output->props[IGT_CONNECTOR_CRTC_ID],
 					/* plane: remainder props */
tests/kms_atomic_transition.c +1 -1
index 2ae75f2d6630..7ddb65cea183 100644
@@ -633,7 +633,7 @@ static unsigned set_combinations(igt_display_t *display, unsigned mask, struct i
 		drmModeModeInfo *mode = NULL;
 
 		if (!(mask & (1 << pipe))) {
-			if (display->pipes[pipe].mode_blob) {
+			if (igt_pipe_is_prop_changed(display, pipe, IGT_CRTC_ACTIVE)) {
 				event_mask |= 1 << pipe;
 				igt_plane_set_fb(plane, NULL);
 			}
tests/kms_crtc_background_color.c +1 -1
index e12e163449f8..659a30b90219 100644
@@ -137,7 +137,7 @@ static void test_crtc_background(data_t *data)
 		igt_output_set_pipe(output, pipe);
 
 		plane = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
-		igt_require(plane->pipe->background_property);
+		igt_require(plane->pipe->props[IGT_CRTC_BACKGROUND]);
 
 		prepare_crtc(data, output, pipe, plane, 1, PURPLE, BLACK64);
 
Signature · 6 lines
2.14.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#11 lore raw

PATCH 1/1 lib/igt_kms: Rework pipe properties to be more atomic, v4.

In the future I want to allow tests to commit more properties, but for this to work I have to fix all properties to work better with atomic commit. Instead of special casing each property make a bitmask for all property changed flags, and try to commit all properties.

This has been the most involved one, since legacy pipe commit still handles a lot of the properties differently from the rest.

Changes since v1:
- Dump all changed properties on commit.
- Fix bug in igt_pipe_refresh().
Changes since v2:
- Set pipe ACTIVE property changed flag on init. Changes since v3:
- Add a missing igt_pipe_refresh() to kms_atomic_interruptible.

---
 lib/igt_kms.c                     | 217 ++++++++++++++++++++------------------
 lib/igt_kms.h                     |  77 ++++++--------
 tests/kms_atomic_interruptible.c  |   8 +-
 tests/kms_atomic_transition.c     |   2 +-
 tests/kms_crtc_background_color.c |   2 +-
 5 files changed, 151 insertions(+), 155 deletions(-)
lib/igt_kms.c +113 -104
index 6e0052ebe7a7..a81d7998433a 100644
@@ -259,8 +259,8 @@ igt_atomic_fill_connector_props(igt_display_t *display, igt_output_t *output,
 }
 
 static void
-igt_atomic_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
-			int num_crtc_props, const char **crtc_prop_names)
+igt_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
+		    int num_crtc_props, const char **crtc_prop_names)
 {
 	drmModeObjectPropertiesPtr props;
 	int i, j, fd;
@@ -278,7 +278,7 @@ igt_atomic_fill_pipe_props(igt_display_t *display, igt_pipe_t *pipe,
 			if (strcmp(prop->name, crtc_prop_names[j]) != 0)
 				continue;
 
-			pipe->atomic_props_crtc[j] = props->props[i];
+			pipe->props[j] = props->props[i];
 			break;
 		}
 
@@ -1690,7 +1690,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 		int p = 1;
 		int j, type;
 		uint8_t last_plane = 0, n_planes = 0;
-		uint64_t prop_value;
 
 		pipe->crtc_id = resources->crtcs[i];
 		pipe->display = display;
@@ -1700,29 +1699,16 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 		pipe->planes = NULL;
 		pipe->out_fence_fd = -1;
 
+		igt_fill_pipe_props(display, pipe, IGT_NUM_CRTC_PROPS, igt_crtc_prop_names);
+
+		/* Force modeset disable on first commit */
+		igt_pipe_obj_set_prop_changed(pipe, IGT_CRTC_MODE_ID);
+		igt_pipe_obj_set_prop_changed(pipe, IGT_CRTC_ACTIVE);
+
 		get_crtc_property(display->drm_fd, pipe->crtc_id,
-				    "background_color",
-				    &pipe->background_property,
-				    &prop_value,
+				    "background_color", NULL,
+				    &pipe->values[IGT_CRTC_BACKGROUND],
 				    NULL);
-		pipe->background = (uint32_t)prop_value;
-		get_crtc_property(display->drm_fd, pipe->crtc_id,
-				  "DEGAMMA_LUT",
-				  &pipe->degamma_property,
-				  NULL,
-				  NULL);
-		get_crtc_property(display->drm_fd, pipe->crtc_id,
-				  "CTM",
-				  &pipe->ctm_property,
-				  NULL,
-				  NULL);
-		get_crtc_property(display->drm_fd, pipe->crtc_id,
-				  "GAMMA_LUT",
-				  &pipe->gamma_property,
-				  NULL,
-				  NULL);
-
-		igt_atomic_fill_pipe_props(display, pipe, IGT_NUM_CRTC_PROPS, igt_crtc_prop_names);
 
 		/* count number of valid planes */
 		for (j = 0; j < plane_resources->count_planes; j++) {
@@ -1805,8 +1791,6 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 			igt_assert_eq(p, n_planes);
 
 		pipe->n_planes = n_planes;
-
-		pipe->mode_changed = true;
 	}
 
 	/*
@@ -2283,7 +2267,7 @@ static int igt_primary_plane_commit_legacy(igt_plane_t *primary,
 
 	if (!igt_plane_is_prop_changed(primary, IGT_PLANE_FB_ID) &&
 	    !(primary->changed & IGT_PLANE_COORD_CHANGED_MASK) &&
-	    !primary->pipe->mode_changed)
+	    !igt_pipe_obj_is_prop_changed(primary->pipe, IGT_CRTC_MODE_ID))
 		return 0;
 
 	crtc_id = pipe->crtc_id;
@@ -2352,6 +2336,16 @@ static int igt_plane_commit(igt_plane_t *plane,
 	}
 }
 
+static bool is_atomic_prop(enum igt_atomic_crtc_properties prop)
+{
+       if (prop == IGT_CRTC_MODE_ID ||
+	   prop == IGT_CRTC_ACTIVE ||
+	   prop == IGT_CRTC_OUT_FENCE_PTR)
+		return true;
+
+	return false;
+}
+
 /*
  * Commit all plane changes to an output.  Note that if @s is COMMIT_LEGACY,
  * enabling/disabling the primary plane will also enable/disable the CRTC.
@@ -2369,19 +2363,9 @@ static int igt_pipe_commit(igt_pipe_t *pipe,
 	int i;
 	int ret;
 
-	if (pipe->background_changed) {
-		igt_crtc_set_property(pipe, pipe->background_property,
-			pipe->background);
-	}
-
-	if (pipe->color_mgmt_changed) {
-		igt_crtc_set_property(pipe, pipe->degamma_property,
-				      pipe->degamma_blob);
-		igt_crtc_set_property(pipe, pipe->ctm_property,
-				      pipe->ctm_blob);
-		igt_crtc_set_property(pipe, pipe->gamma_property,
-				      pipe->gamma_blob);
-	}
+	for (i = 0; i < IGT_NUM_CRTC_PROPS; i++)
+		if (!is_atomic_prop(i))
+			igt_crtc_set_property(pipe, pipe->props[i], pipe->values[i]);
 
 	for (i = 0; i < pipe->n_planes; i++) {
 		igt_plane_t *plane = &pipe->planes[i];
@@ -2394,9 +2378,10 @@ static int igt_pipe_commit(igt_pipe_t *pipe,
 }
 
 static void
-igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length)
+igt_pipe_replace_blob(igt_pipe_t *pipe, enum igt_atomic_crtc_properties prop, void *ptr, size_t length)
 {
 	igt_display_t *display = pipe->display;
+	uint64_t *blob = &pipe->values[prop];
 	uint32_t blob_id = 0;
 
 	if (*blob != 0)
@@ -2408,6 +2393,7 @@ igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length
 						     ptr, length, &blob_id) == 0);
 
 	*blob = blob_id;
+	igt_pipe_obj_set_prop_changed(pipe, prop);
 }
 
 /*
@@ -2415,51 +2401,23 @@ igt_pipe_replace_blob(igt_pipe_t *pipe, uint64_t *blob, void *ptr, size_t length
  */
 static void igt_atomic_prepare_crtc_commit(igt_pipe_t *pipe_obj, drmModeAtomicReq *req)
 {
-	if (pipe_obj->background_changed)
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_BACKGROUND, pipe_obj->background);
-
-	if (pipe_obj->color_mgmt_changed) {
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_DEGAMMA_LUT, pipe_obj->degamma_blob);
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_CTM, pipe_obj->ctm_blob);
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_GAMMA_LUT, pipe_obj->gamma_blob);
-	}
-
-	if (pipe_obj->mode_changed) {
-		igt_output_t *output = igt_pipe_get_output(pipe_obj);
-
-		if (!output) {
-			igt_pipe_replace_blob(pipe_obj, &pipe_obj->mode_blob, NULL, 0);
-
-			LOG(pipe_obj->display, "%s: Setting NULL mode\n",
-			    kmstest_pipe_name(pipe_obj->pipe));
-		} else {
-			drmModeModeInfo *mode = igt_output_get_mode(output);
+	int i;
 
-			igt_pipe_replace_blob(pipe_obj, &pipe_obj->mode_blob, mode, sizeof(*mode));
+	for (i = 0; i < IGT_NUM_CRTC_PROPS; i++) {
+		if (!igt_pipe_obj_is_prop_changed(pipe_obj, i))
+			continue;
 
-			LOG(pipe_obj->display, "%s: Setting mode %s from %s\n",
-			    kmstest_pipe_name(pipe_obj->pipe),
-			    mode->name, igt_output_name(output));
-		}
+		igt_debug("Pipe %s: Setting property \"%s\" to 0x%"PRIx64"/%"PRIi64"\n",
+			kmstest_pipe_name(pipe_obj->pipe), igt_crtc_prop_names[i],
+			pipe_obj->values[i], pipe_obj->values[i]);
 
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_MODE_ID, pipe_obj->mode_blob);
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_ACTIVE, !!output);
+		igt_assert_lt(0, drmModeAtomicAddProperty(req, pipe_obj->crtc_id, pipe_obj->props[i], pipe_obj->values[i]));
 	}
 
 	if (pipe_obj->out_fence_fd != -1) {
 		close(pipe_obj->out_fence_fd);
 		pipe_obj->out_fence_fd = -1;
 	}
-
-	if (pipe_obj->out_fence_requested)
-	{
-		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_OUT_FENCE_PTR,
-		    (uint64_t)(uintptr_t) &pipe_obj->out_fence_fd);
-	}
-
-	/*
-	 *	TODO: Add all crtc level properties here
-	 */
 }
 
 /*
@@ -2550,15 +2508,21 @@ display_commit_changed(igt_display_t *display, enum igt_commit_style s)
 		igt_pipe_t *pipe_obj = &display->pipes[pipe];
 		igt_plane_t *plane;
 
-		pipe_obj->color_mgmt_changed = false;
-		pipe_obj->background_changed = false;
+		if (s == COMMIT_ATOMIC) {
+			if (igt_pipe_obj_is_prop_changed(pipe_obj, IGT_CRTC_OUT_FENCE_PTR))
+				igt_assert(pipe_obj->out_fence_fd >= 0);
 
-		if (s != COMMIT_UNIVERSAL)
-			pipe_obj->mode_changed = false;
-
-		if (s == COMMIT_ATOMIC && pipe_obj->out_fence_requested) {
-			pipe_obj->out_fence_requested = false;
-			igt_assert(pipe_obj->out_fence_fd >= 0);
+			pipe_obj->changed = 0;
+		} else {
+			igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_BACKGROUND);
+			igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_CTM);
+			igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_DEGAMMA_LUT);
+			igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_GAMMA_LUT);
+
+			if (s != COMMIT_UNIVERSAL) {
+				igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
+				igt_pipe_obj_clear_prop_changed(pipe_obj, IGT_CRTC_ACTIVE);
+			}
 		}
 
 		for_each_plane_on_pipe(display, pipe, plane) {
@@ -2812,33 +2776,83 @@ void igt_output_override_mode(igt_output_t *output, drmModeModeInfo *mode)
 
 	output->use_override_mode = !!mode;
 
-	if (pipe)
-		pipe->mode_changed = true;
+	if (pipe) {
+		if (output->display->is_atomic)
+			igt_pipe_replace_blob(pipe, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(*mode));
+		else
+			igt_pipe_obj_set_prop_changed(pipe, IGT_CRTC_MODE_ID);
+	}
 }
 
 void igt_output_set_pipe(igt_output_t *output, enum pipe pipe)
 {
 	igt_display_t *display = output->display;
-	igt_pipe_t *old_pipe;
+	igt_pipe_t *old_pipe = NULL, *pipe_obj = NULL;;
 
 	igt_assert(output->name);
 
-	if (output->pending_pipe != PIPE_NONE) {
+	if (output->pending_pipe != PIPE_NONE)
 		old_pipe = igt_output_get_driving_pipe(output);
 
-		old_pipe->mode_changed = true;
-	}
+	if (pipe != PIPE_NONE)
+		pipe_obj = &display->pipes[pipe];
 
 	LOG(display, "%s: set_pipe(%s)\n", igt_output_name(output),
 	    kmstest_pipe_name(pipe));
 	output->pending_pipe = pipe;
 
-	if (pipe != PIPE_NONE)
-		display->pipes[pipe].mode_changed = true;
+	if (old_pipe) {
+		igt_output_t *old_output;
+
+		old_output = igt_pipe_get_output(old_pipe);
+		if (!old_output) {
+			if (display->is_atomic)
+				igt_pipe_replace_blob(old_pipe, IGT_CRTC_MODE_ID, NULL, 0);
+			else
+				igt_pipe_obj_set_prop_changed(old_pipe, IGT_CRTC_MODE_ID);
+
+			igt_pipe_obj_set_prop_value(old_pipe, IGT_CRTC_ACTIVE, 0);
+		}
+	}
 
 	igt_output_set_prop_value(output, IGT_CONNECTOR_CRTC_ID, pipe == PIPE_NONE ? 0 : display->pipes[pipe].crtc_id);
 
 	igt_output_refresh(output);
+
+	if (pipe_obj) {
+		if (display->is_atomic)
+			igt_pipe_replace_blob(pipe_obj, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(drmModeModeInfo));
+		else
+			igt_pipe_obj_set_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
+
+		igt_pipe_obj_set_prop_value(pipe_obj, IGT_CRTC_ACTIVE, 1);
+	}
+}
+
+/*
+ * igt_pipe_refresh:
+ * @display: a pointer to an #igt_display_t structure
+ * @pipe: Pipe to refresh
+ * @force: Should be set to true if mode_blob is no longer considered
+ * to be valid, for example after doing an atomic commit during fork or closing display fd.
+ *
+ * Requests the pipe to be part of the state on next update.
+ * This is useful when state may have been out of sync after
+ * a fork, or we just want to be sure the pipe is included
+ * in the next commit.
+ */
+void igt_pipe_refresh(igt_display_t *display, enum pipe pipe, bool force)
+{
+	igt_pipe_t *pipe_obj = &display->pipes[pipe];
+
+	if (force && display->is_atomic) {
+		igt_output_t *output = igt_pipe_get_output(pipe_obj);
+
+		pipe_obj->values[IGT_CRTC_MODE_ID] = 0;
+		if (output)
+			igt_pipe_replace_blob(pipe_obj, IGT_CRTC_MODE_ID, igt_output_get_mode(output), sizeof(drmModeModeInfo));
+	} else
+		igt_pipe_obj_set_prop_changed(pipe_obj, IGT_CRTC_MODE_ID);
 }
 
 void igt_output_set_scaling_mode(igt_output_t *output, uint64_t scaling_mode)
@@ -3046,28 +3060,25 @@ void igt_plane_set_rotation(igt_plane_t *plane, igt_rotation_t rotation)
  */
 void igt_pipe_request_out_fence(igt_pipe_t *pipe)
 {
-	pipe->out_fence_requested = true;
+	igt_pipe_obj_set_prop_value(pipe, IGT_CRTC_OUT_FENCE_PTR, (ptrdiff_t)&pipe->out_fence_fd);
 }
 
 void
 igt_pipe_set_degamma_lut(igt_pipe_t *pipe, void *ptr, size_t length)
 {
-	igt_pipe_replace_blob(pipe, &pipe->degamma_blob, ptr, length);
-	pipe->color_mgmt_changed = 1;
+	igt_pipe_replace_blob(pipe, IGT_CRTC_DEGAMMA_LUT, ptr, length);
 }
 
 void
 igt_pipe_set_ctm_matrix(igt_pipe_t *pipe, void *ptr, size_t length)
 {
-	igt_pipe_replace_blob(pipe, &pipe->ctm_blob, ptr, length);
-	pipe->color_mgmt_changed = 1;
+	igt_pipe_replace_blob(pipe, IGT_CRTC_CTM, ptr, length);
 }
 
 void
 igt_pipe_set_gamma_lut(igt_pipe_t *pipe, void *ptr, size_t length)
 {
-	igt_pipe_replace_blob(pipe, &pipe->gamma_blob, ptr, length);
-	pipe->color_mgmt_changed = 1;
+	igt_pipe_replace_blob(pipe, IGT_CRTC_GAMMA_LUT, ptr, length);
 }
 
 /**
@@ -3088,9 +3099,7 @@ void igt_crtc_set_background(igt_pipe_t *pipe, uint64_t background)
 	    kmstest_pipe_name(pipe->pipe),
 	    pipe->pipe, background);
 
-	pipe->background = background;
-
-	pipe->background_changed = true;
+	igt_pipe_obj_set_prop_value(pipe, IGT_CRTC_BACKGROUND, background);
 }
 
 void igt_wait_for_vblank_count(int drm_fd, enum pipe pipe, int count)
lib/igt_kms.h +30 -47

100 lines not on this page · raw message

tests/kms_atomic_interruptible.c +6 -2
index 5570854390ea..1058dcce71b5 100644
@@ -156,8 +156,8 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
 				uint32_t count_props[3] = { 2, 1, 6 };
 				uint32_t props[] = {
 					/* crtc: 2 props */
-					plane->pipe->atomic_props_crtc[IGT_CRTC_MODE_ID],
-					plane->pipe->atomic_props_crtc[IGT_CRTC_ACTIVE],
+					plane->pipe->props[IGT_CRTC_MODE_ID],
+					plane->pipe->props[IGT_CRTC_ACTIVE],
 					/* connector: 1 prop */
 					output->props[IGT_CONNECTOR_CRTC_ID],
 					/* plane: remainder props */
@@ -253,6 +253,10 @@ static void run_plane_test(igt_display_t *display, enum pipe pipe, igt_output_t
 
 	igt_waitchildren();
 
+	/* The mode is unset by the forked helper, force a refresh here */
+	if (test == test_legacy_modeset || test_atomic_modeset)
+		igt_pipe_refresh(display, pipe, true);
+
 	igt_plane_set_fb(plane, NULL);
 	igt_plane_set_fb(primary, NULL);
 	igt_output_set_pipe(output, PIPE_NONE);
tests/kms_atomic_transition.c +1 -1
index 2ae75f2d6630..7ddb65cea183 100644
@@ -633,7 +633,7 @@ static unsigned set_combinations(igt_display_t *display, unsigned mask, struct i
 		drmModeModeInfo *mode = NULL;
 
 		if (!(mask & (1 << pipe))) {
-			if (display->pipes[pipe].mode_blob) {
+			if (igt_pipe_is_prop_changed(display, pipe, IGT_CRTC_ACTIVE)) {
 				event_mask |= 1 << pipe;
 				igt_plane_set_fb(plane, NULL);
 			}
tests/kms_crtc_background_color.c +1 -1
index e12e163449f8..659a30b90219 100644
@@ -137,7 +137,7 @@ static void test_crtc_background(data_t *data)
 		igt_output_set_pipe(output, pipe);
 
 		plane = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
-		igt_require(plane->pipe->background_property);
+		igt_require(plane->pipe->props[IGT_CRTC_BACKGROUND]);
 
 		prepare_crtc(data, output, pipe, plane, 1, PURPLE, BLACK64);
 
Signature · 6 lines
2.14.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#12 lore raw

PATCH v2 7/8 igt/kms_rotation_crc : Fix flip tests for sprite plane

In reply to Maarten Lankhorst

This test was flipping the primary plane instead of the sprite plane. Flip the correct plane to make the test pass properly.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102691

---
 tests/kms_rotation_crc.c | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)
tests/kms_rotation_crc.c +17 -6
index 4932a0d44410..b8327dfa0d83 100644
@@ -332,6 +332,9 @@ static void test_plane_rotation(data_t *data, int plane_type)
 	enum igt_commit_style commit = COMMIT_LEGACY;
 	int ret;
 
+	if (data->flips && plane_type != DRM_PLANE_TYPE_PRIMARY)
+		igt_require(data->display.is_atomic);
+
 	if (plane_type == DRM_PLANE_TYPE_PRIMARY || plane_type == DRM_PLANE_TYPE_CURSOR)
 		commit = COMMIT_UNIVERSAL;
 
@@ -390,12 +393,20 @@ static void test_plane_rotation(data_t *data, int plane_type)
 			 * check CRC against that one as well.
 			 */
 			if (data->flips) {
-				ret = drmModePageFlip(data->gfx_fd,
-						      output->config.crtc->crtc_id,
-						      data->fb_flip.fb_id,
-						      DRM_MODE_PAGE_FLIP_EVENT,
-						      NULL);
-				igt_assert_eq(ret, 0);
+				igt_plane_set_fb(plane, &data->fb_flip);
+				if (data->rotation == IGT_ROTATION_90 || data->rotation == IGT_ROTATION_270)
+					igt_plane_set_size(plane, data->fb.height, data->fb.width);
+
+				if (plane_type != DRM_PLANE_TYPE_PRIMARY) {
+					igt_display_commit_atomic(display, DRM_MODE_PAGE_FLIP_EVENT | DRM_MODE_ATOMIC_NONBLOCK, NULL);
+				} else {
+					ret = drmModePageFlip(data->gfx_fd,
+							output->config.crtc->crtc_id,
+							data->fb_flip.fb_id,
+							DRM_MODE_PAGE_FLIP_EVENT,
+							NULL);
+					igt_assert_eq(ret, 0);
+				}
 				wait_for_pageflip(data->gfx_fd);
 				igt_pipe_crc_collect_crc(data->pipe_crc,
 							 &crc_output);
Signature · 6 lines
2.14.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#13 lore raw

PATCH v2 8/8 tests: Rename kms_pipe_color to kms_color

In reply to Maarten Lankhorst

Rename kms_pipe_color to kms_color, and rename the invalid tests to pipe-invalid. To prepare for adding support for plane color management.

---
 tests/Makefile.sources                  | 2 +-
 tests/{kms_pipe_color.c => kms_color.c} | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)
 rename tests/{kms_pipe_color.c => kms_color.c} (99%)
tests/Makefile.sources +1 -1
index 0adc28a014d2..c4d320ebc61b 100644
@@ -177,6 +177,7 @@ TESTS_progs = \
 	kms_busy \
 	kms_ccs \
 	kms_chv_cursor_fail \
+	kms_color \
 	kms_concurrent \
 	kms_crtc_background_color \
 	kms_cursor_crc \
@@ -197,7 +198,6 @@ TESTS_progs = \
 	kms_mmio_vs_cs_flip \
 	kms_panel_fitting \
 	kms_pipe_b_c_ivb \
-	kms_pipe_color \
 	kms_pipe_crc_basic \
 	kms_plane \
 	kms_plane_lowres \
tests/kms_color.c renamed from tests/kms_pipe_color.c +2 -2
similarity index 99%
rename from tests/kms_pipe_color.c
rename to tests/kms_color.c
index ccfc08e6be15..060a60152808 100644
@@ -1205,10 +1205,10 @@ igt_main
 		igt_subtest_group
 			run_tests_for_pipe(&data, pipe);
 
-	igt_subtest_f("invalid-lut-sizes")
+	igt_subtest_f("pipe-invalid-lut-sizes")
 		invalid_lut_sizes(&data);
 
-	igt_subtest_f("invalid-ctm-matrix-sizes")
+	igt_subtest_f("pipe-invalid-ctm-matrix-sizes")
 		invalid_ctm_matrix_sizes(&data);
 
 	igt_fixture {
Signature · 6 lines
2.14.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Reviewed-by on v2 8/8
#14 lore raw

Re: [PATCH i-g-t v2 8/8] tests: Rename kms_pipe_color to kms_color

Name change is ok to help the work in the future.

Quoted 5 lines · Maarten Lankhorst

Rename kms_pipe_color to kms_color, and rename the invalid tests to pipe-invalid.
To prepare for adding support for plane color management.

Quoted 43 lines

---
 tests/Makefile.sources                  | 2 +-
 tests/{kms_pipe_color.c => kms_color.c} | 4 ++--

 2 files changed, 3 insertions(+), 3 deletions(-)

 rename tests/{kms_pipe_color.c => kms_color.c} (99%)

tests/Makefile.sources +1 -1
index 0adc28a014d2..c4d320ebc61b 100644
@@ -177,6 +177,7 @@ TESTS_progs = \
  	kms_busy \
  	kms_ccs \
  	kms_chv_cursor_fail \
+	kms_color \
  	kms_concurrent \
  	kms_crtc_background_color \
  	kms_cursor_crc \
@@ -197,7 +198,6 @@ TESTS_progs = \
  	kms_mmio_vs_cs_flip \
  	kms_panel_fitting \
  	kms_pipe_b_c_ivb \
-	kms_pipe_color \
  	kms_pipe_crc_basic \
  	kms_plane \
  	kms_plane_lowres \
tests/kms_color.c renamed from tests/kms_pipe_color.c +0 -0
similarity index 99%
rename from tests/kms_pipe_color.c
rename to tests/kms_color.c
index ccfc08e6be15..060a60152808 100644
@@ -1205,10 +1205,10 @@ igt_main

  igt_subtest_group run_tests_for_pipe(&data, pipe);

tests/kms_color.c renamed from tests/kms_pipe_color.c +1 -1
-	igt_subtest_f("invalid-lut-sizes")
+	igt_subtest_f("pipe-invalid-lut-sizes")

  invalid_lut_sizes(&data);

tests/kms_color.c renamed from tests/kms_pipe_color.c +1 -1
-	igt_subtest_f("invalid-ctm-matrix-sizes")
+	igt_subtest_f("pipe-invalid-ctm-matrix-sizes")
Quoted 3 lines

  invalid_ctm_matrix_sizes(&data);

  igt_fixture {

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

#15 lore raw

✓ Fi.CI.BAT: success for lib/igt_kms: Convert properties to be more atomic-like. (rev2)

In reply to Maarten Lankhorst
== Series Details ==

== Series Details ==

Series: lib/igt_kms: Convert properties to be more atomic-like. (rev2)
URL : https://patchwork.freedesktop.org/series/30903/
State : success

== Summary ==

IGT patchset tested on top of latest successful build 2885b10f99b4beeb046e75af8b8488c229f629d3 igt/gem_exec_schedule: Ignore set-priority failures on old kernels

with latest DRM-Tip kernel build CI_DRM_3146
aa884e1abdf2 drm-tip: 2017y-09m-27d-15h-39m-07s UTC integration manifest

fi-bdw-5557u     total:289  pass:268  dwarn:0   dfail:0   fail:0   skip:21  time:444s
fi-bdw-gvtdvm    total:289  pass:265  dwarn:0   dfail:0   fail:0   skip:24  time:476s
fi-blb-e6850     total:289  pass:224  dwarn:1   dfail:0   fail:0   skip:64  time:425s
fi-bsw-n3050     total:289  pass:243  dwarn:0   dfail:0   fail:0   skip:46  time:520s
fi-bwr-2160      total:289  pass:184  dwarn:0   dfail:0   fail:0   skip:105 time:281s
fi-bxt-j4205     total:289  pass:260  dwarn:0   dfail:0   fail:0   skip:29  time:499s
fi-byt-j1900     total:289  pass:254  dwarn:1   dfail:0   fail:0   skip:34  time:511s
fi-cfl-s         total:289  pass:222  dwarn:27  dfail:0   fail:8   skip:32  time:523s
fi-cnl-y         total:289  pass:259  dwarn:0   dfail:0   fail:3   skip:27  time:653s
fi-elk-e7500     total:289  pass:230  dwarn:0   dfail:0   fail:0   skip:59  time:421s
fi-glk-1         total:289  pass:260  dwarn:0   dfail:0   fail:0   skip:29  time:563s
fi-hsw-4770      total:289  pass:263  dwarn:0   dfail:0   fail:0   skip:26  time:428s
fi-hsw-4770r     total:289  pass:263  dwarn:0   dfail:0   fail:0   skip:26  time:407s
fi-ilk-650       total:289  pass:221  dwarn:0   dfail:0   fail:8   skip:60  time:432s
fi-ivb-3520m     total:289  pass:261  dwarn:0   dfail:0   fail:0   skip:28  time:493s
fi-ivb-3770      total:289  pass:261  dwarn:0   dfail:0   fail:0   skip:28  time:467s
fi-kbl-7500u     total:289  pass:256  dwarn:1   dfail:0   fail:8   skip:24  time:462s
fi-kbl-7560u     total:289  pass:270  dwarn:0   dfail:0   fail:0   skip:19  time:587s
fi-kbl-r         total:289  pass:262  dwarn:0   dfail:0   fail:0   skip:27  time:591s
fi-pnv-d510      total:289  pass:223  dwarn:1   dfail:0   fail:0   skip:65  time:544s
fi-skl-6260u     total:289  pass:269  dwarn:0   dfail:0   fail:0   skip:20  time:456s
fi-skl-6700k     total:289  pass:257  dwarn:0   dfail:0   fail:8   skip:24  time:740s
fi-skl-6770hq    total:289  pass:261  dwarn:0   dfail:0   fail:8   skip:20  time:487s
fi-skl-gvtdvm    total:289  pass:266  dwarn:0   dfail:0   fail:0   skip:23  time:479s
fi-snb-2520m     total:289  pass:243  dwarn:0   dfail:0   fail:8   skip:38  time:557s
fi-snb-2600      total:289  pass:250  dwarn:0   dfail:0   fail:0   skip:39  time:417s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_259/
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

#16 lore raw

✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev2)

In reply to Maarten Lankhorst
== Series Details ==

== Series Details ==

Series: lib/igt_kms: Convert properties to be more atomic-like. (rev2)
URL : https://patchwork.freedesktop.org/series/30903/
State : failure

== Summary ==

Test pm_rpm:

        Subgroup modeset-lpsp:
                pass       -> SKIP       (shard-hsw)
        Subgroup modeset-lpsp-stress-no-wait:
                pass       -> SKIP       (shard-hsw)
        Subgroup reg-read-ioctl:
                skip       -> PASS       (shard-hsw)
        Subgroup gem-idle:
                skip       -> PASS       (shard-hsw)
        Subgroup dpms-non-lpsp:
                skip       -> PASS       (shard-hsw)
        Subgroup modeset-pc8-residency-stress:
                pass       -> SKIP       (shard-hsw)
        Subgroup gem-execbuf-stress-pc8:
                pass       -> SKIP       (shard-hsw)
        Subgroup gem-mmap-gtt:
                skip       -> PASS       (shard-hsw)
        Subgroup pm-tiling:
                skip       -> PASS       (shard-hsw)
        Subgroup debugfs-read:
                fail       -> PASS       (shard-hsw)
        Subgroup system-suspend-modeset:
                skip       -> PASS       (shard-hsw)
        Subgroup modeset-lpsp-stress:
                pass       -> SKIP       (shard-hsw)
        Subgroup gem-evict-pwrite:
                skip       -> PASS       (shard-hsw)
        Subgroup dpms-lpsp:
                pass       -> SKIP       (shard-hsw)
        Subgroup system-suspend-execbuf:
                skip       -> PASS       (shard-hsw)
Test prime_busy:
        Subgroup after-vebox:
                skip       -> PASS       (shard-hsw)
        Subgroup before-vebox:
                skip       -> PASS       (shard-hsw)
        Subgroup after-bsd1:
                pass       -> SKIP       (shard-hsw)
        Subgroup before-bsd1:
                pass       -> SKIP       (shard-hsw)
        Subgroup before-render:
                skip       -> PASS       (shard-hsw)
        Subgroup basic-before-default:
                skip       -> PASS       (shard-hsw)
        Subgroup basic-after-default:
                skip       -> PASS       (shard-hsw)
        Subgroup hang-bsd:
                skip       -> PASS       (shard-hsw)
        Subgroup after-blt:
                skip       -> PASS       (shard-hsw)
        Subgroup hang-blt:
                skip       -> PASS       (shard-hsw)
        Subgroup wait-hang-bsd1:
                pass       -> SKIP       (shard-hsw)
        Subgroup wait-hang-render:
                skip       -> PASS       (shard-hsw)
        Subgroup wait-before-bsd2:
                pass       -> SKIP       (shard-hsw)
        Subgroup wait-after-bsd2:
                pass       -> SKIP       (shard-hsw)
        Subgroup hang-vebox:
                skip       -> PASS       (shard-hsw)
Test kms_flip:
        Subgroup 2x-flip-vs-wf_vblank:
                pass       -> SKIP       (shard-hsw)
        Subgroup vblank-vs-suspend:
                skip       -> PASS       (shard-hsw)
        Subgroup 2x-single-buffer-flip-vs-dpms-off-vs-modeset:
                pass       -> SKIP       (shard-hsw)
        Subgroup blt-wf_vblank-vs-modeset-interruptible:
                skip       -> PASS       (shard-hsw)
        Subgroup flip-vs-fences:
                fail       -> PASS       (shard-hsw)
        Subgroup plain-flip-fb-recreate-interruptible:
                skip       -> PASS       (shard-hsw) fdo#100368 +1
        Subgroup 2x-blt-flip-vs-panning:
                pass       -> SKIP       (shard-hsw)
        Subgroup flip-vs-panning:
                skip       -> PASS       (shard-hsw)
        Subgroup 2x-blt-wf_vblank-vs-modeset-interruptible:
                pass       -> SKIP       (shard-hsw)
        Subgroup 2x-render-flip-vs-panning:
                pass       -> SKIP       (shard-hsw)
        Subgroup 2x-vblank-vs-hang-interruptible:
                pass       -> SKIP       (shard-hsw)
        Subgroup wf_vblank-vs-modeset:
                skip       -> PASS       (shard-hsw) fdo#102614 +2
        Subgroup 2x-vblank-vs-suspend:
                fail       -> SKIP       (shard-hsw)
        Subgroup wf_vblank-vs-modeset-interruptible:
                skip       -> PASS       (shard-hsw)
        Subgroup 2x-busy-flip:
                pass       -> SKIP       (shard-hsw)
        Subgroup 2x-absolute-wf_vblank-interruptible:
                pass       -> SKIP       (shard-hsw)
        Subgroup basic-flip-vs-wf_vblank:
                skip       -> PASS       (shard-hsw)
        Subgroup 2x-wf_vblank-vs-modeset-interruptible:
                pass       -> SKIP       (shard-hsw)
        Subgroup blocking-wf_vblank:
                skip       -> PASS       (shard-hsw)
        Subgroup 2x-flip-vs-expired-vblank-interruptible:
                pass       -> SKIP       (shard-hsw)
        Subgroup 2x-vblank-vs-suspend-interruptible:
                pass       -> SKIP       (shard-hsw)
        Subgroup 2x-wf_vblank-vs-dpms-interruptible:
                pass       -> SKIP       (shard-hsw)
        Subgroup nonblocking-read:
                skip       -> PASS       (shard-hsw)
        Subgroup wf_vblank-vs-dpms-interruptible:
                skip       -> PASS       (shard-hsw)
        Subgroup 2x-plain-flip-interruptible:
                pass       -> SKIP       (shard-hsw)
        Subgroup 2x-wf_vblank-vs-modeset:
                pass       -> SKIP       (shard-hsw)
        Subgroup plain-flip-fb-recreate:
                skip       -> PASS       (shard-hsw) fdo#102504
        Subgroup vblank-vs-hang:
                skip       -> PASS       (shard-hsw)
        Subgroup flip-vs-absolute-wf_vblank-interruptible:
                skip       -> PASS       (shard-hsw)
        Subgroup wf_vblank-interruptible:
                skip       -> PASS       (shard-hsw)
        Subgroup 2x-flip-vs-panning-vs-hang:
                pass       -> SKIP       (shard-hsw)
        Subgroup blt-wf_vblank-vs-dpms:
                skip       -> PASS       (shard-hsw)
        Subgroup flip-vs-panning-interruptible:
                skip       -> PASS       (shard-hsw)
        Subgroup 2x-render-flip-vs-panning-interruptible:
                pass       -> SKIP       (shard-hsw)
        Subgroup 2x-dpms-vs-vblank-race:
                pass       -> SKIP       (shard-hsw)
        Subgroup 2x-flip-vs-fences-interruptible:
                pass       -> SKIP       (shard-hsw)
        Subgroup 2x-vblank-vs-dpms-suspend-interruptible:
                pass       -> SKIP       (shard-hsw)
        Subgroup 2x-flip-vs-panning-vs-hang-interruptible:
                pass       -> SKIP       (shard-hsw)
        Subgroup modeset-vs-vblank-race-interruptible:
                skip       -> PASS       (shard-hsw)
        Subgroup flip-vs-bad-tiling:
                pass       -> SKIP       (shard-hsw)
        Subgroup vblank-vs-dpms-suspend:
                skip       -> PASS       (shard-hsw)
        Subgroup blt-flip-vs-panning:
                skip       -> PASS       (shard-hsw)
        Subgroup 2x-blt-wf_vblank-vs-dpms-interruptible:
                pass       -> SKIP       (shard-hsw)
        Subgroup vblank-vs-dpms-suspend-interruptible:
                skip       -> PASS       (shard-hsw)
        Subgroup 2x-flip-vs-bad-tiling:
                pass       -> SKIP       (shard-hsw)
        Subgroup flip-vs-dpms-off-vs-modeset-interruptible:
                skip       -> PASS       (shard-hsw)
        Subgroup vblank-vs-dpms-rpm:
                skip       -> PASS       (shard-hsw)
        Subgroup blt-wf_vblank-vs-dpms-interruptible:
                skip       -> PASS       (shard-hsw)
        Subgroup rcs-wf_vblank-vs-modeset-interruptible:
                skip       -> PASS       (shard-hsw)
        Subgroup vblank-vs-dpms-rpm-interruptible:
                skip       -> PASS       (shard-hsw)
        Subgroup 2x-vblank-vs-modeset-suspend:
                pass       -> SKIP       (shard-hsw)
        Subgroup vblank-vs-modeset-rpm:
                skip       -> PASS       (shard-hsw)
        Subgroup 2x-blt-flip-vs-panning-interruptible:
                pass       -> SKIP       (shard-hsw)
        Subgroup 2x-flip-vs-fences:
                pass       -> SKIP       (shard-hsw)
        Subgroup 2x-flip-vs-rmfb-interruptible:
                pass       -> SKIP       (shard-hsw)
        Subgroup vblank-vs-modeset-rpm-interruptible:
                skip       -> PASS       (shard-hsw)
        Subgroup 2x-rcs-wf_vblank-vs-dpms-interruptible:
                pass       -> SKIP       (shard-hsw)
        Subgroup flip-vs-expired-vblank-interruptible:
                skip       -> PASS       (shard-hsw) fdo#102887
        Subgroup blt-flip-vs-panning-interruptible:
                skip       -> PASS       (shard-hsw)
        Subgroup vblank-vs-suspend-interruptible:
                skip       -> PASS       (shard-hsw)
        Subgroup 2x-flip-vs-modeset-interruptible:
                pass       -> SKIP       (shard-hsw)
        Subgroup 2x-blocking-absolute-wf_vblank-interruptible:
                pass       -> SKIP       (shard-hsw)
        Subgroup 2x-flip-vs-dpms-interruptible:
                pass       -> SKIP       (shard-hsw)
        Subgroup single-buffer-flip-vs-dpms-off-vs-modeset:
                skip       -> PASS       (shard-hsw)
        Subgroup dpms-vs-vblank-race:
                skip       -> PASS       (shard-hsw)
        Subgroup 2x-vblank-vs-hang:
                pass       -> SKIP       (shard-hsw)
        Subgroup 2x-blt-wf_vblank-vs-dpms:
                pass       -> SKIP       (shard-hsw)
        Subgroup flip-vs-modeset-vs-hang:
                skip       -> PASS       (shard-hsw)
        Subgroup flip-vs-wf_vblank-interruptible:
                skip       -> PASS       (shard-hsw)
        Subgroup plain-flip-ts-check-interruptible:
                skip       -> PASS       (shard-hsw) fdo#103005
        Subgroup 2x-blt-wf_vblank-vs-modeset:
                pass       -> SKIP       (shard-hsw)
        Subgroup 2x-plain-flip:
                pass       -> SKIP       (shard-hsw)
        Subgroup 2x-flip-vs-absolute-wf_vblank:
                pass       -> SKIP       (shard-hsw)
        Subgroup vblank-vs-modeset-suspend-interruptible:
                skip       -> PASS       (shard-hsw)
        Subgroup absolute-wf_vblank-interruptible:
                skip       -> PASS       (shard-hsw)
        Subgroup 2x-nonexisting-fb-interruptible:
                pass       -> SKIP       (shard-hsw)
        Subgroup flip-vs-panning-vs-hang-interruptible:
                skip       -> PASS       (shard-hsw)
        Subgroup 2x-nonexisting-fb:
                pass       -> SKIP       (shard-hsw)
        Subgroup wf_vblank-ts-check:
                skip       -> PASS       (shard-hsw)
        Subgroup 2x-rcs-wf_vblank-vs-modeset-interruptible:
                pass       -> SKIP       (shard-hsw)
        Subgroup 2x-flip-vs-dpms-off-vs-modeset-interruptible:
                pass       -> SKIP       (shard-hsw)
Test perf:
        Subgroup oa-exponents:
                skip       -> FAIL       (shard-hsw) fdo#102254
        Subgroup invalid-oa-format-id:
                skip       -> PASS       (shard-hsw)
        Subgroup unprivileged-singled-ctx-counters:
                skip       -> PASS       (shard-hsw)
        Subgroup create-destroy-userspace-config:
                skip       -> PASS       (shard-hsw)
        Subgroup buffer-fill:
                skip       -> PASS       (shard-hsw)
        Subgroup invalid-create-userspace-config:
                skip       -> PASS       (shard-hsw)
        Subgroup per-context-mode-unprivileged:
                skip       -> PASS       (shard-hsw)
        Subgroup low-oa-exponent-permissions:
                skip       -> PASS       (shard-hsw)
        Subgroup whitelisted-registers-userspace-config:
                skip       -> PASS       (shard-hsw)
        Subgroup polling:
                pass       -> FAIL       (shard-hsw) fdo#102252
        Subgroup missing-sample-flags:
                skip       -> PASS       (shard-hsw)
Test kms_frontbuffer_tracking:
        Subgroup psr-2p-scndscrn-spr-indfb-draw-pwrite:
                fail       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-spr-indfb-fullscreen:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-shrfb-pgflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-pri-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-rgb565-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-cur-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-shrfb-msflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-offscren-pri-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-spr-indfb-draw-mmap-wc:
                skip       -> PASS       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-cur-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-spr-indfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-primscrn-pri-indfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-indfb-msflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-spr-indfb-move:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-slowdraw:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-cur-indfb-move:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-indfb-plflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-pri-indfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-cur-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-indfb-msflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-primscrn-cur-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-cur-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-primscrn-pri-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-primscrn-spr-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-cur-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-badstride:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-spr-indfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-shrfb-msflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-spr-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-spr-indfb-onoff:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-spr-indfb-draw-mmap-gtt:
                skip       -> PASS       (shard-hsw)
        Subgroup fbc-1p-offscren-pri-indfb-draw-render:
                skip       -> PASS       (shard-hsw)
        Subgroup psr-2p-scndscrn-pri-shrfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-spr-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-pri-shrfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-indfb-scaledprimary:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-indfb-msflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-spr-indfb-draw-pwrite:
                skip       -> PASS       (shard-hsw)
        Subgroup fbc-2p-scndscrn-spr-indfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-primscrn-cur-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-spr-indfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-rgb565-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-pri-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-offscren-pri-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-pri-indfb-draw-mmap-cpu:
                skip       -> PASS       (shard-hsw)
        Subgroup fbc-2p-scndscrn-shrfb-msflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-primscrn-shrfb-pgflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-cur-indfb-onoff:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-modesetfrombusy:
                skip       -> PASS       (shard-hsw)
        Subgroup fbc-badstride:
                skip       -> PASS       (shard-hsw)
        Subgroup psr-2p-scndscrn-pri-shrfb-draw-mmap-cpu:
                fail       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-shrfb-pgflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-pri-indfb-draw-mmap-wc:
                skip       -> PASS       (shard-hsw)
        Subgroup fbcpsr-1p-offscren-pri-shrfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-pri-shrfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-rgb565-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-pri-indfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-spr-indfb-fullscreen:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-shrfb-scaledprimary:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-cur-indfb-onoff:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-cur-indfb-move:
                skip       -> PASS       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-pri-shrfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-indfb-msflip-blt:
                skip       -> PASS       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-pri-shrfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-offscren-pri-shrfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-cur-indfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-cur-indfb-draw-pwrite:
                skip       -> PASS       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-spr-indfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-offscren-pri-indfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-pri-shrfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-primscrn-pri-indfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-cur-indfb-onoff:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-shrfb-msflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_259/shards.html
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

#17 lore raw

✓ Fi.CI.BAT: success for lib/igt_kms: Convert properties to be more atomic-like. (rev4)

In reply to Maarten Lankhorst
== Series Details ==

== Series Details ==

Series: lib/igt_kms: Convert properties to be more atomic-like. (rev4)
URL : https://patchwork.freedesktop.org/series/30903/
State : success

== Summary ==

IGT patchset tested on top of latest successful build 2885b10f99b4beeb046e75af8b8488c229f629d3 igt/gem_exec_schedule: Ignore set-priority failures on old kernels

with latest DRM-Tip kernel build CI_DRM_3148
c1ed50121778 drm-tip: 2017y-09m-28d-04h-52m-47s UTC integration manifest

fi-bdw-5557u     total:289  pass:268  dwarn:0   dfail:0   fail:0   skip:21  time:447s
fi-bdw-gvtdvm    total:289  pass:265  dwarn:0   dfail:0   fail:0   skip:24  time:473s
fi-blb-e6850     total:289  pass:224  dwarn:1   dfail:0   fail:0   skip:64  time:423s
fi-bsw-n3050     total:289  pass:243  dwarn:0   dfail:0   fail:0   skip:46  time:517s
fi-bwr-2160      total:289  pass:184  dwarn:0   dfail:0   fail:0   skip:105 time:282s
fi-bxt-dsi       total:289  pass:258  dwarn:1   dfail:0   fail:0   skip:30  time:498s
fi-bxt-j4205     total:289  pass:260  dwarn:0   dfail:0   fail:0   skip:29  time:510s
fi-byt-j1900     total:289  pass:254  dwarn:1   dfail:0   fail:0   skip:34  time:495s
fi-cnl-y         total:289  pass:259  dwarn:0   dfail:0   fail:3   skip:27  time:663s
fi-elk-e7500     total:289  pass:230  dwarn:0   dfail:0   fail:0   skip:59  time:415s
fi-glk-1         total:289  pass:259  dwarn:1   dfail:0   fail:0   skip:29  time:563s
fi-hsw-4770      total:289  pass:263  dwarn:0   dfail:0   fail:0   skip:26  time:433s
fi-hsw-4770r     total:289  pass:263  dwarn:0   dfail:0   fail:0   skip:26  time:411s
fi-ilk-650       total:289  pass:229  dwarn:0   dfail:0   fail:0   skip:60  time:434s
fi-ivb-3520m     total:289  pass:261  dwarn:0   dfail:0   fail:0   skip:28  time:484s
fi-ivb-3770      total:289  pass:261  dwarn:0   dfail:0   fail:0   skip:28  time:469s
fi-kbl-7500u     total:289  pass:264  dwarn:1   dfail:0   fail:0   skip:24  time:475s
fi-kbl-7560u     total:289  pass:270  dwarn:0   dfail:0   fail:0   skip:19  time:583s
fi-kbl-r         total:289  pass:262  dwarn:0   dfail:0   fail:0   skip:27  time:596s
fi-pnv-d510      total:289  pass:223  dwarn:1   dfail:0   fail:0   skip:65  time:547s
fi-skl-6260u     total:289  pass:269  dwarn:0   dfail:0   fail:0   skip:20  time:454s
fi-skl-6700k     total:289  pass:265  dwarn:0   dfail:0   fail:0   skip:24  time:756s
fi-skl-6770hq    total:289  pass:269  dwarn:0   dfail:0   fail:0   skip:20  time:492s
fi-skl-gvtdvm    total:289  pass:266  dwarn:0   dfail:0   fail:0   skip:23  time:479s
fi-snb-2520m     total:289  pass:251  dwarn:0   dfail:0   fail:0   skip:38  time:567s
fi-snb-2600      total:289  pass:250  dwarn:0   dfail:0   fail:0   skip:39  time:418s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_264/
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

#18 lore raw

✓ Fi.CI.BAT: success for lib/igt_kms: Convert properties to be more atomic-like. (rev5)

In reply to Maarten Lankhorst
== Series Details ==

== Series Details ==

Series: lib/igt_kms: Convert properties to be more atomic-like. (rev5)
URL : https://patchwork.freedesktop.org/series/30903/
State : success

== Summary ==

IGT patchset tested on top of latest successful build 2885b10f99b4beeb046e75af8b8488c229f629d3 igt/gem_exec_schedule: Ignore set-priority failures on old kernels

with latest DRM-Tip kernel build CI_DRM_3148
c1ed50121778 drm-tip: 2017y-09m-28d-04h-52m-47s UTC integration manifest

fi-bdw-5557u     total:289  pass:268  dwarn:0   dfail:0   fail:0   skip:21  time:449s
fi-bdw-gvtdvm    total:289  pass:265  dwarn:0   dfail:0   fail:0   skip:24  time:481s
fi-blb-e6850     total:289  pass:224  dwarn:1   dfail:0   fail:0   skip:64  time:424s
fi-bsw-n3050     total:289  pass:243  dwarn:0   dfail:0   fail:0   skip:46  time:527s
fi-bwr-2160      total:289  pass:184  dwarn:0   dfail:0   fail:0   skip:105 time:279s
fi-bxt-dsi       total:289  pass:259  dwarn:0   dfail:0   fail:0   skip:30  time:503s
fi-bxt-j4205     total:289  pass:260  dwarn:0   dfail:0   fail:0   skip:29  time:505s
fi-byt-j1900     total:289  pass:254  dwarn:1   dfail:0   fail:0   skip:34  time:498s
fi-cnl-y         total:289  pass:259  dwarn:0   dfail:0   fail:3   skip:27  time:657s
fi-elk-e7500     total:289  pass:230  dwarn:0   dfail:0   fail:0   skip:59  time:418s
fi-glk-1         total:289  pass:260  dwarn:0   dfail:0   fail:0   skip:29  time:568s
fi-hsw-4770      total:289  pass:263  dwarn:0   dfail:0   fail:0   skip:26  time:425s
fi-hsw-4770r     total:289  pass:263  dwarn:0   dfail:0   fail:0   skip:26  time:406s
fi-ilk-650       total:289  pass:229  dwarn:0   dfail:0   fail:0   skip:60  time:435s
fi-ivb-3520m     total:289  pass:261  dwarn:0   dfail:0   fail:0   skip:28  time:493s
fi-ivb-3770      total:289  pass:261  dwarn:0   dfail:0   fail:0   skip:28  time:468s
fi-kbl-7500u     total:289  pass:264  dwarn:1   dfail:0   fail:0   skip:24  time:476s
fi-kbl-7560u     total:289  pass:270  dwarn:0   dfail:0   fail:0   skip:19  time:581s
fi-kbl-r         total:289  pass:262  dwarn:0   dfail:0   fail:0   skip:27  time:589s
fi-pnv-d510      total:289  pass:223  dwarn:1   dfail:0   fail:0   skip:65  time:545s
fi-skl-6260u     total:289  pass:269  dwarn:0   dfail:0   fail:0   skip:20  time:456s
fi-skl-6700k     total:289  pass:265  dwarn:0   dfail:0   fail:0   skip:24  time:761s
fi-skl-6770hq    total:289  pass:269  dwarn:0   dfail:0   fail:0   skip:20  time:492s
fi-skl-gvtdvm    total:289  pass:266  dwarn:0   dfail:0   fail:0   skip:23  time:475s
fi-snb-2520m     total:289  pass:251  dwarn:0   dfail:0   fail:0   skip:38  time:569s
fi-snb-2600      total:289  pass:250  dwarn:0   dfail:0   fail:0   skip:39  time:417s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_265/
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

#19 lore raw

✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev4)

In reply to Maarten Lankhorst
== Series Details ==

== Series Details ==

Series: lib/igt_kms: Convert properties to be more atomic-like. (rev4)
URL : https://patchwork.freedesktop.org/series/30903/
State : failure

== Summary ==

Test gem_close_race:

        Subgroup basic-process:
                skip       -> PASS       (shard-hsw)
Test kms_frontbuffer_tracking:
        Subgroup fbcpsr-2p-primscrn-cur-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-offscren-pri-shrfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-cur-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-cur-indfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-pri-shrfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-spr-indfb-fullscreen:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-pri-shrfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-cur-indfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-offscren-pri-indfb-draw-pwrite:
                skip       -> PASS       (shard-hsw)
        Subgroup psr-2p-primscrn-shrfb-plflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-primscrn-spr-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-shrfb-fliptrack:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-indfb-pgflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-spr-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-pri-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-spr-indfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-cur-indfb-onoff:
                skip       -> PASS       (shard-hsw)
        Subgroup fbc-1p-rte:
                skip       -> PASS       (shard-hsw)
        Subgroup psr-rgb565-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-cur-indfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-offscren-pri-indfb-draw-mmap-wc:
                dmesg-warn -> PASS       (shard-hsw)
        Subgroup psr-1p-offscren-pri-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-rgb565-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-pri-shrfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-indfb-plflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-modesetfrombusy:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-pri-shrfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-pri-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-rte:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-pri-shrfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-offscren-pri-shrfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-gtt:
                skip       -> PASS       (shard-hsw)
        Subgroup psr-2p-primscrn-pri-shrfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-spr-indfb-draw-mmap-gtt:
                skip       -> PASS       (shard-hsw)
        Subgroup fbc-1p-primscrn-cur-indfb-draw-mmap-wc:
                skip       -> PASS       (shard-hsw)
        Subgroup fbc-1p-primscrn-shrfb-pgflip-blt:
                skip       -> PASS       (shard-hsw)
        Subgroup psr-2p-primscrn-spr-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-cur-indfb-onoff:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-spr-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-pri-indfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-cur-indfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-spr-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-pri-shrfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-rgb565-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-pri-shrfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-indfb-plflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-indfb-msflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-pri-indfb-draw-mmap-gtt:
                skip       -> PASS       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-spr-indfb-onoff:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-spr-indfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-spr-indfb-move:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-indfb-msflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-shrfb-plflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-cur-indfb-move:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-rgb101010-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-cur-indfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-farfromfence:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-spr-indfb-draw-render:
                skip       -> PASS       (shard-hsw)
        Subgroup psr-1p-primscrn-cur-indfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-pri-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-pri-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-offscren-pri-indfb-draw-blt:
                skip       -> PASS       (shard-hsw)
        Subgroup psr-1p-primscrn-pri-indfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-indfb-scaledprimary:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-farfromfence:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-spr-indfb-onoff:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-cur-indfb-onoff:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-pri-indfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-spr-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-spr-indfb-move:
                skip       -> PASS       (shard-hsw)
        Subgroup fbc-2p-scndscrn-spr-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-pri-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-rgb565-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-cur-indfb-onoff:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-shrfb-scaledprimary:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-pri-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-modesetfrombusy:
                skip       -> PASS       (shard-hsw)
        Subgroup psr-2p-scndscrn-pri-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-spr-indfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-modesetfrombusy:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-rgb101010-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-spr-indfb-draw-mmap-cpu:
                skip       -> PASS       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-cur-indfb-onoff:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-pri-indfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-shrfb-fliptrack:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-rgb101010-draw-render:
                skip       -> PASS       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-spr-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-pri-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-offscren-pri-shrfb-draw-mmap-cpu:
                skip       -> PASS       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-cur-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-spr-indfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-spr-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-shrfb-pgflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-spr-indfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-shrfb-pgflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-shrfb-pgflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-indfb-fliptrack:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-shrfb-msflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-pri-indfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-cur-indfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-rgb101010-draw-blt:
                skip       -> PASS       (shard-hsw)
        Subgroup fbcpsr-1p-offscren-pri-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-offscren-pri-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-spr-indfb-move:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-pri-indfb-multidraw:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-indfb-pgflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-shrfb-plflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-pri-shrfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-pri-shrfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-pri-shrfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-pri-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-spr-indfb-fullscreen:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-offscren-pri-indfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-offscren-pri-shrfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-cur-indfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-indfb-fliptrack:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-cur-indfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-badstride:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-pri-indfb-draw-pwrite:
                fail       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-pri-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-rte:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-indfb-msflip-blt:
                skip       -> PASS       (shard-hsw)
        Subgroup fbcpsr-tilingchange:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-cur-indfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-offscren-pri-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-pri-shrfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-shrfb-plflip-blt:
                skip       -> PASS       (shard-hsw)
        Subgroup fbc-2p-primscrn-pri-indfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-indfb-plflip-blt:
                skip       -> PASS       (shard-hsw)
        Subgroup fbcpsr-1p-offscren-pri-shrfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-offscren-pri-indfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-pri-shrfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-pri-indfb-draw-mmap-cpu:
                dmesg-warn -> SKIP       (shard-hsw)
        Subgroup fbc-rgb101010-draw-pwrite:
                skip       -> PASS       (shard-hsw)
        Subgroup psr-1p-primscrn-spr-indfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-pri-indfb-multidraw:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-pri-indfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-cur-indfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-spr-indfb-onoff:
                skip       -> PASS       (shard-hsw)
        Subgroup psr-1p-primscrn-spr-indfb-onoff:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-rgb565-draw-mmap-gtt:
                skip       -> PASS       (shard-hsw)
        Subgroup fbcpsr-1p-shrfb-fliptrack:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-primscrn-cur-indfb-move:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-primscrn-spr-indfb-move:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-spr-indfb-fullscreen:
                skip       -> PASS       (shard-hsw)
        Subgroup psr-2p-primscrn-pri-indfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-pri-indfb-draw-pwrite:
                skip       -> PASS       (shard-hsw)
        Subgroup psr-rgb101010-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-cur-indfb-move:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-pri-shrfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-pri-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-cur-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-shrfb-msflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-rte:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-cur-indfb-move:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-pri-indfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-spr-indfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-offscren-pri-shrfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-offscren-pri-shrfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-shrfb-msflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-spr-indfb-move:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-indfb-msflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-spr-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-spr-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-pri-shrfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-pri-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-pri-indfb-draw-mmap-wc:
                skip       -> PASS       (shard-hsw)
        Subgroup fbcpsr-rgb101010-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-primscrn-cur-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-primscrn-spr-indfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-pri-shrfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-offscren-pri-indfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-offscren-pri-shrfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-cur-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-spr-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-primscrn-pri-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-spr-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-spr-indfb-move:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-badstride:
                skip       -> PASS       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-spr-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-offscren-pri-indfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-cur-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-spr-indfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-spr-indfb-fullscreen:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-spr-indfb-fullscreen:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-spr-indfb-draw-render:
                pass       -> SKIP       (shard

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_264/shards.html
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

#20 lore raw

✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev5)

In reply to Maarten Lankhorst
== Series Details ==

== Series Details ==

Series: lib/igt_kms: Convert properties to be more atomic-like. (rev5)
URL : https://patchwork.freedesktop.org/series/30903/
State : failure

== Summary ==

Test gem_exec_schedule:

        Subgroup pi-ringfull-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fifo-bsd:
                skip       -> PASS       (shard-hsw)
        Subgroup preempt-bsd2:
                pass       -> SKIP       (shard-hsw)
        Subgroup in-order-bsd1:
                pass       -> SKIP       (shard-hsw)
        Subgroup promotion-bsd:
                pass       -> SKIP       (shard-hsw)
        Subgroup preempt-other-bsd1:
                pass       -> SKIP       (shard-hsw)
        Subgroup preempt-self-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup reorder-wide-vebox:
                pass       -> SKIP       (shard-hsw)
        Subgroup preempt-vebox:
                pass       -> SKIP       (shard-hsw)
        Subgroup promotion-bsd1:
                pass       -> SKIP       (shard-hsw)
        Subgroup deep-vebox:
                pass       -> SKIP       (shard-hsw)
        Subgroup reorder-wide-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup in-order-vebox:
                pass       -> SKIP       (shard-hsw)
        Subgroup in-order-bsd:
                pass       -> SKIP       (shard-hsw)
        Subgroup fifo-bsd1:
                pass       -> SKIP       (shard-hsw)
        Subgroup pi-ringfull-bsd:
                pass       -> SKIP       (shard-hsw)
        Subgroup pi-ringfull-default:
                pass       -> SKIP       (shard-hsw)
        Subgroup out-order-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup preempt-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup reorder-wide-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup preempt-contexts-vebox:
                pass       -> SKIP       (shard-hsw)
        Subgroup preempt-other-vebox:
                pass       -> SKIP       (shard-hsw)
        Subgroup pi-ringfull-bsd2:
                pass       -> SKIP       (shard-hsw)
        Subgroup preempt-contexts-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup preempt-self-bsd1:
                pass       -> SKIP       (shard-hsw)
        Subgroup deep-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup preempt-contexts-bsd1:
                pass       -> SKIP       (shard-hsw)
        Subgroup promotion-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup out-order-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup preempt-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup preempt-other-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup in-order-bsd2:
                pass       -> SKIP       (shard-hsw)
        Subgroup deep-bsd1:
                pass       -> SKIP       (shard-hsw)
        Subgroup in-order-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup out-order-vebox:
                pass       -> SKIP       (shard-hsw)
        Subgroup preempt-other-bsd2:
                pass       -> SKIP       (shard-hsw)
        Subgroup reorder-wide-bsd2:
                pass       -> SKIP       (shard-hsw)
        Subgroup wide-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fifo-render:
                fail       -> PASS       (shard-hsw)
        Subgroup reorder-wide-bsd1:
                pass       -> SKIP       (shard-hsw)
        Subgroup out-order-bsd2:
                pass       -> SKIP       (shard-hsw)
        Subgroup pi-ringfull-bsd1:
                pass       -> SKIP       (shard-hsw)
        Subgroup deep-bsd:
                pass       -> SKIP       (shard-hsw)
        Subgroup wide-bsd1:
                fail       -> SKIP       (shard-hsw)
        Subgroup pi-ringfull-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup deep-blt:
                pass       -> SKIP       (shard-hsw)
Test kms_setmode:
        Subgroup invalid-clone-exclusive-crtc:
                skip       -> PASS       (shard-hsw)
        Subgroup basic:
                skip       -> PASS       (shard-hsw) fdo#99912
        Subgroup invalid-clone-single-crtc:
                skip       -> PASS       (shard-hsw)
Test kms_busy:
        Subgroup basic-flip-D:
                pass       -> SKIP       (shard-hsw)
        Subgroup extended-pageflip-hang-oldfb-render-C:
                skip       -> PASS       (shard-hsw)
        Subgroup extended-modeset-hang-newfb-render-D:
                pass       -> SKIP       (shard-hsw)
        Subgroup basic-flip-A:
                skip       -> PASS       (shard-hsw)
        Subgroup extended-modeset-hang-oldfb-with-reset-render-B:
                skip       -> PASS       (shard-hsw) fdo#102249 +1
        Subgroup extended-pageflip-hang-oldfb-render-E:
                pass       -> SKIP       (shard-hsw)
        Subgroup extended-pageflip-hang-newfb-render-A:
                skip       -> PASS       (shard-hsw)
        Subgroup extended-pageflip-modeset-hang-oldfb-render-B:
                skip       -> PASS       (shard-hsw)
        Subgroup basic-modeset-F:
                fail       -> SKIP       (shard-hsw)
        Subgroup extended-pageflip-hang-oldfb-render-D:
                pass       -> SKIP       (shard-hsw)
        Subgroup extended-modeset-hang-oldfb-with-reset-render-D:
                pass       -> SKIP       (shard-hsw)
        Subgroup extended-pageflip-hang-newfb-render-B:
                skip       -> PASS       (shard-hsw)
        Subgroup extended-modeset-hang-oldfb-render-E:
                pass       -> SKIP       (shard-hsw)
        Subgroup extended-modeset-hang-oldfb-render-D:
                pass       -> SKIP       (shard-hsw)
        Subgroup basic-modeset-D:
                pass       -> SKIP       (shard-hsw)
        Subgroup extended-pageflip-hang-newfb-render-F:
                pass       -> SKIP       (shard-hsw)
        Subgroup basic-modeset-E:
                pass       -> SKIP       (shard-hsw)
        Subgroup extended-modeset-hang-oldfb-render-C:
                skip       -> PASS       (shard-hsw)
        Subgroup extended-modeset-hang-oldfb-with-reset-render-F:
                pass       -> SKIP       (shard-hsw)
        Subgroup extended-modeset-hang-oldfb-render-F:
                pass       -> SKIP       (shard-hsw)
        Subgroup basic-flip-E:
                pass       -> SKIP       (shard-hsw)
        Subgroup basic-modeset-B:
                skip       -> PASS       (shard-hsw)
        Subgroup basic-flip-B:
                skip       -> PASS       (shard-hsw)
        Subgroup extended-modeset-hang-newfb-render-C:
                skip       -> PASS       (shard-hsw)
        Subgroup basic-modeset-C:
                skip       -> PASS       (shard-hsw)
        Subgroup extended-pageflip-modeset-hang-oldfb-render-A:
                skip       -> PASS       (shard-hsw)
        Subgroup basic-flip-C:
                skip       -> PASS       (shard-hsw)
        Subgroup extended-pageflip-modeset-hang-oldfb-render-E:
                pass       -> SKIP       (shard-hsw)
        Subgroup extended-pageflip-modeset-hang-oldfb-render-F:
                pass       -> SKIP       (shard-hsw)
Test gem_madvise:
        Subgroup dontneed-before-exec:
                skip       -> PASS       (shard-hsw)
        Subgroup dontneed-before-mmap:
                skip       -> PASS       (shard-hsw)
Test kms_color:
        Subgroup degamma-pipe2:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-blue-to-red-pipe5:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-green-to-red-pipe3:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-0-75-pipe0:
                pass       -> SKIP       (shard-hsw)
        Subgroup pipe-invalid-lut-sizes:
                skip       -> PASS       (shard-hsw)
        Subgroup degamma-pipe4:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-max-pipe0:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-negative-pipe3:
                pass       -> SKIP       (shard-hsw)
        Subgroup legacy-gamma-pipe4:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-0-5-pipe1:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-0-75-pipe4:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-0-5-pipe5:
                pass       -> SKIP       (shard-hsw)
        Subgroup pipe-invalid-ctm-matrix-sizes:
                skip       -> PASS       (shard-hsw)
        Subgroup ctm-blue-to-red-pipe0:
                pass       -> SKIP       (shard-hsw)
        Subgroup gamma-pipe1:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-max-pipe3:
                pass       -> SKIP       (shard-hsw)
        Subgroup degamma-pipe0:
                pass       -> SKIP       (shard-hsw)
        Subgroup gamma-pipe2:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-0-25-pipe3:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-max-pipe2:
                pass       -> SKIP       (shard-hsw)
        Subgroup legacy-gamma-pipe0:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-red-to-blue-pipe1:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-0-5-pipe0:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-negative-pipe0:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-0-5-pipe2:
                pass       -> SKIP       (shard-hsw)
        Subgroup degamma-pipe3:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-0-25-pipe4:
                pass       -> SKIP       (shard-hsw)
        Subgroup legacy-gamma-reset-pipe2:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-0-5-pipe3:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-0-75-pipe1:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-negative-pipe4:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-0-25-pipe5:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-0-75-pipe3:
                pass       -> SKIP       (shard-hsw)
        Subgroup legacy-gamma-reset-pipe4:
                pass       -> SKIP       (shard-hsw)
        Subgroup legacy-gamma-pipe3:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-0-25-pipe1:
                pass       -> SKIP       (shard-hsw)
        Subgroup legacy-gamma-pipe5:
                pass       -> SKIP       (shard-hsw)
        Subgroup legacy-gamma-reset-pipe5:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-0-75-pipe5:
                pass       -> SKIP       (shard-hsw)
        Subgroup ctm-negative-pipe2:
                pass       -> SKIP       (shard-hsw)
Test kms_frontbuffer_tracking:
        Subgroup fbc-1p-primscrn-cur-indfb-draw-mmap-cpu:
                skip       -> PASS       (shard-hsw)
        Subgroup fbc-2p-scndscrn-cur-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-shrfb-pgflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-pri-shrfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-pri-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-indfb-pgflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-pri-indfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-pri-shrfb-draw-mmap-wc:
                skip       -> PASS       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-shrfb-plflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-pri-shrfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-offscren-pri-shrfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-pri-shrfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-spr-indfb-move:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-pri-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-rgb565-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-offscren-pri-shrfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-pri-indfb-draw-blt:
                skip       -> PASS       (shard-hsw)
        Subgroup psr-2p-scndscrn-cur-indfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-slowdraw:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-spr-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-cur-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-primscrn-shrfb-plflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-pri-shrfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-indfb-fliptrack:
                skip       -> PASS       (shard-hsw)
        Subgroup fbc-2p-shrfb-fliptrack:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-pri-shrfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-cur-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-pri-shrfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-spr-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-spr-indfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-cur-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-shrfb-fliptrack:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-cur-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-offscren-pri-indfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-pri-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-offscren-pri-shrfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-pri-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-rgb565-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-spr-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-indfb-plflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-spr-indfb-move:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-shrfb-pgflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-spr-indfb-onoff:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-shrfb-plflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-pri-indfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-offscren-pri-indfb-draw-mmap-gtt:
                dmesg-warn -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-indfb-pgflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-spr-indfb-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-primscrn-pri-indfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-pri-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-indfb-pgflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-pri-shrfb-draw-pwrite:
                fail       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-indfb-fliptrack:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-rgb565-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-farfromfence:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-cur-indfb-onoff:
                skip       -> PASS       (shard-hsw)
        Subgroup fbcpsr-2p-primscrn-spr-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-pri-indfb-draw-pwrite:
                fail       -> PASS       (shard-hsw)
        Subgroup psr-2p-scndscrn-pri-indfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-spr-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-primscrn-spr-indfb-fullscreen:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-indfb-plflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-pri-indfb-draw-mmap-gtt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-shrfb-fliptrack:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-primscrn-pri-shrfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-1p-offscren-pri-shrfb-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-shrfb-plflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-rgb565-draw-mmap-gtt:
                skip       -> PASS       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-cur-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-pri-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-primscrn-pri-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-spr-indfb-onoff:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-2p-scndscrn-pri-indfb-draw-render:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-2p-scndscrn-shrfb-pgflip-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-spr-indfb-draw-pwrite:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-2p-scndscrn-spr-indfb-draw-mmap-cpu:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-spr-indfb-onoff:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbc-1p-primscrn-indfb-pgflip-blt:
                skip       -> PASS       (shard-hsw)
        Subgroup fbcpsr-rgb101010-draw-mmap-wc:
                pass       -> SKIP       (shard-hsw)
        Subgroup psr-rgb565-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-rgb565-draw-blt:
                pass       -> SKIP       (shard-hsw)
        Subgroup fbcpsr-1p-primscrn-cur-indfb-draw-mmap-cpu:

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_265/shards.html
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

#21 lore raw

✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev4)

In reply to Maarten Lankhorst
== Series Details ==

== Series Details ==

Series: lib/igt_kms: Convert properties to be more atomic-like. (rev4)
URL : https://patchwork.freedesktop.org/series/30903/
State : failure

== Summary ==

Test kms_cursor_legacy:

        Subgroup cursorA-vs-flipA-atomic-transitions:
                fail       -> PASS       (shard-hsw) fdo#102723
Test prime_mmap:
        Subgroup test_userptr:
                pass       -> DMESG-WARN (shard-hsw) fdo#102939
Test kms_atomic_interruptible:
        Subgroup atomic-setmode:
                pass       -> FAIL       (shard-hsw)
        Subgroup legacy-setmode:
                pass       -> FAIL       (shard-hsw)
Test kms_rotation_crc:
        Subgroup sprite-rotation-180-flip:
                fail       -> PASS       (shard-hsw) fdo#102691
Test kms_plane_lowres:
        Subgroup pipe-A-tiling-x:
                pass       -> FAIL       (shard-hsw)
        Subgroup pipe-A-tiling-none:
                pass       -> FAIL       (shard-hsw)
Test gem_exec_reloc:
        Subgroup basic-write-read-noreloc:
                incomplete -> PASS       (shard-hsw) fdo#102332
Test gem_eio:
        Subgroup in-flight:
                pass       -> DMESG-WARN (shard-hsw) fdo#102886 +2
Test perf:
        Subgroup blocking:
                pass       -> FAIL       (shard-hsw) fdo#102252

fdo#102723 https://bugs.freedesktop.org/show_bug.cgi?id=102723
fdo#102939 https://bugs.freedesktop.org/show_bug.cgi?id=102939
fdo#102691 https://bugs.freedesktop.org/show_bug.cgi?id=102691
fdo#102332 https://bugs.freedesktop.org/show_bug.cgi?id=102332
fdo#102886 https://bugs.freedesktop.org/show_bug.cgi?id=102886
fdo#102252 https://bugs.freedesktop.org/show_bug.cgi?id=102252

shard-hsw total:2429 pass:1327 dwarn:6 dfail:0 fail:13 skip:1083 time:9878s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_264/shards.html
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

#22 lore raw

✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev5)

In reply to Maarten Lankhorst
== Series Details ==

== Series Details ==

Series: lib/igt_kms: Convert properties to be more atomic-like. (rev5)
URL : https://patchwork.freedesktop.org/series/30903/
State : failure

== Summary ==

Test gem_eio:

        Subgroup in-flight-contexts:
                dmesg-warn -> PASS       (shard-hsw) fdo#102886 +1
Test kms_atomic_interruptible:
        Subgroup atomic-setmode:
                pass       -> FAIL       (shard-hsw)
        Subgroup legacy-setmode:
                pass       -> FAIL       (shard-hsw)
Test kms_rotation_crc:
        Subgroup sprite-rotation-180-flip:
                fail       -> PASS       (shard-hsw) fdo#102691
Test kms_busy:
        Subgroup extended-modeset-hang-oldfb-with-reset-render-A:
                pass       -> DMESG-WARN (shard-hsw) fdo#102249
Test gem_exec_reloc:
        Subgroup basic-write-read-noreloc:
                incomplete -> PASS       (shard-hsw) fdo#102332
Test kms_cursor_legacy:
        Subgroup cursorA-vs-flipA-atomic-transitions:
                fail       -> PASS       (shard-hsw) fdo#102723

fdo#102886 https://bugs.freedesktop.org/show_bug.cgi?id=102886
fdo#102691 https://bugs.freedesktop.org/show_bug.cgi?id=102691
fdo#102249 https://bugs.freedesktop.org/show_bug.cgi?id=102249
fdo#102332 https://bugs.freedesktop.org/show_bug.cgi?id=102332
fdo#102723 https://bugs.freedesktop.org/show_bug.cgi?id=102723

shard-hsw total:2429 pass:1331 dwarn:5 dfail:0 fail:10 skip:1083 time:9895s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_265/shards.html
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

#23 lore raw

✗ Fi.CI.IGT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev2)

In reply to Maarten Lankhorst
== Series Details ==

== Series Details ==

Series: lib/igt_kms: Convert properties to be more atomic-like. (rev2)
URL : https://patchwork.freedesktop.org/series/30903/
State : failure

== Summary ==

Test kms_atomic_interruptible:

        Subgroup legacy-cursor:
                pass       -> FAIL       (shard-hsw)
        Subgroup atomic-setmode:
                pass       -> FAIL       (shard-hsw)
        Subgroup legacy-pageflip:
                pass       -> FAIL       (shard-hsw)
        Subgroup legacy-dpms:
                pass       -> FAIL       (shard-hsw)
        Subgroup legacy-setmode:
                pass       -> FAIL       (shard-hsw)
        Subgroup universal-setplane-primary:
                pass       -> FAIL       (shard-hsw)
        Subgroup universal-setplane-cursor:
                pass       -> FAIL       (shard-hsw)
Test kms_plane_multiple:
        Subgroup atomic-pipe-B-tiling-none:
                pass       -> SKIP       (shard-hsw)
        Subgroup atomic-pipe-C-tiling-none:
                pass       -> SKIP       (shard-hsw)
        Subgroup atomic-pipe-B-tiling-x:
                pass       -> SKIP       (shard-hsw)
        Subgroup atomic-pipe-C-tiling-x:
                pass       -> SKIP       (shard-hsw)
Test kms_busy:
        Subgroup extended-pageflip-hang-oldfb-render-B:
                pass       -> FAIL       (shard-hsw)
        Subgroup extended-pageflip-hang-oldfb-render-C:
                pass       -> FAIL       (shard-hsw)
        Subgroup extended-pageflip-hang-newfb-render-B:
                pass       -> FAIL       (shard-hsw)
        Subgroup extended-modeset-hang-oldfb-with-reset-render-C:
                pass       -> FAIL       (shard-hsw)
        Subgroup extended-pageflip-modeset-hang-oldfb-render-B:
                pass       -> FAIL       (shard-hsw)
        Subgroup extended-modeset-hang-oldfb-render-C:
                pass       -> FAIL       (shard-hsw)
        Subgroup extended-modeset-hang-oldfb-with-reset-render-B:
                pass       -> FAIL       (shard-hsw) fdo#102249 +1
        Subgroup extended-modeset-hang-newfb-with-reset-render-B:
                pass       -> FAIL       (shard-hsw)
        Subgroup extended-pageflip-hang-newfb-render-C:
                pass       -> FAIL       (shard-hsw)
        Subgroup extended-modeset-hang-newfb-render-C:
                pass       -> FAIL       (shard-hsw)
        Subgroup extended-modeset-hang-oldfb-render-B:
                pass       -> FAIL       (shard-hsw)
        Subgroup extended-modeset-hang-newfb-render-B:
                pass       -> FAIL       (shard-hsw)
        Subgroup extended-pageflip-modeset-hang-oldfb-render-C:
                pass       -> FAIL       (shard-hsw)
Test prime_mmap:
        Subgroup test_userptr:
                pass       -> DMESG-WARN (shard-hsw) fdo#102939
Test kms_plane_lowres:
        Subgroup pipe-A-tiling-x:
                pass       -> FAIL       (shard-hsw)
        Subgroup pipe-A-tiling-none:
                pass       -> FAIL       (shard-hsw)
Test gem_eio:
        Subgroup wait:
                dmesg-warn -> PASS       (shard-hsw) fdo#102886 +1
Test kms_setmode:
        Subgroup basic:
                fail       -> PASS       (shard-hsw) fdo#99912
Test gem_sync:
        Subgroup basic-store-all:
                pass       -> FAIL       (shard-hsw)
Test kms_rotation_crc:
        Subgroup sprite-rotation-180-flip:
                fail       -> PASS       (shard-hsw) fdo#102691
Test perf:
        Subgroup blocking:
                fail       -> PASS       (shard-hsw) fdo#102252
Test kms_concurrent:
        Subgroup pipe-C:
                pass       -> SKIP       (shard-hsw)
        Subgroup pipe-B:
                pass       -> SKIP       (shard-hsw)
Test kms_flip:
        Subgroup flip-vs-wf_vblank-interruptible:
                fail       -> PASS       (shard-hsw) fdo#100368

fdo#102249 https://bugs.freedesktop.org/show_bug.cgi?id=102249
fdo#102939 https://bugs.freedesktop.org/show_bug.cgi?id=102939
fdo#102886 https://bugs.freedesktop.org/show_bug.cgi?id=102886
fdo#99912 https://bugs.freedesktop.org/show_bug.cgi?id=99912
fdo#102691 https://bugs.freedesktop.org/show_bug.cgi?id=102691
fdo#102252 https://bugs.freedesktop.org/show_bug.cgi?id=102252
fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368

shard-hsw total:2429 pass:1305 dwarn:3 dfail:0 fail:32 skip:1089 time:9572s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_259/shards.html
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

#24 lore raw

✗ Fi.CI.BAT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev6)

In reply to Maarten Lankhorst
== Series Details ==

== Series Details ==

Series: lib/igt_kms: Convert properties to be more atomic-like. (rev6)
URL : https://patchwork.freedesktop.org/series/30903/
State : failure

== Summary ==

IGT patchset build failed on latest successful build 47ae1f8cfd2d4a826331e270b33440e0bf3a6aa9 tests/gem_workarounds: Skip write only registers

make all-recursive
Making all in lib
make all-recursive
Making all in .
Making all in tests
make[4]: Nothing to be done for 'all'.
Making all in man
make[2]: Nothing to be done for 'all'.
Making all in tools
Making all in null_state_gen
make[3]: Nothing to be done for 'all'.
Making all in registers
make[3]: Nothing to be done for 'all'.
make[3]: Nothing to be done for 'all-am'.
Making all in scripts
make[2]: Nothing to be done for 'all'.
Making all in benchmarks
make[2]: Nothing to be done for 'all'.
Making all in tests
Making all in intel-ci
make[3]: Nothing to be done for 'all'.

  CCLD     gem_bad_batch
  CCLD     gem_hang
  CCLD     gem_bad_blit
  CCLD     gem_bad_address
  CCLD     gem_non_secure_batch
  CCLD     gem_stress
  CCLD     core_auth
  CCLD     core_get_client_auth
  CCLD     core_getclient
  CCLD     core_getstats
  CCLD     core_getversion
  CCLD     core_prop_blob
  CCLD     core_setmaster_vs_auth
  CCLD     debugfs_test
  CCLD     drm_import_export
  CCLD     drm_mm
  CCLD     drm_read
  CCLD     drm_vma_limiter
  CCLD     drm_vma_limiter_cached
  CCLD     drm_vma_limiter_cpu
  CCLD     drm_vma_limiter_gtt
  CCLD     drv_getparams_basic
  CCLD     drv_hangman
  CCLD     drv_missed_irq
  CCLD     drv_module_reload
  CCLD     drv_selftest
  CCLD     drv_suspend
  CCLD     gem_bad_length
  CCLD     gem_bad_reloc
  CCLD     gem_basic
  CCLD     gem_busy
  CCLD     gem_caching
  CCLD     gem_close
  CCLD     gem_close_race
  CCLD     gem_concurrent_blit
  CCLD     gem_cpu_reloc
  CCLD     gem_create
  CCLD     gem_cs_prefetch
  CCLD     gem_cs_tlb
  CCLD     gem_ctx_bad_destroy
  CCLD     gem_ctx_bad_exec
  CCLD     gem_ctx_basic
  CCLD     gem_ctx_create
  CCLD     gem_ctx_exec
  CCLD     gem_ctx_param
  CCLD     gem_ctx_switch
  CCLD     gem_ctx_thrash
  CCLD     gem_double_irq_loop
  CCLD     gem_eio
  CCLD     gem_evict_alignment
  CCLD     gem_evict_everything
  CCLD     gem_exec_alignment
  CCLD     gem_exec_async
  CCLD     gem_exec_await
  CCLD     gem_exec_bad_domains
  CCLD     gem_exec_basic
  CCLD     gem_exec_big
  CCLD     gem_exec_blt
  CCLD     gem_exec_capture
  CCLD     gem_exec_create
  CCLD     gem_exec_faulting_reloc
  CCLD     gem_exec_fence
  CCLD     gem_exec_flush
  CCLD     gem_exec_gttfill
  CCLD     gem_exec_latency
  CCLD     gem_exec_lut_handle
  CCLD     gem_exec_nop
  CCLD     gem_exec_parallel
  CCLD     gem_exec_params
  CCLD     gem_exec_parse
  CCLD     gem_exec_reloc
  CCLD     gem_exec_reuse
  CCLD     gem_exec_schedule
  CCLD     gem_exec_store
  CCLD     gem_exec_suspend
  CCLD     gem_exec_whisper
  CCLD     gem_fd_exhaustion
  CCLD     gem_fence_thrash
  CCLD     gem_fence_upload
  CCLD     gem_fenced_exec_thrash
  CCLD     gem_flink_basic
  CCLD     gem_flink_race
  CCLD     gem_gpgpu_fill
  CCLD     gem_gtt_cpu_tlb
  CCLD     gem_gtt_hog
  CCLD     gem_gtt_speed
  CCLD     gem_hangcheck_forcewake
  CCLD     gem_largeobject
  CCLD     gem_linear_blits
  CCLD     gem_lut_handle
  CCLD     gem_madvise
  CCLD     gem_media_fill
  CCLD     gem_mmap
  CCLD     gem_mmap_gtt
  CCLD     gem_mmap_offset_exhaustion
  CCLD     gem_mmap_wc
  CCLD     gem_mocs_settings
  CCLD     gem_partial_pwrite_pread
  CCLD     gem_persistent_relocs
  CCLD     gem_pin
  CCLD     gem_pipe_control_store_loop
  CCLD     gem_ppgtt
  CCLD     gem_pread
  CCLD     gem_pread_after_blit
  CCLD     gem_pwrite
  CCLD     gem_pwrite_pread
  CCLD     gem_pwrite_snooped
  CCLD     gem_read_read_speed
  CCLD     gem_readwrite
  CCLD     gem_reg_read
  CCLD     gem_reloc_overflow
  CCLD     gem_reloc_vs_gpu
  CCLD     gem_render_copy
  CCLD     gem_render_copy_redux
  CCLD     gem_render_linear_blits
  CCLD     gem_render_tiled_blits
  CCLD     gem_request_retire
  CCLD     gem_reset_stats
  CCLD     gem_ring_sync_copy
  CCLD     gem_ring_sync_loop
  CCLD     gem_ringfill
  CCLD     gem_seqno_wrap
  CCLD     gem_set_tiling_vs_blt
  CCLD     gem_set_tiling_vs_gtt
  CCLD     gem_set_tiling_vs_pwrite
  CCLD     gem_shrink
  CCLD     gem_softpin
  CCLD     gem_spin_batch
  CCLD     gem_stolen
  CCLD     gem_storedw_batches_loop
  CCLD     gem_storedw_loop
  CCLD     gem_streaming_writes
  CCLD     gem_sync
  CCLD     gem_threaded_access_tiled
  CCLD     gem_tiled_blits
  CCLD     gem_tiled_fence_blits
  CCLD     gem_tiled_partial_pwrite_pread
  CCLD     gem_tiled_pread_basic
  CCLD     gem_tiled_pread_pwrite
  CCLD     gem_tiled_swapping
  CCLD     gem_tiled_wb
  CCLD     gem_tiled_wc
  CCLD     gem_tiling_max_stride
  CCLD     gem_unfence_active_buffers
  CCLD     gem_unref_active_buffers
  CCLD     gem_userptr_blits
  CCLD     gem_wait
  CCLD     gem_workarounds
  CCLD     gem_write_read_ring_switch
  CCLD     gen3_mixed_blits
  CCLD     gen3_render_linear_blits
  CCLD     gen3_render_mixed_blits
  CCLD     gen3_render_tiledx_blits
  CCLD     gen3_render_tiledy_blits
  CCLD     gen7_forcewake_mt
  CCLD     gvt_basic
  CCLD     kms_3d
  CCLD     kms_addfb_basic
  CCLD     kms_atomic
  CC       kms_atomic_interruptible.o
kms_atomic_interruptible.c: In function ‘run_plane_test’:
kms_atomic_interruptible.c:257:6: error: ‘test’ undeclared (first use in this function)
  if (test == test_legacy_modeset || test_atomic_modeset)
      ^~~~

kms_atomic_interruptible.c:257:6: note: each undeclared identifier is reported only once for each function it appears in Makefile:3952: recipe for target 'kms_atomic_interruptible.o' failed
make[3]: *** [kms_atomic_interruptible.o] Error 1
Makefile:4437: recipe for target 'all-recursive' failed
make[2]: *** [all-recursive] Error 1
Makefile:528: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
Makefile:460: recipe for target 'all' failed
make: *** [all] Error 2

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx