mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.2 KiB
50 lines
1.2 KiB
// SPDX-License-Identifier: LGPL-2.1 |
|
#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) |
|
{ |
|
bool show_prefix = arg->show_string_prefix; |
|
const char *prefix = "SCHED_"; |
|
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%s", show_prefix ? prefix : "", 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%s", show_prefix ? prefix : "", #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
|
|
|