All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH i-g-t 0/5] igt/kms: Make fence waiting explicit.
@ 2017-07-06  7:11 Maarten Lankhorst
  2017-07-06  7:11 ` [PATCH i-g-t 1/5] tests/kms_atomic_transition: Add test for plane completion ordering Maarten Lankhorst
                   ` (5 more replies)
  0 siblings, 6 replies; 8+ messages in thread
From: Maarten Lankhorst @ 2017-07-06  7:11 UTC (permalink / raw)
  To: intel-gfx; +Cc: gustavo.padovan

I wanted to make kms_atomic_transition pass, but the nonblocking modeset
fencing tests were bogus.

This series changes the semantics for fencing slightly. It only keeps the out fences
in pipe_obj->out_fence_fd, it's up to the test to decide what to do with it, which
is probably just waiting on the fd or checking if it completed.

Maarten Lankhorst (5):
  tests/kms_atomic_transition: Add test for plane completion ordering.
  lib/kms: Handle fence interaction correctly WRT TEST_ONLY.
  tests/kms_atomic_transition: Only request fence on enabled pipes
  tests/kms_atomic_transition: Do not clear in-fences after atomic
    commit.
  igt/kms: Do not wait for fence completion during commit

 lib/igt_kms.c                 | 41 ++++++++----------
 tests/kms_atomic_transition.c | 99 +++++++++++++++++++++++++++++++++----------
 2 files changed, 95 insertions(+), 45 deletions(-)

-- 
2.11.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH i-g-t 1/5] tests/kms_atomic_transition: Add test for plane completion ordering.
  2017-07-06  7:11 [PATCH i-g-t 0/5] igt/kms: Make fence waiting explicit Maarten Lankhorst
@ 2017-07-06  7:11 ` Maarten Lankhorst
  2017-07-06  7:11 ` [PATCH i-g-t 2/5] lib/kms: Handle fence interaction correctly WRT TEST_ONLY Maarten Lankhorst
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Maarten Lankhorst @ 2017-07-06  7:11 UTC (permalink / raw)
  To: intel-gfx; +Cc: gustavo.padovan

When a plane gets disabled, that commit has to complete before an
atomic commit on that disabled plane only. Else for the old commit,
new_plane_state may have been freed.

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

diff --git a/tests/kms_atomic_transition.c b/tests/kms_atomic_transition.c
index ba5cd4d6e289..2b56eef66b7b 100644
--- a/tests/kms_atomic_transition.c
+++ b/tests/kms_atomic_transition.c
@@ -30,6 +30,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <time.h>
+#include <poll.h>
 
 #ifndef DRM_CAP_CURSOR_WIDTH
 #define DRM_CAP_CURSOR_WIDTH 0x8
@@ -152,6 +153,7 @@ static drmEventContext drm_events = {
 
 enum transition_type {
 	TRANSITION_PLANES,
+	TRANSITION_AFTER_FREE,
 	TRANSITION_MODESET,
 	TRANSITION_MODESET_DISABLE,
 };
@@ -480,6 +482,31 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
 			igt_skip("Cannot run tests without proper size sprite planes\n");
 	}
 
+	igt_display_commit2(display, COMMIT_ATOMIC);
+
+	if (type == TRANSITION_AFTER_FREE) {
+		struct pollfd pfd = { display->drm_fd, POLLIN };
+
+		wm_setup_plane(display, pipe, 0, parms);
+
+		atomic_commit(display, pipe, flags, (void *)(unsigned long)0, fencing);
+
+		for_each_plane_on_pipe(display, pipe, plane)
+			plane->fb_changed = true;
+
+		igt_display_commit2(display, COMMIT_ATOMIC);
+
+		/*
+		 * Previous atomic commit should have completed
+		 * before this plane-only atomic commit.
+		 */
+		igt_assert_eq(poll(&pfd, 1, 0), 1);
+
+		drmHandleEvent(display->drm_fd, &drm_events);
+
+		goto cleanup;
+	}
+
 	for (i = 0; i < iter_max; i++) {
 		igt_output_set_pipe(output, pipe);
 
@@ -854,6 +881,10 @@ igt_main
 		for_each_pipe_with_valid_output(&display, pipe, output)
 			run_transition_test(&display, pipe, output, TRANSITION_PLANES, true, true);
 
+	igt_subtest("plane-use-after-nonblocking-unbind")
+		for_each_pipe_with_valid_output(&display, pipe, output)
+			run_transition_test(&display, pipe, output, TRANSITION_AFTER_FREE, true, false);
+
 	igt_subtest("plane-all-modeset-transition")
 		for_each_pipe_with_valid_output(&display, pipe, output)
 			run_transition_test(&display, pipe, output, TRANSITION_MODESET, false, false);
-- 
2.11.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH i-g-t 2/5] lib/kms: Handle fence interaction correctly WRT TEST_ONLY.
  2017-07-06  7:11 [PATCH i-g-t 0/5] igt/kms: Make fence waiting explicit Maarten Lankhorst
  2017-07-06  7:11 ` [PATCH i-g-t 1/5] tests/kms_atomic_transition: Add test for plane completion ordering Maarten Lankhorst
@ 2017-07-06  7:11 ` Maarten Lankhorst
  2017-07-06  7:11 ` [PATCH i-g-t 3/5] tests/kms_atomic_transition: Only request fence on enabled pipes Maarten Lankhorst
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Maarten Lankhorst @ 2017-07-06  7:11 UTC (permalink / raw)
  To: intel-gfx; +Cc: gustavo.padovan

All other atomic properties are reset in display_commit_changed,
which is the right place because TEST_ONLY commits don't need to
be reset.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 lib/igt_kms.c | 38 ++++++++++++++++----------------------
 1 file changed, 16 insertions(+), 22 deletions(-)

diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index faf9df2fcedf..8bf56faf41e9 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -2505,7 +2505,6 @@ static void igt_atomic_prepare_crtc_commit(igt_pipe_t *pipe_obj, drmModeAtomicRe
 	pipe_obj->out_fence_fd = -1;
 	if (pipe_obj->out_fence_requested)
 	{
-		pipe_obj->out_fence_requested = false;
 		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_OUT_FENCE_PTR,
 		    (uint64_t)(uintptr_t) &pipe_obj->out_fence_fd);
 	}
@@ -2586,27 +2585,6 @@ static int igt_atomic_commit(igt_display_t *display, uint32_t flags, void *user_
 	}
 
 	ret = drmModeAtomicCommit(display->drm_fd, req, flags, user_data);
-	if (!ret) {
-
-		for_each_pipe(display, pipe) {
-			igt_pipe_t *pipe_obj = &display->pipes[pipe];
-			igt_plane_t *plane;
-
-			/* reset fence_fd to prevent it from being set for the next commit */
-			for_each_plane_on_pipe(display, pipe, plane) {
-				igt_plane_set_fence_fd(plane, -1);
-			}
-
-			if (pipe_obj->out_fence_fd == -1)
-				continue;
-
-			igt_assert(pipe_obj->out_fence_fd >= 0);
-			ret = sync_fence_wait(pipe_obj->out_fence_fd, 1000);
-			igt_assert(ret == 0);
-			close(pipe_obj->out_fence_fd);
-			pipe_obj->out_fence_fd = -1;
-		}
-	}
 
 	drmModeAtomicFree(req);
 	return ret;
@@ -2629,6 +2607,18 @@ display_commit_changed(igt_display_t *display, enum igt_commit_style s)
 		if (s != COMMIT_UNIVERSAL)
 			pipe_obj->mode_changed = false;
 
+		if (s == COMMIT_ATOMIC) {
+			pipe_obj->out_fence_requested = false;
+
+			if (pipe_obj->out_fence_fd == -1)
+				continue;
+
+			igt_assert(pipe_obj->out_fence_fd >= 0);
+			igt_assert_eq(sync_fence_wait(pipe_obj->out_fence_fd, 1000), 0);
+			close(pipe_obj->out_fence_fd);
+			pipe_obj->out_fence_fd = -1;
+		}
+
 		for_each_plane_on_pipe(display, pipe, plane) {
 			plane->fb_changed = false;
 			plane->position_changed = false;
@@ -2638,6 +2628,10 @@ display_commit_changed(igt_display_t *display, enum igt_commit_style s)
 			    !(plane->type == DRM_PLANE_TYPE_PRIMARY ||
 			      plane->type == DRM_PLANE_TYPE_CURSOR))
 				plane->rotation_changed = false;
+
+			if (s == COMMIT_ATOMIC)
+				/* reset fence_fd to prevent it from being set for the next commit */
+				igt_plane_set_fence_fd(plane, -1);
 		}
 	}
 
-- 
2.11.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH i-g-t 3/5] tests/kms_atomic_transition: Only request fence on enabled pipes
  2017-07-06  7:11 [PATCH i-g-t 0/5] igt/kms: Make fence waiting explicit Maarten Lankhorst
  2017-07-06  7:11 ` [PATCH i-g-t 1/5] tests/kms_atomic_transition: Add test for plane completion ordering Maarten Lankhorst
  2017-07-06  7:11 ` [PATCH i-g-t 2/5] lib/kms: Handle fence interaction correctly WRT TEST_ONLY Maarten Lankhorst
@ 2017-07-06  7:11 ` Maarten Lankhorst
  2017-07-06  7:11 ` [PATCH i-g-t 4/5] tests/kms_atomic_transition: Do not clear in-fences after atomic commit Maarten Lankhorst
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Maarten Lankhorst @ 2017-07-06  7:11 UTC (permalink / raw)
  To: intel-gfx; +Cc: gustavo.padovan

Trying to set a fence on disabled pipes will be rejected by the kernel:
[ 1275.865029] [drm:drm_atomic_check_only [drm]] [CRTC:39:pipe B] requesting event but off

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99911
---
 tests/kms_atomic_transition.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/tests/kms_atomic_transition.c b/tests/kms_atomic_transition.c
index 2b56eef66b7b..a2470c0c3571 100644
--- a/tests/kms_atomic_transition.c
+++ b/tests/kms_atomic_transition.c
@@ -717,11 +717,11 @@ static void run_modeset_tests(igt_display_t *display, int howmany, bool nonblock
 			igt_plane_set_fb(plane, &fbs[1]);
 			igt_fb_set_size(&fbs[1], plane, mode->hdisplay, mode->vdisplay);
 			igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
+
+			if (fencing)
+				igt_pipe_request_out_fence(&display->pipes[i]);
 		} else
 			igt_plane_set_fb(plane, NULL);
-
-		if(fencing)
-			igt_pipe_request_out_fence(&display->pipes[i]);
 	}
 
 	/*
-- 
2.11.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH i-g-t 4/5] tests/kms_atomic_transition: Do not clear in-fences after atomic commit.
  2017-07-06  7:11 [PATCH i-g-t 0/5] igt/kms: Make fence waiting explicit Maarten Lankhorst
                   ` (2 preceding siblings ...)
  2017-07-06  7:11 ` [PATCH i-g-t 3/5] tests/kms_atomic_transition: Only request fence on enabled pipes Maarten Lankhorst
@ 2017-07-06  7:11 ` Maarten Lankhorst
  2017-07-06  7:11 ` [PATCH i-g-t 5/5] igt/kms: Do not wait for fence completion during commit Maarten Lankhorst
  2017-07-07  0:15 ` [PATCH i-g-t 0/5] igt/kms: Make fence waiting explicit Gustavo Padovan
  5 siblings, 0 replies; 8+ messages in thread
From: Maarten Lankhorst @ 2017-07-06  7:11 UTC (permalink / raw)
  To: intel-gfx; +Cc: gustavo.padovan

This is already done in igt_display_commit* functions.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 tests/kms_atomic_transition.c | 11 -----------
 1 file changed, 11 deletions(-)

diff --git a/tests/kms_atomic_transition.c b/tests/kms_atomic_transition.c
index a2470c0c3571..6e2b25da75db 100644
--- a/tests/kms_atomic_transition.c
+++ b/tests/kms_atomic_transition.c
@@ -367,14 +367,6 @@ static void configure_fencing(igt_display_t *display, enum pipe pipe)
 	}
 }
 
-static void clear_fencing(igt_display_t *display, enum pipe pipe)
-{
-	igt_plane_t *plane;
-
-	for_each_plane_on_pipe(display, pipe, plane)
-		igt_plane_set_fence_fd(plane, -1);
-}
-
 static void atomic_commit(igt_display_t *display, enum pipe pipe, unsigned int flags, void *data, bool fencing)
 {
 	if (fencing) {
@@ -383,9 +375,6 @@ static void atomic_commit(igt_display_t *display, enum pipe pipe, unsigned int f
 	}
 
 	igt_display_commit_atomic(display, flags, data);
-
-	if (fencing)
-		clear_fencing(display, pipe);
 }
 
 /*
-- 
2.11.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH i-g-t 5/5] igt/kms: Do not wait for fence completion during commit
  2017-07-06  7:11 [PATCH i-g-t 0/5] igt/kms: Make fence waiting explicit Maarten Lankhorst
                   ` (3 preceding siblings ...)
  2017-07-06  7:11 ` [PATCH i-g-t 4/5] tests/kms_atomic_transition: Do not clear in-fences after atomic commit Maarten Lankhorst
@ 2017-07-06  7:11 ` Maarten Lankhorst
  2017-07-07  0:15 ` [PATCH i-g-t 0/5] igt/kms: Make fence waiting explicit Gustavo Padovan
  5 siblings, 0 replies; 8+ messages in thread
From: Maarten Lankhorst @ 2017-07-06  7:11 UTC (permalink / raw)
  To: intel-gfx; +Cc: gustavo.padovan

This will make the IGT tests that use fences more useful, since they can
perform the waiting themselves when required.

To celebrate, also add plane-use-after-nonblocking-unbind-fencing,
the fence version of plane-use-after-nonblocking-unbind.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 lib/igt_kms.c                 | 19 ++++++------
 tests/kms_atomic_transition.c | 71 ++++++++++++++++++++++++++++++++-----------
 2 files changed, 63 insertions(+), 27 deletions(-)

diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 8bf56faf41e9..6390229f1546 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -1698,6 +1698,7 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 		pipe->plane_cursor = -1;
 		pipe->plane_primary = -1;
 		pipe->planes = NULL;
+		pipe->out_fence_fd = -1;
 
 		get_crtc_property(display->drm_fd, pipe->crtc_id,
 				    "background_color",
@@ -1913,6 +1914,9 @@ static void igt_pipe_fini(igt_pipe_t *pipe)
 
 	free(pipe->planes);
 	pipe->planes = NULL;
+
+	if (pipe->out_fence_fd != -1)
+		close(pipe->out_fence_fd);
 }
 
 static void igt_output_fini(igt_output_t *output)
@@ -2502,7 +2506,11 @@ static void igt_atomic_prepare_crtc_commit(igt_pipe_t *pipe_obj, drmModeAtomicRe
 		igt_atomic_populate_crtc_req(req, pipe_obj, IGT_CRTC_ACTIVE, !!output);
 	}
 
-	pipe_obj->out_fence_fd = -1;
+	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,
@@ -2607,16 +2615,9 @@ display_commit_changed(igt_display_t *display, enum igt_commit_style s)
 		if (s != COMMIT_UNIVERSAL)
 			pipe_obj->mode_changed = false;
 
-		if (s == COMMIT_ATOMIC) {
+		if (s == COMMIT_ATOMIC && pipe_obj->out_fence_requested) {
 			pipe_obj->out_fence_requested = false;
-
-			if (pipe_obj->out_fence_fd == -1)
-				continue;
-
 			igt_assert(pipe_obj->out_fence_fd >= 0);
-			igt_assert_eq(sync_fence_wait(pipe_obj->out_fence_fd, 1000), 0);
-			close(pipe_obj->out_fence_fd);
-			pipe_obj->out_fence_fd = -1;
 		}
 
 		for_each_plane_on_pipe(display, pipe, plane) {
diff --git a/tests/kms_atomic_transition.c b/tests/kms_atomic_transition.c
index 6e2b25da75db..e22763bdf94b 100644
--- a/tests/kms_atomic_transition.c
+++ b/tests/kms_atomic_transition.c
@@ -377,6 +377,31 @@ static void atomic_commit(igt_display_t *display, enum pipe pipe, unsigned int f
 	igt_display_commit_atomic(display, flags, data);
 }
 
+static int fd_completed(int fd)
+{
+	struct pollfd pfd = { fd, POLLIN };
+	int ret;
+
+	ret = poll(&pfd, 1, 0);
+	igt_assert(ret >= 0);
+	return ret;
+}
+
+static void wait_for_transition(igt_display_t *display, enum pipe pipe, bool nonblocking, bool fencing)
+{
+	if (fencing) {
+		int fence_fd = display->pipes[pipe].out_fence_fd;
+
+		igt_assert_neq(fd_completed(fence_fd), nonblocking);
+
+		igt_assert(sync_fence_wait(fence_fd, 30000) == 0);
+	} else {
+		igt_assert_neq(fd_completed(display->drm_fd), nonblocking);
+
+		drmHandleEvent(display->drm_fd, &drm_events);
+	}
+}
+
 /*
  * 1. Set primary plane to a known fb.
  * 2. Make sure getcrtc returns the correct fb id.
@@ -393,14 +418,17 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
 	struct igt_fb fb, argb_fb, sprite_fb;
 	drmModeModeInfo *mode, override_mode;
 	igt_plane_t *plane;
-	uint32_t iter_max = 1 << display->pipes[pipe].n_planes, i;
-	struct plane_parms parms[display->pipes[pipe].n_planes];
+	igt_pipe_t *pipe_obj = &display->pipes[pipe];
+	uint32_t iter_max = 1 << pipe_obj->n_planes, i;
+	struct plane_parms parms[pipe_obj->n_planes];
 	bool skip_test = false;
-	unsigned flags = DRM_MODE_PAGE_FLIP_EVENT;
+	unsigned flags = 0;
 	int ret;
 
 	if (fencing)
 		prepare_fencing(display, pipe);
+	else
+		flags |= DRM_MODE_PAGE_FLIP_EVENT;
 
 	if (nonblocking)
 		flags |= DRM_MODE_ATOMIC_NONBLOCK;
@@ -444,10 +472,10 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
 		wm_setup_plane(display, pipe, iter_max - 1, parms);
 
 		if (fencing)
-			igt_pipe_request_out_fence(&display->pipes[pipe]);
+			igt_pipe_request_out_fence(pipe_obj);
 
 		ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY | DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-		if (ret != -EINVAL || display->pipes[pipe].n_planes < 3)
+		if (ret != -EINVAL || pipe_obj->n_planes < 3)
 			break;
 
 		ret = 0;
@@ -474,25 +502,28 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
 	igt_display_commit2(display, COMMIT_ATOMIC);
 
 	if (type == TRANSITION_AFTER_FREE) {
-		struct pollfd pfd = { display->drm_fd, POLLIN };
+		int fence_fd = -1;
 
 		wm_setup_plane(display, pipe, 0, parms);
 
 		atomic_commit(display, pipe, flags, (void *)(unsigned long)0, fencing);
+		if (fencing) {
+			fence_fd = pipe_obj->out_fence_fd;
+			pipe_obj->out_fence_fd = -1;
+		}
 
 		for_each_plane_on_pipe(display, pipe, plane)
 			plane->fb_changed = true;
 
 		igt_display_commit2(display, COMMIT_ATOMIC);
 
-		/*
-		 * Previous atomic commit should have completed
-		 * before this plane-only atomic commit.
-		 */
-		igt_assert_eq(poll(&pfd, 1, 0), 1);
-
-		drmHandleEvent(display->drm_fd, &drm_events);
-
+		if (fence_fd != -1) {
+			igt_assert(fd_completed(fence_fd));
+			close(fence_fd);
+		} else {
+			igt_assert(fd_completed(display->drm_fd));
+			wait_for_transition(display, pipe, false, fencing);
+		}
 		goto cleanup;
 	}
 
@@ -502,7 +533,7 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
 		wm_setup_plane(display, pipe, i, parms);
 
 		atomic_commit(display, pipe, flags, (void *)(unsigned long)i, fencing);
-		drmHandleEvent(display->drm_fd, &drm_events);
+		wait_for_transition(display, pipe, nonblocking, fencing);
 
 		if (type == TRANSITION_MODESET_DISABLE) {
 			igt_output_set_pipe(output, PIPE_NONE);
@@ -510,7 +541,7 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
 			wm_setup_plane(display, pipe, 0, parms);
 
 			atomic_commit(display, pipe, flags, (void *) 0UL, fencing);
-			drmHandleEvent(display->drm_fd, &drm_events);
+			wait_for_transition(display, pipe, nonblocking, fencing);
 		} else {
 			uint32_t j;
 
@@ -522,14 +553,14 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
 					igt_output_override_mode(output, &override_mode);
 
 				atomic_commit(display, pipe, flags, (void *)(unsigned long) j, fencing);
-				drmHandleEvent(display->drm_fd, &drm_events);
+				wait_for_transition(display, pipe, nonblocking, fencing);
 
 				wm_setup_plane(display, pipe, i, parms);
 				if (type == TRANSITION_MODESET)
 					igt_output_override_mode(output, NULL);
 
 				atomic_commit(display, pipe, flags, (void *)(unsigned long) i, fencing);
-				drmHandleEvent(display->drm_fd, &drm_events);
+				wait_for_transition(display, pipe, nonblocking, fencing);
 			}
 		}
 	}
@@ -874,6 +905,10 @@ igt_main
 		for_each_pipe_with_valid_output(&display, pipe, output)
 			run_transition_test(&display, pipe, output, TRANSITION_AFTER_FREE, true, false);
 
+	igt_subtest("plane-use-after-nonblocking-unbind-fencing")
+		for_each_pipe_with_valid_output(&display, pipe, output)
+			run_transition_test(&display, pipe, output, TRANSITION_AFTER_FREE, true, true);
+
 	igt_subtest("plane-all-modeset-transition")
 		for_each_pipe_with_valid_output(&display, pipe, output)
 			run_transition_test(&display, pipe, output, TRANSITION_MODESET, false, false);
-- 
2.11.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH i-g-t 0/5] igt/kms: Make fence waiting explicit.
  2017-07-06  7:11 [PATCH i-g-t 0/5] igt/kms: Make fence waiting explicit Maarten Lankhorst
                   ` (4 preceding siblings ...)
  2017-07-06  7:11 ` [PATCH i-g-t 5/5] igt/kms: Do not wait for fence completion during commit Maarten Lankhorst
@ 2017-07-07  0:15 ` Gustavo Padovan
  2017-07-10  7:06   ` Maarten Lankhorst
  5 siblings, 1 reply; 8+ messages in thread
From: Gustavo Padovan @ 2017-07-07  0:15 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: intel-gfx, gustavo.padovan

Hi Maarten,

2017-07-06 Maarten Lankhorst <maarten.lankhorst@linux.intel.com>:

> I wanted to make kms_atomic_transition pass, but the nonblocking modeset
> fencing tests were bogus.
> 
> This series changes the semantics for fencing slightly. It only keeps the out fences
> in pipe_obj->out_fence_fd, it's up to the test to decide what to do with it, which
> is probably just waiting on the fd or checking if it completed.
> 
> Maarten Lankhorst (5):
>   tests/kms_atomic_transition: Add test for plane completion ordering.
>   lib/kms: Handle fence interaction correctly WRT TEST_ONLY.
>   tests/kms_atomic_transition: Only request fence on enabled pipes
>   tests/kms_atomic_transition: Do not clear in-fences after atomic
>     commit.
>   igt/kms: Do not wait for fence completion during commit
> 
>  lib/igt_kms.c                 | 41 ++++++++----------
>  tests/kms_atomic_transition.c | 99 +++++++++++++++++++++++++++++++++----------
>  2 files changed, 95 insertions(+), 45 deletions(-)

This make fencing a lot cleaner.

For the whole series:

Acked-by: Gustavo Padovan <gustavo.padovan@collabora.com>

Gustavo

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH i-g-t 0/5] igt/kms: Make fence waiting explicit.
  2017-07-07  0:15 ` [PATCH i-g-t 0/5] igt/kms: Make fence waiting explicit Gustavo Padovan
@ 2017-07-10  7:06   ` Maarten Lankhorst
  0 siblings, 0 replies; 8+ messages in thread
From: Maarten Lankhorst @ 2017-07-10  7:06 UTC (permalink / raw)
  To: Gustavo Padovan; +Cc: intel-gfx, gustavo.padovan

Op 07-07-17 om 02:15 schreef Gustavo Padovan:
> Hi Maarten,
>
> 2017-07-06 Maarten Lankhorst <maarten.lankhorst@linux.intel.com>:
>
>> I wanted to make kms_atomic_transition pass, but the nonblocking modeset
>> fencing tests were bogus.
>>
>> This series changes the semantics for fencing slightly. It only keeps the out fences
>> in pipe_obj->out_fence_fd, it's up to the test to decide what to do with it, which
>> is probably just waiting on the fd or checking if it completed.
>>
>> Maarten Lankhorst (5):
>>   tests/kms_atomic_transition: Add test for plane completion ordering.
>>   lib/kms: Handle fence interaction correctly WRT TEST_ONLY.
>>   tests/kms_atomic_transition: Only request fence on enabled pipes
>>   tests/kms_atomic_transition: Do not clear in-fences after atomic
>>     commit.
>>   igt/kms: Do not wait for fence completion during commit
>>
>>  lib/igt_kms.c                 | 41 ++++++++----------
>>  tests/kms_atomic_transition.c | 99 +++++++++++++++++++++++++++++++++----------
>>  2 files changed, 95 insertions(+), 45 deletions(-)
> This make fencing a lot cleaner.
>
> For the whole series:
>
> Acked-by: Gustavo Padovan <gustavo.padovan@collabora.com>
>
> Gustavo
>
Thanks, pushed. :)

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

end of thread, other threads:[~2017-07-10  7:06 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-06  7:11 [PATCH i-g-t 0/5] igt/kms: Make fence waiting explicit Maarten Lankhorst
2017-07-06  7:11 ` [PATCH i-g-t 1/5] tests/kms_atomic_transition: Add test for plane completion ordering Maarten Lankhorst
2017-07-06  7:11 ` [PATCH i-g-t 2/5] lib/kms: Handle fence interaction correctly WRT TEST_ONLY Maarten Lankhorst
2017-07-06  7:11 ` [PATCH i-g-t 3/5] tests/kms_atomic_transition: Only request fence on enabled pipes Maarten Lankhorst
2017-07-06  7:11 ` [PATCH i-g-t 4/5] tests/kms_atomic_transition: Do not clear in-fences after atomic commit Maarten Lankhorst
2017-07-06  7:11 ` [PATCH i-g-t 5/5] igt/kms: Do not wait for fence completion during commit Maarten Lankhorst
2017-07-07  0:15 ` [PATCH i-g-t 0/5] igt/kms: Make fence waiting explicit Gustavo Padovan
2017-07-10  7:06   ` Maarten Lankhorst

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