From 1e21e78bf7a5c24c217446d8760be7b7188711c2 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Sun, 11 Nov 2012 15:38:04 -0500 Subject: add support for thread scheduling (POSIX TPS option) linux's sched_* syscalls actually implement the TPS (thread scheduling) functionality, not the PS (process scheduling) functionality which the sched_* functions are supposed to have. omitting support for the PS option (and having the sched_* interfaces fail with ENOSYS rather than omitting them, since some broken software assumes they exist) seems to be the only conforming way to do this on linux. --- src/sched/sched_get_priority_max.c | 5 +++-- src/sched/sched_getparam.c | 3 ++- src/sched/sched_getscheduler.c | 3 ++- src/sched/sched_rr_get_interval.c | 1 - src/sched/sched_setparam.c | 4 ++-- src/sched/sched_setscheduler.c | 4 ++-- 6 files changed, 11 insertions(+), 9 deletions(-) (limited to 'src/sched') diff --git a/src/sched/sched_get_priority_max.c b/src/sched/sched_get_priority_max.c index 64cbca93..30ae5100 100644 --- a/src/sched/sched_get_priority_max.c +++ b/src/sched/sched_get_priority_max.c @@ -1,11 +1,12 @@ #include +#include "syscall.h" int sched_get_priority_max(int policy) { - return 0; + return syscall(SYS_sched_get_priority_max, policy); } int sched_get_priority_min(int policy) { - return 0; + return syscall(SYS_sched_get_priority_min, policy); } diff --git a/src/sched/sched_getparam.c b/src/sched/sched_getparam.c index 65be1075..76f10e49 100644 --- a/src/sched/sched_getparam.c +++ b/src/sched/sched_getparam.c @@ -1,7 +1,8 @@ #include +#include #include "syscall.h" int sched_getparam(pid_t pid, struct sched_param *param) { - return syscall(SYS_sched_getparam, pid, param); + return __syscall_ret(-ENOSYS); } diff --git a/src/sched/sched_getscheduler.c b/src/sched/sched_getscheduler.c index 4c922f69..394e508b 100644 --- a/src/sched/sched_getscheduler.c +++ b/src/sched/sched_getscheduler.c @@ -1,7 +1,8 @@ #include +#include #include "syscall.h" int sched_getscheduler(pid_t pid) { - return syscall(SYS_sched_getscheduler, pid); + return __syscall_ret(-ENOSYS); } diff --git a/src/sched/sched_rr_get_interval.c b/src/sched/sched_rr_get_interval.c index 43bc4904..4b01028f 100644 --- a/src/sched/sched_rr_get_interval.c +++ b/src/sched/sched_rr_get_interval.c @@ -5,4 +5,3 @@ int sched_rr_get_interval(pid_t pid, struct timespec *ts) { return syscall(SYS_sched_rr_get_interval, pid, ts); } - diff --git a/src/sched/sched_setparam.c b/src/sched/sched_setparam.c index 07d61aea..18623ee4 100644 --- a/src/sched/sched_setparam.c +++ b/src/sched/sched_setparam.c @@ -1,8 +1,8 @@ #include +#include #include "syscall.h" int sched_setparam(pid_t pid, const struct sched_param *param) { - static const struct sched_param def; - return syscall(SYS_sched_setparam, pid, &def); + return __syscall_ret(-ENOSYS); } diff --git a/src/sched/sched_setscheduler.c b/src/sched/sched_setscheduler.c index 19580660..4435f216 100644 --- a/src/sched/sched_setscheduler.c +++ b/src/sched/sched_setscheduler.c @@ -1,8 +1,8 @@ #include +#include #include "syscall.h" int sched_setscheduler(pid_t pid, int sched, const struct sched_param *param) { - static const struct sched_param def; - return syscall(SYS_sched_setscheduler, pid, 0, &def); + return __syscall_ret(-ENOSYS); } -- cgit v1.2.1