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
 |