summaryrefslogtreecommitdiff
path: root/tests/kms_cursor_legacy.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2016-06-04 21:25:17 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2016-06-04 21:34:54 +0100
commitf5d370cbd6c4fbd3bdf9ec0ea0addb4e42b30c1d (patch)
treed860a4f10ff6b5b231db13e48fb43b8b419dac2d /tests/kms_cursor_legacy.c
parent7b34c51ff604fd6417928a0a9a0f6be7727e9eac (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.c39
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);
}