82 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
| #include "tests.h"
 | |
| #include <asm/unistd.h>
 | |
| 
 | |
| #if defined __NR_sched_getscheduler && defined __NR_sched_setscheduler
 | |
| 
 | |
| # include <sched.h>
 | |
| # include <stdio.h>
 | |
| # include <unistd.h>
 | |
| 
 | |
| int
 | |
| main(void)
 | |
| {
 | |
| 	TAIL_ALLOC_OBJECT_CONST_PTR(struct sched_param, param);
 | |
| 	long 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) = %ld (%s)\n",
 | |
| 	       rc, scheduler);
 | |
| 
 | |
| 	rc = syscall(__NR_sched_getscheduler, -1);
 | |
| 	printf("sched_getscheduler(-1) = %s\n", sprintrc(rc));
 | |
| 
 | |
| 	param->sched_priority = -1;
 | |
| 
 | |
| 	rc = syscall(__NR_sched_setscheduler, 0, SCHED_FIFO, NULL);
 | |
| 	printf("sched_setscheduler(0, SCHED_FIFO, NULL) = %s\n", sprintrc(rc));
 | |
| 
 | |
| 	rc = syscall(__NR_sched_setscheduler, 0, SCHED_FIFO, param + 1);
 | |
| 	printf("sched_setscheduler(0, SCHED_FIFO, %p) = %s\n", param + 1,
 | |
| 	       sprintrc(rc));
 | |
| 
 | |
| 	rc = syscall(__NR_sched_setscheduler, 0, 0xfaceda7a, param);
 | |
| 	printf("sched_setscheduler(0, %#x /* SCHED_??? */, [%d]) = %s\n",
 | |
| 	       0xfaceda7a, param->sched_priority, sprintrc(rc));
 | |
| 
 | |
| 	rc = syscall(__NR_sched_setscheduler, -1, SCHED_FIFO, param);
 | |
| 	printf("sched_setscheduler(-1, SCHED_FIFO, [%d]) = %s\n",
 | |
| 	       param->sched_priority, sprintrc(rc));
 | |
| 
 | |
| 	rc = syscall(__NR_sched_setscheduler, 0, SCHED_FIFO, param);
 | |
| 	printf("sched_setscheduler(0, SCHED_FIFO, [%d]) = %s\n",
 | |
| 	       param->sched_priority, sprintrc(rc));
 | |
| 
 | |
| 	puts("+++ exited with 0 +++");
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| #else
 | |
| 
 | |
| SKIP_MAIN_UNDEFINED("__NR_sched_getscheduler && __NR_sched_setscheduler")
 | |
| 
 | |
| #endif
 |