9int main(
int argc,
char** argv) {
10 setvbuf(stdout, NULL, _IONBF, 0);
11 if (argc > 1 && !strcmp(argv[1],
"schedule-exec"))
12 return sc_exec(argc, argv);
13 if (argc > 1 && !strcmp(argv[1],
"schedule-input-exec"))
14 return sc_input_exec(argc, argv);
15 if (argc > 3 || sc_init(argc == 3 ? atoi(argv[2]) : 0))
20 } families[] = {{
"api-policy", sc_api}, {
"placement", sc_placement},
21 {
"wakeups", sc_wakeups}, {
"lifecycle", sc_lifecycle},
22 {
"permissions", sc_permissions}, {
"input-pinning", sc_input}};
24 for (
size_t i = 0; i <
sizeof(families) /
sizeof(families[0]); ++i) {
25 if (argc >= 2 && strcmp(argv[1],
"all") && strcmp(argv[1], families[i].name))
28 printf(
"SCHEDULING-CONTRACT: BEGIN %s\n", families[i].name);
32 int result = families[i].run();
34 _exit(result ? 1 : 0);
36 int status = pid < 0 ? -1 : sc_reap(pid, 60000);
38 if (sched_getaffinity(0,
sizeof(current), ¤t) || !CPU_EQUAL(¤t, &sc_allowed)) {
39 fputs(
"supervisor affinity changed\n", stderr);
42 printf(
"SCHEDULING-CONTRACT: %s %s status=%d\n", status ?
"FAIL" :
"PASS", families[i].name,
49 puts(
"SCHEDULING-CONTRACT: END PASS");