Commit d31a5ba8 authored by Imre Deak's avatar Imre Deak

tests/kms_flip: Check for link reset during expired seq vblank wait

The expired vblank seq subtests can fail when using certain monitors with a
behavior described in

commit 60e8be7c
Author: Imre Deak <imre.deak@intel.com>
Date:   Mon May 11 22:08:53 2020 +0300

    tests/kms_flip: Retry test in case of a DP/HDMI link reset

As in the above commit, retry the test once if a hotplug was detected during
the test.
Signed-off-by: Imre Deak's avatarImre Deak <imre.deak@intel.com>
Reviewed-by: Uma Shankar's avatarUma Shankar <uma.shankar@intel.com>
parent 5c79c34b
Pipeline #172224 failed with stages
in 9 minutes and 19 seconds
......@@ -658,8 +658,12 @@ static int set_mode(struct test_output *o, uint32_t fb, int x, int y)
return 0;
}
/* Return mask of completed events. */
static unsigned int run_test_step(struct test_output *o)
/*
* Return true if the test steps were run successfully, false in case of a
* failure that requires rerunning the test steps. On success events will
* contain the mask of completed events.
*/
static bool run_test_step(struct test_output *o, unsigned int *events)
{
unsigned int new_fb_id;
/* for funny reasons page_flip returns -EBUSY on disabled crtcs ... */
......@@ -709,7 +713,11 @@ static unsigned int run_test_step(struct test_output *o)
end = gettime_us();
igt_debug("Vblank took %luus\n", end - start);
igt_assert(end - start < 500);
igt_assert_eq(reply.sequence, exp_seq);
if (reply.sequence != exp_seq) {
igt_debug("unexpected vblank seq %u, should be %u\n",
reply.sequence, exp_seq);
return false;
}
igt_assert(timercmp(&reply.ts, &o->flip_state.last_ts, ==));
}
......@@ -839,7 +847,9 @@ static unsigned int run_test_step(struct test_output *o)
unhang_gpu(drm_fd, hang);
return completed_events;
*events = completed_events;
return true;
}
static void update_state(struct event_state *es)
......@@ -1079,7 +1089,9 @@ static bool event_loop(struct test_output *o, unsigned duration_ms,
while (1) {
unsigned int completed_events;
completed_events = run_test_step(o);
if (!run_test_step(o, &completed_events))
return false;
if (o->pending_events)
completed_events |= wait_for_events(o);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment