From 4b667751b629d76b66fc1c0a874f4d31ea0ff5e6 Mon Sep 17 00:00:00 2001 From: caifuzhou <504631861@qq.com> Date: Tue, 7 Dec 2021 19:03:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=A9=E5=B1=95=E4=BA=86=E4=B8=8E=E8=BF=9B?= =?UTF-8?q?=E7=A8=8B=E7=AD=96=E7=95=A5=E8=AE=BE=E7=BD=AE=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E7=9A=84=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: caifuzhou <504631861@qq.com> --- libc-test/src/functional/sched_setscheduler.c | 24 ++++++++++++------- musl_src.gni | 3 +++ porting/linux/user/src/sched/sched_getparam.c | 20 ++++++++++++++++ .../linux/user/src/sched/sched_getscheduler.c | 10 ++++++++ porting/linux/user/src/sched/sched_setparam.c | 16 +++++++++++++ .../linux/user/src/sched/sched_setscheduler.c | 6 +---- 6 files changed, 65 insertions(+), 14 deletions(-) create mode 100644 porting/linux/user/src/sched/sched_getparam.c create mode 100644 porting/linux/user/src/sched/sched_getscheduler.c create mode 100644 porting/linux/user/src/sched/sched_setparam.c diff --git a/libc-test/src/functional/sched_setscheduler.c b/libc-test/src/functional/sched_setscheduler.c index 3939a293..bcf69b07 100644 --- a/libc-test/src/functional/sched_setscheduler.c +++ b/libc-test/src/functional/sched_setscheduler.c @@ -9,18 +9,24 @@ int main(int argc,char *argv[]) { struct sched_param param; - int maxpri; - - maxpri = sched_get_priority_max(SCHED_FIFO); - if(maxpri == -1) + int maxpri,minpri; + int sched; + pid_t pid; + + sched = SCHED_FIFO; + pid = getpid(); + maxpri = sched_get_priority_max(sched); + minpri = sched_get_priority_min(sched); + if(maxpri == -1 || minpri == -1) { - perror("get priority failed"); + perror("get maxpriority or minpriority failed"); return -1; } - param.sched_priority = maxpri; - TEST(sched_setscheduler(getpid(), SCHED_FIFO, ¶m)); - TEST(!(sched_getscheduler(getpid()) == SCHED_FIFO)); - + param.sched_priority = 23;//取值范围:minpri~maxpri + TEST(sched_setscheduler(pid, sched, ¶m)); + TEST(!(sched_getscheduler(pid) == sched)); + TEST(sched_getparam(pid, ¶m)); + return 0; } diff --git a/musl_src.gni b/musl_src.gni index 27ab81f3..2344063d 100644 --- a/musl_src.gni +++ b/musl_src.gni @@ -1838,7 +1838,10 @@ musl_src_porting_file = [ "src/multibyte/wcsnrtombs.c", "src/network/inet_legacy.c", "src/passwd/getspnam_r.c", + "src/sched/sched_setparam.c", + "src/sched/sched_getparam.c", "src/sched/sched_setscheduler.c", + "src/sched/sched_getscheduler.c", "src/thread/arm/clone.s", "src/thread/arm/syscall_cp.s", ] diff --git a/porting/linux/user/src/sched/sched_getparam.c b/porting/linux/user/src/sched/sched_getparam.c new file mode 100644 index 00000000..b31f0089 --- /dev/null +++ b/porting/linux/user/src/sched/sched_getparam.c @@ -0,0 +1,20 @@ +#include +#include +#include "syscall.h" +#include + +int sched_getparam(pid_t pid, struct sched_param *param) +{ + int r; + if (!param) { + r = -EINVAL; + goto exit; + } + memset(param, 0, sizeof(struct sched_param)); + r = __syscall(SYS_sched_getparam, pid , param); + if (r >= 0) { + r = 0; + } +exit: + return __syscall_ret(r); +} diff --git a/porting/linux/user/src/sched/sched_getscheduler.c b/porting/linux/user/src/sched/sched_getscheduler.c new file mode 100644 index 00000000..1600d2f9 --- /dev/null +++ b/porting/linux/user/src/sched/sched_getscheduler.c @@ -0,0 +1,10 @@ +#include +#include +#include +#include "syscall.h" + +int sched_getscheduler(pid_t pid) +{ + int r = __syscall(SYS_sched_getscheduler, pid); + return __syscall_ret(r); +} \ No newline at end of file diff --git a/porting/linux/user/src/sched/sched_setparam.c b/porting/linux/user/src/sched/sched_setparam.c new file mode 100644 index 00000000..c7530234 --- /dev/null +++ b/porting/linux/user/src/sched/sched_setparam.c @@ -0,0 +1,16 @@ +#include +#include +#include +#include "syscall.h" + +int sched_setparam(pid_t pid, const struct sched_param *param) +{ + int r; + if (!param) { + r = -EINVAL; + goto exit; + } + r = __syscall(SYS_sched_setparam, pid, param); +exit: + return __syscall_ret(r); +} \ No newline at end of file diff --git a/porting/linux/user/src/sched/sched_setscheduler.c b/porting/linux/user/src/sched/sched_setscheduler.c index 22025e72..1177bc07 100644 --- a/porting/linux/user/src/sched/sched_setscheduler.c +++ b/porting/linux/user/src/sched/sched_setscheduler.c @@ -10,11 +10,7 @@ int sched_setscheduler(pid_t pid, int sched, const struct sched_param *param) r = -EINVAL; goto exit; } - - r = __syscall(SYS_sched_setscheduler, pid , sched , param->sched_priority); -; + r = __syscall(SYS_sched_setscheduler, pid , sched , param); exit: - - return __syscall_ret(r); } \ No newline at end of file -- GitLab