diff options
Diffstat (limited to 'tests/kms_cursor_legacy.c')
-rw-r--r-- | tests/kms_cursor_legacy.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/tests/kms_cursor_legacy.c b/tests/kms_cursor_legacy.c index 7fa0032b..5cb26d1c 100644 --- a/tests/kms_cursor_legacy.c +++ b/tests/kms_cursor_legacy.c @@ -52,8 +52,15 @@ static void stress(struct data *data, { struct drm_mode_cursor arg; uint64_t *results; + bool torture; int n; + torture = false; + if (num_children < 0) { + torture = true; + num_children = -num_children; + } + results = mmap(NULL, 4096, PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0); igt_assert(results != MAP_FAILED); @@ -91,6 +98,24 @@ static void stress(struct data *data, igt_debug("[%d] count=%lu\n", child, count); results[child] = count; } + if (torture) { + igt_fork(child, num_children) { + struct sched_param rt = {.sched_priority = 1 }; + cpu_set_t allowed; + unsigned long long count = 0; + + sched_setscheduler(getpid(), SCHED_RR, &rt); + + CPU_ZERO(&allowed); + CPU_SET(child, &allowed); + sched_setaffinity(getpid(), sizeof(cpu_set_t), &allowed); + igt_until_timeout(timeout) { + count++; + __builtin_ia32_pause(); + } + igt_debug("[hog:%d] count=%llu\n", child, count); + } + } igt_waitchildren(); if (num_children > 1) { @@ -149,6 +174,11 @@ igt_main stress(&data, crtcs, 1, ncpus, DRM_MODE_CURSOR_BO, 20); igt_subtest_f("forked-%c-move", 'A' + n) stress(&data, crtcs, 1, ncpus, DRM_MODE_CURSOR_MOVE, 20); + + igt_subtest_f("torture-%c-bo", 'A' + n) + stress(&data, crtcs, 1, -ncpus, DRM_MODE_CURSOR_BO, 20); + igt_subtest_f("torture-%c-move", 'A' + n) + stress(&data, crtcs, 1, -ncpus, DRM_MODE_CURSOR_MOVE, 20); } } @@ -170,6 +200,15 @@ igt_main data.resources->crtcs, data.resources->count_crtcs, ncpus, DRM_MODE_CURSOR_MOVE, 20); + igt_subtest("torture-all-bo") + stress(&data, + data.resources->crtcs, data.resources->count_crtcs, + -ncpus, DRM_MODE_CURSOR_BO, 20); + igt_subtest("torture-all-move") + stress(&data, + data.resources->crtcs, data.resources->count_crtcs, + -ncpus, DRM_MODE_CURSOR_MOVE, 20); + igt_fixture { drmModeFreeResources(data.resources); } |