* [igt-dev] [PATCH i-g-t v4 0/2] kms_atomic_transition improvements @ 2019-04-03 12:45 Stanislav Lisovskiy 2019-04-03 12:45 ` [igt-dev] [PATCH i-g-t v4 1/2] igt/tests/kms_atomic_transition: Skip transition, if no changes done Stanislav Lisovskiy 2019-04-03 12:45 ` [igt-dev] [PATCH i-g-t v4 2/2] igt/tests/kms_atomic_transition: Tolerate if can't have all planes Stanislav Lisovskiy 0 siblings, 2 replies; 4+ messages in thread From: Stanislav Lisovskiy @ 2019-04-03 12:45 UTC (permalink / raw) To: igt-dev; +Cc: martin.peres, stanislav.lisovskiy Fixed run_transition_test issue, which might happen when no changes are done and wait_transition is called and made setup_parms function tolerate if kernel can't afford having all sprite planes enabled depending on current mode. Remove redundant condition nesting and code. Stanislav Lisovskiy (2): igt/tests/kms_atomic_transition: Skip transition, if no changes done igt/tests/kms_atomic_transition: Tolerate if can't have all planes tests/kms_atomic_transition.c | 128 +++++++++++++++++++--------------- 1 file changed, 71 insertions(+), 57 deletions(-) -- 2.17.1 _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 4+ messages in thread
* [igt-dev] [PATCH i-g-t v4 1/2] igt/tests/kms_atomic_transition: Skip transition, if no changes done 2019-04-03 12:45 [igt-dev] [PATCH i-g-t v4 0/2] kms_atomic_transition improvements Stanislav Lisovskiy @ 2019-04-03 12:45 ` Stanislav Lisovskiy 2019-04-03 12:45 ` [igt-dev] [PATCH i-g-t v4 2/2] igt/tests/kms_atomic_transition: Tolerate if can't have all planes Stanislav Lisovskiy 1 sibling, 0 replies; 4+ messages in thread From: Stanislav Lisovskiy @ 2019-04-03 12:45 UTC (permalink / raw) To: igt-dev; +Cc: martin.peres, stanislav.lisovskiy While fixing used amount of planes, discovered that if wm_setup_plane is called with 0 planes(might happen during main testing cycle, as parms[i].mask can be 0 due to randomization) then subsequent wait_transition fails in assertion on fd_completed. So added return value to wm_setup_plane, which would allow to determine, if we need to skip this step. Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> --- tests/kms_atomic_transition.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/tests/kms_atomic_transition.c b/tests/kms_atomic_transition.c index 18f73317..638fe17e 100644 --- a/tests/kms_atomic_transition.c +++ b/tests/kms_atomic_transition.c @@ -118,11 +118,12 @@ static void configure_fencing(igt_plane_t *plane) igt_assert_eq(ret, 0); } -static void +static int wm_setup_plane(igt_display_t *display, enum pipe pipe, uint32_t mask, struct plane_parms *parms, bool fencing) { igt_plane_t *plane; + int planes_set_up = 0; /* * Make sure these buffers are suited for display use @@ -133,8 +134,10 @@ wm_setup_plane(igt_display_t *display, enum pipe pipe, int i = plane->index; if (!mask || !(parms[i].mask & mask)) { - if (plane->values[IGT_PLANE_FB_ID]) + if (plane->values[IGT_PLANE_FB_ID]) { igt_plane_set_fb(plane, NULL); + planes_set_up++; + } continue; } @@ -144,7 +147,10 @@ wm_setup_plane(igt_display_t *display, enum pipe pipe, 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); + + planes_set_up++; } + return planes_set_up; } static void ev_page_flip(int fd, unsigned seq, unsigned tv_sec, unsigned tv_usec, void *user_data) @@ -544,7 +550,8 @@ 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, i, parms, fencing); + if (!wm_setup_plane(display, pipe, i, parms, fencing)) + continue; atomic_commit(display, pipe, flags, (void *)(unsigned long)i, fencing); wait_for_transition(display, pipe, nonblocking, fencing); @@ -552,7 +559,8 @@ 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, fencing); + if (!wm_setup_plane(display, pipe, 0, parms, fencing)) + continue; atomic_commit(display, pipe, flags, (void *) 0UL, fencing); wait_for_transition(display, pipe, nonblocking, fencing); @@ -568,7 +576,8 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output n_enable_planes < pipe_obj->n_planes) continue; - wm_setup_plane(display, pipe, j, parms, fencing); + if (!wm_setup_plane(display, pipe, j, parms, fencing)) + continue; if (type >= TRANSITION_MODESET) igt_output_override_mode(output, &override_mode); @@ -576,7 +585,9 @@ 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, fencing); + if (!wm_setup_plane(display, pipe, i, parms, fencing)) + continue; + if (type >= TRANSITION_MODESET) igt_output_override_mode(output, NULL); -- 2.17.1 _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [igt-dev] [PATCH i-g-t v4 2/2] igt/tests/kms_atomic_transition: Tolerate if can't have all planes 2019-04-03 12:45 [igt-dev] [PATCH i-g-t v4 0/2] kms_atomic_transition improvements Stanislav Lisovskiy 2019-04-03 12:45 ` [igt-dev] [PATCH i-g-t v4 1/2] igt/tests/kms_atomic_transition: Skip transition, if no changes done Stanislav Lisovskiy @ 2019-04-03 12:45 ` Stanislav Lisovskiy 1 sibling, 0 replies; 4+ messages in thread From: Stanislav Lisovskiy @ 2019-04-03 12:45 UTC (permalink / raw) To: igt-dev; +Cc: martin.peres, stanislav.lisovskiy With some upcoming changes i915 might not allow all sprite planes enabled, depending on available bandwidth limitation. Thus the test need to decrement amount of planes and try again, instead of panicking. v2: Removed excessive nested conditions, making code a bit more readable(hopefully). Stopped using global n_planes variable as it might cause resources being unreleased. Using now parms[i].mask as a way to determine if plane has to be included into commit. Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> --- tests/kms_atomic_transition.c | 105 +++++++++++++++++----------------- 1 file changed, 54 insertions(+), 51 deletions(-) diff --git a/tests/kms_atomic_transition.c b/tests/kms_atomic_transition.c index 638fe17e..ee07880e 100644 --- a/tests/kms_atomic_transition.c +++ b/tests/kms_atomic_transition.c @@ -214,7 +214,9 @@ static void setup_parms(igt_display_t *display, enum pipe pipe, uint32_t n_planes = display->pipes[pipe].n_planes; uint32_t n_overlays = 0, overlays[n_planes]; igt_plane_t *plane; - uint32_t iter_mask = 3; + uint32_t iter_mask; + int retries = n_planes - 1; + int ret = 0; do_or_die(drmGetCap(display->drm_fd, DRM_CAP_CURSOR_WIDTH, &cursor_width)); if (cursor_width >= mode->hdisplay) @@ -224,6 +226,10 @@ static void setup_parms(igt_display_t *display, enum pipe pipe, if (cursor_height >= mode->vdisplay) cursor_height = mode->vdisplay; +retry: + n_overlays = 0; + iter_mask = 3; + for_each_plane_on_pipe(display, pipe, plane) { int i = plane->index; @@ -238,12 +244,16 @@ static void setup_parms(igt_display_t *display, enum pipe pipe, parms[i].height = cursor_height; parms[i].mask = 1 << 1; } else { - parms[i].fb = sprite_fb; - parms[i].mask = 1 << 2; - - iter_mask |= 1 << 2; - - overlays[n_overlays++] = i; + if (n_overlays < (n_planes - 2)) { + parms[i].fb = sprite_fb; + parms[i].mask = 1 << 2; + iter_mask |= 1 << 2; + overlays[n_overlays++] = i; + } + else { + parms[i].fb = NULL; + parms[i].mask = 0; + } } } @@ -278,16 +288,13 @@ static void setup_parms(igt_display_t *display, enum pipe pipe, * Pre gen9 not all sizes are supported, find the biggest possible * size that can be enabled on all sprite planes. */ -retry: prev_w = sprite_width = cursor_width; prev_h = sprite_height = cursor_height; max_sprite_width = (sprite_width == mode->hdisplay); max_sprite_height = (sprite_height == mode->vdisplay); - while (1) { - int ret; - + while (!max_sprite_width && !max_sprite_height) { set_sprite_wh(display, pipe, parms, sprite_fb, alpha, sprite_width, sprite_height); @@ -295,54 +302,49 @@ retry: ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY | DRM_MODE_ATOMIC_ALLOW_MODESET, NULL); igt_assert(!is_atomic_check_failure_errno(ret)); - if (is_atomic_check_plane_size_errno(ret)) { - if (cursor_width == sprite_width && - cursor_height == sprite_height) { - igt_assert_f(alpha, - "Cannot configure the test with all sprite planes enabled\n"); - - /* retry once with XRGB format. */ - alpha = false; - goto retry; - } - - sprite_width = prev_w; - sprite_height = prev_h; - - if (max_sprite_width && max_sprite_height) { - set_sprite_wh(display, pipe, parms, sprite_fb, - alpha, sprite_width, sprite_height); - break; - } - - if (!max_sprite_width) - max_sprite_width = true; - else - max_sprite_height = true; - } else { + if (!is_atomic_check_plane_size_errno(ret)) { prev_w = sprite_width; prev_h = sprite_height; - } - - if (!max_sprite_width) { - sprite_width *= 2; - + + sprite_width *= max_sprite_width ? 1 : 2; if (sprite_width >= mode->hdisplay) { max_sprite_width = true; - sprite_width = mode->hdisplay; } - } else if (!max_sprite_height) { - sprite_height *= 2; + sprite_height *= max_sprite_height ? 1 : 2; if (sprite_height >= mode->vdisplay) { max_sprite_height = true; - sprite_height = mode->vdisplay; } - } else - /* Max sized sprites for all! */ - break; + continue; + } + + if (cursor_width == sprite_width && + cursor_height == sprite_height) { + igt_assert_f(retries > 0, + "Cannot configure the test with all sprite planes enabled\n"); + --retries; + /* retry once with XRGB format. */ + if (alpha) { + alpha = false; + igt_warn("Removed alpha\n"); + } + else { + igt_assert_f(n_planes > 1, "No planes left to proceed with!"); + n_planes--; + igt_warn("Reduced available planes to %d\n", n_planes); + } + goto retry; + } + + sprite_width = prev_w; + sprite_height = prev_h; + + if (!max_sprite_width) + max_sprite_width = true; + else + max_sprite_height = true; } igt_info("Running test on pipe %s with resolution %dx%d and sprite size %dx%d alpha %i\n", @@ -463,7 +465,6 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output if (flags & DRM_MODE_ATOMIC_ALLOW_MODESET) { igt_output_set_pipe(output, PIPE_NONE); - igt_display_commit2(display, COMMIT_ATOMIC); igt_output_set_pipe(output, pipe); @@ -525,8 +526,10 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output } /* force planes to be part of commit */ - for_each_plane_on_pipe(display, pipe, plane) - igt_plane_set_position(plane, 0, 0); + for_each_plane_on_pipe(display, pipe, plane) { + if (parms[plane->index].mask) + igt_plane_set_position(plane, 0, 0); + } igt_display_commit2(display, COMMIT_ATOMIC); -- 2.17.1 _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [igt-dev] [PATCH i-g-t v4 0/2] kms_atomic_transition improvements @ 2019-04-03 12:54 Stanislav Lisovskiy 2019-04-03 12:54 ` [igt-dev] [PATCH i-g-t v4 1/2] igt/tests/kms_atomic_transition: Skip transition, if no changes done Stanislav Lisovskiy 0 siblings, 1 reply; 4+ messages in thread From: Stanislav Lisovskiy @ 2019-04-03 12:54 UTC (permalink / raw) To: igt-dev; +Cc: martin.peres, stanislav.lisovskiy Fixed run_transition_test issue, which might happen when no changes are done and wait_transition is called and made setup_parms function tolerate if kernel can't afford having all sprite planes enabled depending on current mode. Remove redundant condition nesting and code. Stanislav Lisovskiy (2): igt/tests/kms_atomic_transition: Skip transition, if no changes done igt/tests/kms_atomic_transition: Tolerate if can't have all planes tests/kms_atomic_transition.c | 130 +++++++++++++++++++--------------- 1 file changed, 72 insertions(+), 58 deletions(-) -- 2.17.1 _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 4+ messages in thread
* [igt-dev] [PATCH i-g-t v4 1/2] igt/tests/kms_atomic_transition: Skip transition, if no changes done 2019-04-03 12:54 [igt-dev] [PATCH i-g-t v4 0/2] kms_atomic_transition improvements Stanislav Lisovskiy @ 2019-04-03 12:54 ` Stanislav Lisovskiy 0 siblings, 0 replies; 4+ messages in thread From: Stanislav Lisovskiy @ 2019-04-03 12:54 UTC (permalink / raw) To: igt-dev; +Cc: martin.peres, stanislav.lisovskiy While fixing used amount of planes, discovered that if wm_setup_plane is called with 0 planes(might happen during main testing cycle, as parms[i].mask can be 0 due to randomization) then subsequent wait_transition fails in assertion on fd_completed. So added return value to wm_setup_plane, which would allow to determine, if we need to skip this step. Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> --- tests/kms_atomic_transition.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/tests/kms_atomic_transition.c b/tests/kms_atomic_transition.c index 18f73317..638fe17e 100644 --- a/tests/kms_atomic_transition.c +++ b/tests/kms_atomic_transition.c @@ -118,11 +118,12 @@ static void configure_fencing(igt_plane_t *plane) igt_assert_eq(ret, 0); } -static void +static int wm_setup_plane(igt_display_t *display, enum pipe pipe, uint32_t mask, struct plane_parms *parms, bool fencing) { igt_plane_t *plane; + int planes_set_up = 0; /* * Make sure these buffers are suited for display use @@ -133,8 +134,10 @@ wm_setup_plane(igt_display_t *display, enum pipe pipe, int i = plane->index; if (!mask || !(parms[i].mask & mask)) { - if (plane->values[IGT_PLANE_FB_ID]) + if (plane->values[IGT_PLANE_FB_ID]) { igt_plane_set_fb(plane, NULL); + planes_set_up++; + } continue; } @@ -144,7 +147,10 @@ wm_setup_plane(igt_display_t *display, enum pipe pipe, 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); + + planes_set_up++; } + return planes_set_up; } static void ev_page_flip(int fd, unsigned seq, unsigned tv_sec, unsigned tv_usec, void *user_data) @@ -544,7 +550,8 @@ 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, i, parms, fencing); + if (!wm_setup_plane(display, pipe, i, parms, fencing)) + continue; atomic_commit(display, pipe, flags, (void *)(unsigned long)i, fencing); wait_for_transition(display, pipe, nonblocking, fencing); @@ -552,7 +559,8 @@ 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, fencing); + if (!wm_setup_plane(display, pipe, 0, parms, fencing)) + continue; atomic_commit(display, pipe, flags, (void *) 0UL, fencing); wait_for_transition(display, pipe, nonblocking, fencing); @@ -568,7 +576,8 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output n_enable_planes < pipe_obj->n_planes) continue; - wm_setup_plane(display, pipe, j, parms, fencing); + if (!wm_setup_plane(display, pipe, j, parms, fencing)) + continue; if (type >= TRANSITION_MODESET) igt_output_override_mode(output, &override_mode); @@ -576,7 +585,9 @@ 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, fencing); + if (!wm_setup_plane(display, pipe, i, parms, fencing)) + continue; + if (type >= TRANSITION_MODESET) igt_output_override_mode(output, NULL); -- 2.17.1 _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-04-03 12:55 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-04-03 12:45 [igt-dev] [PATCH i-g-t v4 0/2] kms_atomic_transition improvements Stanislav Lisovskiy 2019-04-03 12:45 ` [igt-dev] [PATCH i-g-t v4 1/2] igt/tests/kms_atomic_transition: Skip transition, if no changes done Stanislav Lisovskiy 2019-04-03 12:45 ` [igt-dev] [PATCH i-g-t v4 2/2] igt/tests/kms_atomic_transition: Tolerate if can't have all planes Stanislav Lisovskiy -- strict thread matches above, loose matches on Subject: below -- 2019-04-03 12:54 [igt-dev] [PATCH i-g-t v4 0/2] kms_atomic_transition improvements Stanislav Lisovskiy 2019-04-03 12:54 ` [igt-dev] [PATCH i-g-t v4 1/2] igt/tests/kms_atomic_transition: Skip transition, if no changes done Stanislav Lisovskiy
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox