[igt-dev] [PATCH i-g-t 2/2] tests/kms_flip: Check for link reset during expired seq vblank wait
Imre Deak
imre.deak at intel.com
Tue Jun 30 16:03:44 UTC 2020
The expired vblank seq subtests can fail when using certain monitors with a
behavior described in
commit 60e8be7ccc72086a88d2eff3bcd02495fad5fa46
Author: Imre Deak <imre.deak at 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 <imre.deak at intel.com>
---
tests/kms_flip.c | 22 +++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)
diff --git a/tests/kms_flip.c b/tests/kms_flip.c
index 86c5e871..3d60eb58 100755
--- a/tests/kms_flip.c
+++ b/tests/kms_flip.c
@@ -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);
--
2.20.1
More information about the igt-dev
mailing list