From 7c8703fb02b248c2bcf9756bba8812bcfe7ed5d3 Mon Sep 17 00:00:00 2001 From: Maarten Lankhorst Date: Wed, 7 Jun 2017 11:10:06 +0200 Subject: 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 --- tests/kms_cursor_legacy.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'tests/kms_cursor_legacy.c') 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 -- cgit v1.2.3