49 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
// SPDX-License-Identifier: GPL-2.0
 | 
						|
#include <sched.h>
 | 
						|
 | 
						|
/*
 | 
						|
 * Not defined anywhere else, probably, just to make sure we
 | 
						|
 * catch future flags
 | 
						|
 */
 | 
						|
#define SCHED_POLICY_MASK 0xff
 | 
						|
 | 
						|
#ifndef SCHED_DEADLINE
 | 
						|
#define SCHED_DEADLINE 6
 | 
						|
#endif
 | 
						|
#ifndef SCHED_RESET_ON_FORK
 | 
						|
#define SCHED_RESET_ON_FORK 0x40000000
 | 
						|
#endif
 | 
						|
 | 
						|
static size_t syscall_arg__scnprintf_sched_policy(char *bf, size_t size,
 | 
						|
						  struct syscall_arg *arg)
 | 
						|
{
 | 
						|
	const char *policies[] = {
 | 
						|
		"NORMAL", "FIFO", "RR", "BATCH", "ISO", "IDLE", "DEADLINE",
 | 
						|
	};
 | 
						|
	size_t printed;
 | 
						|
	int policy = arg->val,
 | 
						|
	    flags = policy & ~SCHED_POLICY_MASK;
 | 
						|
 | 
						|
	policy &= SCHED_POLICY_MASK;
 | 
						|
	if (policy <= SCHED_DEADLINE)
 | 
						|
		printed = scnprintf(bf, size, "%s", policies[policy]);
 | 
						|
	else
 | 
						|
		printed = scnprintf(bf, size, "%#x", policy);
 | 
						|
 | 
						|
#define	P_POLICY_FLAG(n) \
 | 
						|
	if (flags & SCHED_##n) { \
 | 
						|
		printed += scnprintf(bf + printed, size - printed, "|%s", #n); \
 | 
						|
		flags &= ~SCHED_##n; \
 | 
						|
	}
 | 
						|
 | 
						|
	P_POLICY_FLAG(RESET_ON_FORK);
 | 
						|
#undef P_POLICY_FLAG
 | 
						|
 | 
						|
	if (flags)
 | 
						|
		printed += scnprintf(bf + printed, size - printed, "|%#x", flags);
 | 
						|
 | 
						|
	return printed;
 | 
						|
}
 | 
						|
 | 
						|
#define SCA_SCHED_POLICY syscall_arg__scnprintf_sched_policy
 |