diff options
author | Maarten Lankhorst <maarten.lankhorst@linux.intel.com> | 2017-06-07 11:10:06 +0200 |
---|---|---|
committer | Maarten Lankhorst <maarten.lankhorst@linux.intel.com> | 2017-06-07 11:11:37 +0200 |
commit | 7c8703fb02b248c2bcf9756bba8812bcfe7ed5d3 (patch) | |
tree | 906e06a68f50d340e92cb2583005b31d08d0e5dd /tests/kms_cursor_legacy.c | |
parent | a39f864cea0e47085f5bca549384d54671d02674 (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.c | 18 |
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 |