summaryrefslogtreecommitdiff
path: root/tests/kms_cursor_legacy.c
diff options
context:
space:
mode:
authorMaarten Lankhorst <maarten.lankhorst@linux.intel.com>2017-06-07 11:10:06 +0200
committerMaarten Lankhorst <maarten.lankhorst@linux.intel.com>2017-06-07 11:11:37 +0200
commit7c8703fb02b248c2bcf9756bba8812bcfe7ed5d3 (patch)
tree906e06a68f50d340e92cb2583005b31d08d0e5dd /tests/kms_cursor_legacy.c
parenta39f864cea0e47085f5bca549384d54671d02674 (diff)
kms_cursor_legacy: Add a burner thread to make basic-busy-* pass.
This appears to be required on SNB, or else we miss a lot of interrupts. Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Diffstat (limited to 'tests/kms_cursor_legacy.c')
-rw-r--r--tests/kms_cursor_legacy.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/tests/kms_cursor_legacy.c b/tests/kms_cursor_legacy.c
index ac05ca53..2eb1d1bd 100644
--- a/tests/kms_cursor_legacy.c
+++ b/tests/kms_cursor_legacy.c
@@ -618,9 +618,23 @@ static void basic_flip_cursor(igt_display_t *display,
do_ioctl(display->drm_fd, DRM_IOCTL_MODE_CURSOR, &arg[0]);
busy = NULL;
- if (flags & BASIC_BUSY)
+ if (flags & BASIC_BUSY) {
busy = make_fb_busy(display->drm_fd, &fb_info);
+ /*
+ * Prevent going into C3 or higher state
+ * or we may miss vblank interrupts on SNB.
+ */
+ igt_fork(child, 1) {
+ struct sched_param parm = { .sched_priority = 0 };
+
+ igt_assert(sched_setscheduler(0, SCHED_IDLE, &parm) == 0);
+
+ while (*busy != MI_BATCH_BUFFER_END)
+ sched_yield();
+ }
+ }
+
/* Start with a synchronous query to align with the vblank */
vblank_start = get_vblank(display->drm_fd, pipe, DRM_VBLANK_NEXTONMISS);
@@ -685,6 +699,8 @@ static void basic_flip_cursor(igt_display_t *display,
delta = get_vblank(display->drm_fd, pipe, 0) - vblank_start;
+ igt_waitchildren();
+
if (!mode_requires_extra_vblank(mode))
miss2 += delta != 1;
else