1#include "tests.h"
2#include <asm/unistd.h>
3
4#if defined __NR_sched_getscheduler && defined __NR_sched_setscheduler
5
6# include <sched.h>
7# include <stdio.h>
8# include <unistd.h>
9
10int
11main(void)
12{
13	TAIL_ALLOC_OBJECT_CONST_PTR(struct sched_param, param);
14	long rc = syscall(__NR_sched_getscheduler, 0);
15	const char *scheduler;
16	switch (rc) {
17		case SCHED_FIFO:
18			scheduler = "SCHED_FIFO";
19			break;
20		case SCHED_RR:
21			scheduler = "SCHED_RR";
22			break;
23# ifdef SCHED_BATCH
24		case SCHED_BATCH:
25			scheduler = "SCHED_BATCH";
26			break;
27# endif
28# ifdef SCHED_IDLE
29		case SCHED_IDLE:
30			scheduler = "SCHED_IDLE";
31			break;
32# endif
33# ifdef SCHED_ISO
34		case SCHED_ISO:
35			scheduler = "SCHED_ISO";
36			break;
37# endif
38# ifdef SCHED_DEADLINE
39		case SCHED_DEADLINE:
40			scheduler = "SCHED_DEADLINE";
41			break;
42# endif
43		default:
44			scheduler = "SCHED_OTHER";
45	}
46	printf("sched_getscheduler(0) = %ld (%s)\n",
47	       rc, scheduler);
48
49	rc = syscall(__NR_sched_getscheduler, -1);
50	printf("sched_getscheduler(-1) = %s\n", sprintrc(rc));
51
52	param->sched_priority = -1;
53
54	rc = syscall(__NR_sched_setscheduler, 0, SCHED_FIFO, NULL);
55	printf("sched_setscheduler(0, SCHED_FIFO, NULL) = %s\n", sprintrc(rc));
56
57	rc = syscall(__NR_sched_setscheduler, 0, SCHED_FIFO, param + 1);
58	printf("sched_setscheduler(0, SCHED_FIFO, %p) = %s\n", param + 1,
59	       sprintrc(rc));
60
61	rc = syscall(__NR_sched_setscheduler, 0, 0xfaceda7a, param);
62	printf("sched_setscheduler(0, %#x /* SCHED_??? */, [%d]) = %s\n",
63	       0xfaceda7a, param->sched_priority, sprintrc(rc));
64
65	rc = syscall(__NR_sched_setscheduler, -1, SCHED_FIFO, param);
66	printf("sched_setscheduler(-1, SCHED_FIFO, [%d]) = %s\n",
67	       param->sched_priority, sprintrc(rc));
68
69	rc = syscall(__NR_sched_setscheduler, 0, SCHED_FIFO, param);
70	printf("sched_setscheduler(0, SCHED_FIFO, [%d]) = %s\n",
71	       param->sched_priority, sprintrc(rc));
72
73	puts("+++ exited with 0 +++");
74	return 0;
75}
76
77#else
78
79SKIP_MAIN_UNDEFINED("__NR_sched_getscheduler && __NR_sched_setscheduler")
80
81#endif
82