blob: dbf3c1f6286cb69e6552148a02ea572ced45e25d [file] [log] [blame]
Fei Jiec3fb92c2016-03-15 16:38:17 +08001#include "tests.h"
2#include <sys/syscall.h>
3
4#if defined __NR_sched_getscheduler && defined __NR_sched_setscheduler
5
6# include <errno.h>
7# include <sched.h>
8# include <stdio.h>
9# include <unistd.h>
10
11int
12main(void)
13{
14 struct sched_param *const param = tail_alloc(sizeof(struct sched_param));
15 int rc = syscall(__NR_sched_getscheduler, 0);
16 const char *scheduler;
17 switch (rc) {
18 case SCHED_FIFO:
19 scheduler = "SCHED_FIFO";
20 break;
21 case SCHED_RR:
22 scheduler = "SCHED_RR";
23 break;
24# ifdef SCHED_BATCH
25 case SCHED_BATCH:
26 scheduler = "SCHED_BATCH";
27 break;
28# endif
29# ifdef SCHED_IDLE
30 case SCHED_IDLE:
31 scheduler = "SCHED_IDLE";
32 break;
33# endif
34# ifdef SCHED_ISO
35 case SCHED_ISO:
36 scheduler = "SCHED_ISO";
37 break;
38# endif
39# ifdef SCHED_DEADLINE
40 case SCHED_DEADLINE:
41 scheduler = "SCHED_DEADLINE";
42 break;
43# endif
44 default:
45 scheduler = "SCHED_OTHER";
46 }
47 printf("sched_getscheduler(0) = %d (%s)\n",
48 rc, scheduler);
49
50 param->sched_priority = -1;
51 rc = syscall(__NR_sched_setscheduler, 0, SCHED_FIFO, param);
52 printf("sched_setscheduler(0, SCHED_FIFO, [%d]) = %d %s (%m)\n",
53 param->sched_priority, rc,
54 errno == EPERM ? "EPERM" : "EINVAL");
55
56 puts("+++ exited with 0 +++");
57 return 0;
58}
59
60#else
61
62SKIP_MAIN_UNDEFINED("__NR_sched_getscheduler && __NR_sched_setscheduler")
63
64#endif