/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * Copyright (c) 2021, BELLSOFT. All rights reserved. */ #ifndef TST_SCHED_H_ #define TST_SCHED_H_ #include #include "lapi/syscalls.h" #define TST_LIBC_SCHED_SCALL_(SCALL, ...)({ \ int tst_ret = SCALL(__VA_ARGS__); \ if (tst_ret == -1 && errno == ENOSYS) { \ tst_brk(TCONF, #SCALL " not supported"); \ } \ tst_ret; \ }) static inline int sys_sched_setparam(pid_t pid, const struct sched_param *param) { return tst_syscall(__NR_sched_setparam, pid, param); } static inline int sys_sched_getparam(pid_t pid, struct sched_param *param) { return tst_syscall(__NR_sched_getparam, pid, param); } static inline int sys_sched_setscheduler(pid_t pid, int policy, const struct sched_param *param) { return tst_syscall(__NR_sched_setscheduler, pid, policy, param); } static inline int sys_sched_getscheduler(pid_t pid) { return tst_syscall(__NR_sched_getscheduler, pid); } static inline int libc_sched_setparam(pid_t pid, const struct sched_param *param) { return TST_LIBC_SCHED_SCALL_(sched_setparam, pid, param); } static inline int libc_sched_getparam(pid_t pid, struct sched_param *param) { return TST_LIBC_SCHED_SCALL_(sched_getparam, pid, param); } static inline int libc_sched_setscheduler(pid_t pid, int policy, const struct sched_param *param) { return TST_LIBC_SCHED_SCALL_(sched_setscheduler, pid, policy, param); } static inline int libc_sched_getscheduler(pid_t pid) { return TST_LIBC_SCHED_SCALL_(sched_getscheduler, pid); } struct sched_variant { char *desc; int (*sched_setparam)(pid_t pid, const struct sched_param *param); int (*sched_getparam)(pid_t pid, struct sched_param *param); int (*sched_setscheduler)(pid_t pid, int policy, const struct sched_param *param); int (*sched_getscheduler)(pid_t pid); } sched_variants[] = { { .sched_setparam = libc_sched_setparam, .sched_getparam = libc_sched_getparam, .sched_setscheduler = libc_sched_setscheduler, .sched_getscheduler = libc_sched_getscheduler, .desc = "libc" }, { .sched_setparam = sys_sched_setparam, .sched_getparam = sys_sched_getparam, .sched_setscheduler = sys_sched_setscheduler, .sched_getscheduler = sys_sched_getscheduler, .desc = "syscall" }, }; #endif /* TST_SCHED_H_ */