Home | History | Annotate | Download | only in tests
      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 
     10 int
     11 main(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 
     79 SKIP_MAIN_UNDEFINED("__NR_sched_getscheduler && __NR_sched_setscheduler")
     80 
     81 #endif
     82