From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
To: intel-gfx@lists.freedesktop.org
Subject: [PATCH i-g-t v4 1/7] tests: Stop looking at plane private members
Date: Fri, 29 Sep 2017 11:59:31 +0200 [thread overview]
Message-ID: <20170929095937.15702-2-maarten.lankhorst@linux.intel.com> (raw)
In-Reply-To: <20170929095937.15702-1-maarten.lankhorst@linux.intel.com>
Most of these tests have no reason to look at those members,
so try other ways of getting the information.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
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(-)
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 3d1061fa08c8..62197dcfea7b 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -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);
diff --git a/tests/kms_atomic_transition.c b/tests/kms_atomic_transition.c
index e22763bdf94b..48823a09aed2 100644
--- a/tests/kms_atomic_transition.c
+++ b/tests/kms_atomic_transition.c
@@ -46,6 +46,11 @@ struct plane_parms {
#define hweight32 __builtin_popcount
+/* globals for fence support */
+int *timeline;
+pthread_t *thread;
+int *seqno;
+
static void
run_primary_test(igt_display_t *display, enum pipe pipe, igt_output_t *output)
{
@@ -89,9 +94,34 @@ run_primary_test(igt_display_t *display, enum pipe pipe, igt_output_t *output)
igt_remove_fb(display->drm_fd, &fb);
}
+static void *fence_inc_thread(void *arg)
+{
+ int t = *((int *) arg);
+
+ pthread_detach(pthread_self());
+
+ usleep(5000);
+ sw_sync_timeline_inc(t, 1);
+ return NULL;
+}
+
+static void configure_fencing(igt_plane_t *plane)
+{
+ int i, fd, ret;
+
+ i = plane->index;
+
+ seqno[i]++;
+ fd = sw_sync_timeline_create_fence(timeline[i], seqno[i]);
+ igt_plane_set_fence_fd(plane, fd);
+ close(fd);
+ ret = pthread_create(&thread[i], NULL, fence_inc_thread, &timeline[i]);
+ igt_assert_eq(ret, 0);
+}
+
static void
wm_setup_plane(igt_display_t *display, enum pipe pipe,
- uint32_t mask, struct plane_parms *parms)
+ uint32_t mask, struct plane_parms *parms, bool fencing)
{
igt_plane_t *plane;
@@ -108,6 +138,9 @@ wm_setup_plane(igt_display_t *display, enum pipe pipe,
continue;
}
+ if (fencing)
+ configure_fencing(plane);
+
igt_plane_set_fb(plane, parms[i].fb);
igt_fb_set_size(parms[i].fb, plane, parms[i].width, parms[i].height);
igt_plane_set_size(plane, parms[i].width, parms[i].height);
@@ -136,7 +169,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;
}
@@ -183,6 +216,7 @@ static void set_sprite_wh(igt_display_t *display, enum pipe pipe,
static void setup_parms(igt_display_t *display, enum pipe pipe,
const drmModeModeInfo *mode,
+ struct igt_fb *primary_fb,
struct igt_fb *argb_fb,
struct igt_fb *sprite_fb,
struct plane_parms *parms)
@@ -205,7 +239,7 @@ static void setup_parms(igt_display_t *display, enum pipe pipe,
int i = plane->index;
if (plane->type == DRM_PLANE_TYPE_PRIMARY) {
- parms[i].fb = plane->fb;
+ parms[i].fb = primary_fb;
parms[i].width = mode->hdisplay;
parms[i].height = mode->vdisplay;
} else if (plane->type == DRM_PLANE_TYPE_CURSOR) {
@@ -242,7 +276,7 @@ retry:
set_sprite_wh(display, pipe, parms, sprite_fb,
alpha, sprite_width, sprite_height);
- wm_setup_plane(display, pipe, (1 << n_planes) - 1, parms);
+ wm_setup_plane(display, pipe, (1 << n_planes) - 1, parms, false);
ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY | DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
if (ret == -EINVAL) {
@@ -300,10 +334,6 @@ retry:
sprite_width, sprite_height, alpha);
}
-int *timeline;
-pthread_t *thread;
-int *seqno;
-
static void prepare_fencing(igt_display_t *display, enum pipe pipe)
{
igt_plane_t *plane;
@@ -335,44 +365,10 @@ static void unprepare_fencing(igt_display_t *display, enum pipe pipe)
free(seqno);
}
-static void *fence_inc_thread(void *arg)
-{
- int t = *((int *) arg);
-
- pthread_detach(pthread_self());
-
- usleep(5000);
- sw_sync_timeline_inc(t, 1);
- return NULL;
-}
-
-static void configure_fencing(igt_display_t *display, enum pipe pipe)
-{
- igt_plane_t *plane;
- int i, fd, ret;
-
- for_each_plane_on_pipe(display, pipe, plane) {
-
- if (!plane->fb)
- continue;
-
- i = plane->index;
-
- seqno[i]++;
- fd = sw_sync_timeline_create_fence(timeline[i], seqno[i]);
- igt_plane_set_fence_fd(plane, fd);
- close(fd);
- ret = pthread_create(&thread[i], NULL, fence_inc_thread, &timeline[i]);
- igt_assert_eq(ret, 0);
- }
-}
-
static void atomic_commit(igt_display_t *display, enum pipe pipe, unsigned int flags, void *data, bool fencing)
{
- if (fencing) {
- configure_fencing(display, pipe);
+ if (fencing)
igt_pipe_request_out_fence(&display->pipes[pipe]);
- }
igt_display_commit_atomic(display, flags, data);
}
@@ -445,7 +441,7 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
igt_output_set_pipe(output, pipe);
- wm_setup_plane(display, pipe, 0, NULL);
+ wm_setup_plane(display, pipe, 0, NULL, false);
if (flags & DRM_MODE_ATOMIC_ALLOW_MODESET) {
skip_test = nonblocking && skip_on_unsupported_nonblocking_modeset(display);
@@ -461,7 +457,7 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
igt_display_commit2(display, COMMIT_ATOMIC);
- setup_parms(display, pipe, mode, &argb_fb, &sprite_fb, parms);
+ setup_parms(display, pipe, mode, &fb, &argb_fb, &sprite_fb, parms);
/*
* In some configurations the tests may not run to completion with all
@@ -469,7 +465,7 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
* planes to fix this
*/
while (1) {
- wm_setup_plane(display, pipe, iter_max - 1, parms);
+ wm_setup_plane(display, pipe, iter_max - 1, parms, false);
if (fencing)
igt_pipe_request_out_fence(pipe_obj);
@@ -504,7 +500,7 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
if (type == TRANSITION_AFTER_FREE) {
int fence_fd = -1;
- wm_setup_plane(display, pipe, 0, parms);
+ wm_setup_plane(display, pipe, 0, parms, fencing);
atomic_commit(display, pipe, flags, (void *)(unsigned long)0, fencing);
if (fencing) {
@@ -512,8 +508,9 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
pipe_obj->out_fence_fd = -1;
}
+ /* force planes to be part of commit */
for_each_plane_on_pipe(display, pipe, plane)
- plane->fb_changed = true;
+ igt_plane_set_position(plane, 0, 0);
igt_display_commit2(display, COMMIT_ATOMIC);
@@ -530,7 +527,7 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
for (i = 0; i < iter_max; i++) {
igt_output_set_pipe(output, pipe);
- wm_setup_plane(display, pipe, i, parms);
+ wm_setup_plane(display, pipe, i, parms, fencing);
atomic_commit(display, pipe, flags, (void *)(unsigned long)i, fencing);
wait_for_transition(display, pipe, nonblocking, fencing);
@@ -538,7 +535,7 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
if (type == TRANSITION_MODESET_DISABLE) {
igt_output_set_pipe(output, PIPE_NONE);
- wm_setup_plane(display, pipe, 0, parms);
+ wm_setup_plane(display, pipe, 0, parms, fencing);
atomic_commit(display, pipe, flags, (void *) 0UL, fencing);
wait_for_transition(display, pipe, nonblocking, fencing);
@@ -547,7 +544,7 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
/* i -> i+1 will be done when i increases, can be skipped here */
for (j = iter_max - 1; j > i + 1; j--) {
- wm_setup_plane(display, pipe, j, parms);
+ wm_setup_plane(display, pipe, j, parms, fencing);
if (type == TRANSITION_MODESET)
igt_output_override_mode(output, &override_mode);
@@ -555,7 +552,7 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output
atomic_commit(display, pipe, flags, (void *)(unsigned long) j, fencing);
wait_for_transition(display, pipe, nonblocking, fencing);
- wm_setup_plane(display, pipe, i, parms);
+ wm_setup_plane(display, pipe, i, parms, fencing);
if (type == TRANSITION_MODESET)
igt_output_override_mode(output, NULL);
@@ -666,15 +663,19 @@ static unsigned set_combinations(igt_display_t *display, unsigned mask, struct i
return event_mask;
}
-static void refresh_primaries(igt_display_t *display)
+static void refresh_primaries(igt_display_t *display, int mask)
{
enum pipe pipe;
igt_plane_t *plane;
- for_each_pipe(display, pipe)
+ for_each_pipe(display, pipe) {
+ if (!((1 << pipe) & mask))
+ continue;
+
for_each_plane_on_pipe(display, pipe, plane)
- if (plane->type == DRM_PLANE_TYPE_PRIMARY && plane->fb)
- plane->fb_changed = true;
+ if (plane->type == DRM_PLANE_TYPE_PRIMARY)
+ igt_plane_set_position(plane, 0, 0);
+ }
}
static void collect_crcs_mask(igt_pipe_crc_t **pipe_crcs, unsigned mask, igt_crc_t *crcs)
@@ -783,7 +784,7 @@ static void run_modeset_tests(igt_display_t *display, int howmany, bool nonblock
collect_crcs_mask(pipe_crcs, j, crcs[1]);
- refresh_primaries(display);
+ refresh_primaries(display, j);
commit_display(display, j, nonblocking);
collect_crcs_mask(pipe_crcs, j, crcs[2]);
@@ -794,7 +795,7 @@ static void run_modeset_tests(igt_display_t *display, int howmany, bool nonblock
commit_display(display, event_mask, nonblocking);
collect_crcs_mask(pipe_crcs, i, crcs[3]);
- refresh_primaries(display);
+ refresh_primaries(display, i);
commit_display(display, i, nonblocking);
collect_crcs_mask(pipe_crcs, i, crcs[4]);
diff --git a/tests/kms_busy.c b/tests/kms_busy.c
index 7e31c2c82dc5..f430beaf7373 100644
--- a/tests/kms_busy.c
+++ b/tests/kms_busy.c
@@ -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);
}
diff --git a/tests/kms_concurrent.c b/tests/kms_concurrent.c
index 5d1e0bc5ad19..7f44c596b4c4 100644
--- a/tests/kms_concurrent.c
+++ b/tests/kms_concurrent.c
@@ -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);
diff --git a/tests/kms_cursor_legacy.c b/tests/kms_cursor_legacy.c
index ba7c3f51ba21..65a001a9dec0 100644
--- a/tests/kms_cursor_legacy.c
+++ b/tests/kms_cursor_legacy.c
@@ -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);
}
}
diff --git a/tests/kms_fbc_crc.c b/tests/kms_fbc_crc.c
index 08abb8b4b95e..06234566c232 100644
--- a/tests/kms_fbc_crc.c
+++ b/tests/kms_fbc_crc.c
@@ -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)
diff --git a/tests/kms_panel_fitting.c b/tests/kms_panel_fitting.c
index 5266862a70cf..85a231e60ea2 100644
--- a/tests/kms_panel_fitting.c
+++ b/tests/kms_panel_fitting.c
@@ -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)
diff --git a/tests/kms_plane_scaling.c b/tests/kms_plane_scaling.c
index 1457894aaa10..5ed69f35f267 100644
--- a/tests/kms_plane_scaling.c
+++ b/tests/kms_plane_scaling.c
@@ -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)
diff --git a/tests/kms_rmfb.c b/tests/kms_rmfb.c
index 9f1f564e54aa..c97adceea761 100644
--- a/tests/kms_rmfb.c
+++ b/tests/kms_rmfb.c
@@ -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);
diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
index 21e264addc09..4d2ef1c184f0 100644
--- a/tests/kms_rotation_crc.c
+++ b/tests/kms_rotation_crc.c
@@ -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);
--
2.14.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2017-09-29 9:59 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-29 9:59 [PATCH i-g-t v4 0/7] lib/igt_kms: Convert properties to be more atomic-like Maarten Lankhorst
2017-09-29 9:59 ` Maarten Lankhorst [this message]
2017-09-29 13:13 ` [PATCH i-g-t v4 1/7] tests: Stop looking at plane private members Mika Kahola
2017-10-02 9:31 ` Maarten Lankhorst
2017-09-29 9:59 ` [PATCH i-g-t v4 2/7] lib/igt_kms: Change output->pending_crtc_idx_mask to output->pending_pipe Maarten Lankhorst
2017-10-02 10:19 ` Mika Kahola
2017-09-29 9:59 ` [PATCH i-g-t v4 3/7] lib/igt_kms: Commit primary plane when a modeset is forced on a pipe Maarten Lankhorst
2017-10-02 11:02 ` Mika Kahola
2017-09-29 9:59 ` [PATCH i-g-t v4 4/7] lib/igt_kms: Rework connector properties to be more atomic, v2 Maarten Lankhorst
2017-10-02 12:22 ` Mika Kahola
2017-09-29 9:59 ` [PATCH i-g-t v4 5/7] lib/igt_kms: Rework plane properties to be more atomic, v4 Maarten Lankhorst
2017-10-03 12:05 ` Mika Kahola
2017-10-04 7:26 ` Maarten Lankhorst
2017-10-04 13:54 ` [PATCH i-g-t] lib/igt_kms: Rework plane properties to be more atomic, v5 Maarten Lankhorst
2017-09-29 9:59 ` [PATCH i-g-t v4 6/7] lib/igt_kms: Rework pipe properties to be more atomic, v4.1 Maarten Lankhorst
2017-10-03 7:45 ` [PATCH i-g-t] lib/igt_kms: Rework pipe properties to be more atomic, v5 Maarten Lankhorst
2017-10-04 13:55 ` [PATCH i-g-t] lib/igt_kms: Rework pipe properties to be more atomic, v6 Maarten Lankhorst
2017-09-29 9:59 ` [PATCH i-g-t v4 7/7] igt/kms_rotation_crc : Fix flip tests for sprite plane Maarten Lankhorst
2017-09-29 10:58 ` Mika Kahola
2017-09-29 11:03 ` ✓ Fi.CI.BAT: success for lib/igt_kms: Convert properties to be more atomic-like. (rev8) Patchwork
2017-09-29 12:13 ` ✗ Fi.CI.IGT: failure " Patchwork
2017-10-03 9:08 ` ✗ Fi.CI.BAT: failure for lib/igt_kms: Convert properties to be more atomic-like. (rev9) Patchwork
2017-10-03 10:22 ` Petri Latvala
2017-10-04 18:00 ` ✓ Fi.CI.BAT: success for lib/igt_kms: Convert properties to be more atomic-like. (rev11) Patchwork
2017-10-04 22:08 ` ✗ Fi.CI.IGT: warning " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170929095937.15702-2-maarten.lankhorst@linux.intel.com \
--to=maarten.lankhorst@linux.intel.com \
--cc=intel-gfx@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.