diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2016-06-04 21:25:17 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2016-06-04 21:34:54 +0100 |
commit | f5d370cbd6c4fbd3bdf9ec0ea0addb4e42b30c1d (patch) | |
tree | d860a4f10ff6b5b231db13e48fb43b8b419dac2d /tests/kms_cursor_legacy.c | |
parent | 7b34c51ff604fd6417928a0a9a0f6be7727e9eac (diff) |
igt/kms_cursor_legacy: Add background RT threads
Saturate the CPUs with background RT threads to soak up any spare CPU
not taken by testing threads.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
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); } |