From: Fei Jie Date: Tue, 15 Mar 2016 08:38:17 +0000 (+0800) Subject: tests: add sched_xetscheduler.test X-Git-Tag: v4.12~511 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c3fb92c0aea97d8b040855522487cf7a4cb022f2;p=strace tests: add sched_xetscheduler.test * tests/sched_xetscheduler.c: New file. * tests/sched_xetscheduler.test: New test. * tests/.gitignore: Add sched_xetscheduler. * tests/Makefile.am (check_PROGRAMS): Likewise. (TESTS): Add sched_xetscheduler.test. --- diff --git a/tests/.gitignore b/tests/.gitignore index b89796a3..ecbb17ea 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -100,6 +100,7 @@ sched_get_priority_mxx sched_xetaffinity sched_xetattr sched_xetparam +sched_xetscheduler scm_rights seccomp select diff --git a/tests/Makefile.am b/tests/Makefile.am index 59e7e782..2a8b147b 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -148,6 +148,7 @@ check_PROGRAMS = \ sched_xetaffinity \ sched_xetattr \ sched_xetparam \ + sched_xetscheduler \ scm_rights \ seccomp \ select \ @@ -317,6 +318,7 @@ TESTS = \ sched_xetaffinity.test \ sched_xetattr.test \ sched_xetparam.test \ + sched_xetscheduler.test \ scm_rights-fd.test \ seccomp.test \ select.test \ diff --git a/tests/sched_xetscheduler.c b/tests/sched_xetscheduler.c new file mode 100644 index 00000000..dbf3c1f6 --- /dev/null +++ b/tests/sched_xetscheduler.c @@ -0,0 +1,64 @@ +#include "tests.h" +#include + +#if defined __NR_sched_getscheduler && defined __NR_sched_setscheduler + +# include +# include +# include +# include + +int +main(void) +{ + struct sched_param *const param = tail_alloc(sizeof(struct sched_param)); + int rc = syscall(__NR_sched_getscheduler, 0); + const char *scheduler; + switch (rc) { + case SCHED_FIFO: + scheduler = "SCHED_FIFO"; + break; + case SCHED_RR: + scheduler = "SCHED_RR"; + break; +# ifdef SCHED_BATCH + case SCHED_BATCH: + scheduler = "SCHED_BATCH"; + break; +# endif +# ifdef SCHED_IDLE + case SCHED_IDLE: + scheduler = "SCHED_IDLE"; + break; +# endif +# ifdef SCHED_ISO + case SCHED_ISO: + scheduler = "SCHED_ISO"; + break; +# endif +# ifdef SCHED_DEADLINE + case SCHED_DEADLINE: + scheduler = "SCHED_DEADLINE"; + break; +# endif + default: + scheduler = "SCHED_OTHER"; + } + printf("sched_getscheduler(0) = %d (%s)\n", + rc, scheduler); + + param->sched_priority = -1; + rc = syscall(__NR_sched_setscheduler, 0, SCHED_FIFO, param); + printf("sched_setscheduler(0, SCHED_FIFO, [%d]) = %d %s (%m)\n", + param->sched_priority, rc, + errno == EPERM ? "EPERM" : "EINVAL"); + + puts("+++ exited with 0 +++"); + return 0; +} + +#else + +SKIP_MAIN_UNDEFINED("__NR_sched_getscheduler && __NR_sched_setscheduler") + +#endif diff --git a/tests/sched_xetscheduler.test b/tests/sched_xetscheduler.test new file mode 100755 index 00000000..15d6d730 --- /dev/null +++ b/tests/sched_xetscheduler.test @@ -0,0 +1,11 @@ +#!/bin/sh + +# Check sched_getscheduler and sched_setscheduler syscalls decoding. + +. "${srcdir=.}/init.sh" + +run_prog > /dev/null +OUT="$LOG.out" +run_strace -esched_getscheduler,sched_setscheduler -a22 $args > "$OUT" +match_diff "$LOG" "$OUT" +rm -f "$OUT"