From mboxrd@z Thu Jan 1 00:00:00 1970 From: stefan.nickl at gmail.com Date: Tue, 14 May 2019 18:32:32 +0200 Subject: [Buildroot] [PATCH] package/musl: Make scheduler functions Linux-compatible In-Reply-To: <20190513221341.4150ab0c@windsurf.home> References: <509e7dab95b95c040af26c842e94777b069d6ba5.camel@gmail.com> <20190513221341.4150ab0c@windsurf.home> Message-ID: <071f102e7135306dfdba3203fbd35bdc07aa185f.camel@gmail.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: buildroot@busybox.net Hi Thomas, thanks for considering. This has the inner patch also generated by git. Cheers, Stefan Signed-off-by: Stefan Nickl --- ...e-scheduler-functions-Linux-compatib.patch | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 package/musl/0002-package-musl-Make-scheduler-functions-Linux-compatib.patch diff --git a/package/musl/0002-package-musl-Make-scheduler-functions-Linux-compatib.patch b/package/musl/0002-package-musl-Make-scheduler-functions-Linux-compatib.patch new file mode 100644 index 0000000000..a8dbb9eaa5 --- /dev/null +++ b/package/musl/0002-package-musl-Make-scheduler-functions-Linux-compatib.patch @@ -0,0 +1,92 @@ +From 775a6cf46a7918cde335f959e1a63119c74e68d3 Mon Sep 17 00:00:00 2001 +From: Stefan Nickl +Date: Mon, 13 May 2019 22:33:21 +0200 +Subject: [PATCH] package/musl: Make scheduler functions Linux-compatible + +The POSIX functions sched_getscheduler(), sched_setscheduler(), +sched_getparam(), sched_setparam() are technically not correctly +implemented by the Linux syscalls of the same name, because what the +kernel calls a PID and what POSIX calls a PID isn't truly the same, +resulting in somewhat different semantics as to what these functions +exactly apply to. + +Since the musl developers put a high premium on POSIX compliance, they +deliberately implement these functions to return -ENOSYS instead of +relaying them to the respective Linux syscalls as glibc/uClibc do. + +This means that virtually all programs written for Linux using these +functions are currently broken. For example running 'chrt -p 1' fails +with "Function not implemented" on a musl-libc based system. + +While the musl developers are right strictly speaking, it seems +unfeasible to fix all affected programs in a way that hardly any Linux +developer will consider to be broken in the first place. So this patch +simply changes musl to fall in line with the other libcs. + +Signed-off-by: Stefan Nickl +--- + src/sched/sched_getparam.c | 3 +-- + src/sched/sched_getscheduler.c | 3 +-- + src/sched/sched_setparam.c | 3 +-- + src/sched/sched_setscheduler.c | 3 +-- + 4 files changed, 4 insertions(+), 8 deletions(-) + +diff --git a/src/sched/sched_getparam.c b/src/sched/sched_getparam.c +index 76f10e4..65be107 100644 +--- a/src/sched/sched_getparam.c ++++ b/src/sched/sched_getparam.c +@@ -1,8 +1,7 @@ + #include +-#include + #include "syscall.h" + + int sched_getparam(pid_t pid, struct sched_param *param) + { +- return __syscall_ret(-ENOSYS); ++ return syscall(SYS_sched_getparam, pid, param); + } +diff --git a/src/sched/sched_getscheduler.c b/src/sched/sched_getscheduler.c +index 394e508..4c922f6 100644 +--- a/src/sched/sched_getscheduler.c ++++ b/src/sched/sched_getscheduler.c +@@ -1,8 +1,7 @@ + #include +-#include + #include "syscall.h" + + int sched_getscheduler(pid_t pid) + { +- return __syscall_ret(-ENOSYS); ++ return syscall(SYS_sched_getscheduler, pid); + } +diff --git a/src/sched/sched_setparam.c b/src/sched/sched_setparam.c +index 18623ee..f699faf 100644 +--- a/src/sched/sched_setparam.c ++++ b/src/sched/sched_setparam.c +@@ -1,8 +1,7 @@ + #include +-#include + #include "syscall.h" + + int sched_setparam(pid_t pid, const struct sched_param *param) + { +- return __syscall_ret(-ENOSYS); ++ return syscall(SYS_sched_setparam, pid, param); + } +diff --git a/src/sched/sched_setscheduler.c b/src/sched/sched_setscheduler.c +index 4435f21..e678221 100644 +--- a/src/sched/sched_setscheduler.c ++++ b/src/sched/sched_setscheduler.c +@@ -1,8 +1,7 @@ + #include +-#include + #include "syscall.h" + + int sched_setscheduler(pid_t pid, int sched, const struct sched_param *param) + { +- return __syscall_ret(-ENOSYS); ++ return syscall(SYS_sched_setscheduler, pid, sched, param); + } +-- +2.21.0 + -- 2.21.0