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.lankho...@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

Reply via email to