mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-27 12:48:22 +00:00
scheduler: implement nice
This commit is contained in:
@@ -95,21 +95,42 @@ index fc34a3b..b1a95a9 100644
|
||||
#include <dlfcn.h>
|
||||
|
||||
diff --git mlibc-clean/options/posix/generic/unistd.cpp mlibc-workdir/options/posix/generic/unistd.cpp
|
||||
index 444ad22..d1ca86e 100644
|
||||
index 444ad22..44205bd 100644
|
||||
--- mlibc-clean/options/posix/generic/unistd.cpp
|
||||
+++ mlibc-workdir/options/posix/generic/unistd.cpp
|
||||
@@ -484,8 +484,9 @@ int lockf(int fd, int op, off_t size) {
|
||||
@@ -483,9 +483,16 @@ int lockf(int fd, int op, off_t size) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
int nice(int) {
|
||||
-int nice(int) {
|
||||
- __ensure(!"Not implemented");
|
||||
- __builtin_unreachable();
|
||||
+ return EPERM;
|
||||
+ //__ensure(!"Not implemented");
|
||||
+ //__builtin_unreachable();
|
||||
+int nice(int nice) {
|
||||
+ int new_nice;
|
||||
+
|
||||
+ MLIBC_CHECK_OR_ENOSYS(mlibc::sys_nice, -1);
|
||||
+ if(int e = mlibc::sys_nice(nice, &new_nice); e) {
|
||||
+ errno = e;
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ return new_nice;
|
||||
}
|
||||
|
||||
long pathconf(const char *, int name) {
|
||||
diff --git mlibc-clean/options/posix/include/mlibc/posix-sysdeps.hpp mlibc-workdir/options/posix/include/mlibc/posix-sysdeps.hpp
|
||||
index a224474..21a1046 100644
|
||||
--- mlibc-clean/options/posix/include/mlibc/posix-sysdeps.hpp
|
||||
+++ mlibc-workdir/options/posix/include/mlibc/posix-sysdeps.hpp
|
||||
@@ -236,6 +236,8 @@ int sys_vm_unmap(void *pointer, size_t size);
|
||||
|
||||
[[gnu::weak]] int sys_waitid(idtype_t idtype, id_t id, siginfo_t *info, int options);
|
||||
|
||||
+[[gnu::weak]] int sys_nice(int nice, int *ret);
|
||||
+
|
||||
} //namespace mlibc
|
||||
|
||||
#endif // MLIBC_POSIX_SYSDEPS
|
||||
diff --git mlibc-clean/options/rtld/generic/main.cpp mlibc-workdir/options/rtld/generic/main.cpp
|
||||
index 9219ef0..1ff679c 100644
|
||||
--- mlibc-clean/options/rtld/generic/main.cpp
|
||||
@@ -137,7 +158,7 @@ index d5ba7b2..a86353f 100644
|
||||
long error = syscall(SYSCALL_ARCHCTL, &ret, func, (uint64_t)arg);
|
||||
if(error)
|
||||
diff --git mlibc-clean/sysdeps/astral/generic/generic.cpp mlibc-workdir/sysdeps/astral/generic/generic.cpp
|
||||
index 2a504ab..3c46318 100644
|
||||
index 2a504ab..6a7c882 100644
|
||||
--- mlibc-clean/sysdeps/astral/generic/generic.cpp
|
||||
+++ mlibc-workdir/sysdeps/astral/generic/generic.cpp
|
||||
@@ -31,6 +31,12 @@ namespace mlibc {
|
||||
@@ -153,10 +174,17 @@ index 2a504ab..3c46318 100644
|
||||
int sys_getsockopt(int fd, int layer, int number,
|
||||
void *__restrict buffer, socklen_t *__restrict size) {
|
||||
(void)size;
|
||||
@@ -40,6 +46,11 @@ namespace mlibc {
|
||||
@@ -40,6 +46,18 @@ namespace mlibc {
|
||||
return 0;
|
||||
}
|
||||
|
||||
+ int sys_nice(int nice, int *ret) {
|
||||
+ long r = -1;
|
||||
+ long e = syscall(SYSCALL_NICE, &r, nice);
|
||||
+ *ret = r;
|
||||
+ return e;
|
||||
+ }
|
||||
+
|
||||
+ int sys_shutdown(int sockfd, int how) {
|
||||
+ long ret;
|
||||
+ return syscall(SYSCALL_SHUTDOWN, &ret, sockfd, how);
|
||||
@@ -165,7 +193,7 @@ index 2a504ab..3c46318 100644
|
||||
int sys_tgkill(int pid, int tid, int sig) {
|
||||
long ret;
|
||||
return syscall(SYSCALL_KILLTHREAD, &ret, pid, tid, sig);
|
||||
@@ -161,7 +172,18 @@ namespace mlibc {
|
||||
@@ -161,7 +179,18 @@ namespace mlibc {
|
||||
*bytes_written = writec;
|
||||
return error;
|
||||
}
|
||||
@@ -185,7 +213,7 @@ index 2a504ab..3c46318 100644
|
||||
#ifndef MLIBC_BUILDING_RTLD
|
||||
|
||||
typedef struct {
|
||||
@@ -487,6 +509,12 @@ namespace mlibc {
|
||||
@@ -487,6 +516,12 @@ namespace mlibc {
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -198,7 +226,7 @@ index 2a504ab..3c46318 100644
|
||||
#ifndef MLIBC_BUILDING_RTLD
|
||||
|
||||
[[noreturn]] void sys_thread_exit() {
|
||||
@@ -882,7 +910,7 @@ namespace mlibc {
|
||||
@@ -882,7 +917,7 @@ namespace mlibc {
|
||||
|
||||
int sys_tcb_set(void *pointer) {
|
||||
long r;
|
||||
@@ -225,14 +253,15 @@ index d738e02..7e4f2a1 100644
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
diff --git mlibc-clean/sysdeps/astral/include/astral/syscall.h mlibc-workdir/sysdeps/astral/include/astral/syscall.h
|
||||
index 5f42d62..852f9ff 100644
|
||||
index 5f42d62..09a5d5f 100644
|
||||
--- mlibc-clean/sysdeps/astral/include/astral/syscall.h
|
||||
+++ mlibc-workdir/sysdeps/astral/include/astral/syscall.h
|
||||
@@ -96,6 +96,7 @@
|
||||
@@ -96,6 +96,8 @@
|
||||
#define SYSCALL_SIGTIMEDWAIT 89
|
||||
#define SYSCALL_SIGPENDING 90
|
||||
#define SYSCALL_KILLTHREAD 91
|
||||
+#define SYSCALL_SHUTDOWN 92
|
||||
+#define SYSCALL_NICE 93
|
||||
|
||||
#ifndef __MLIBC_ABI_ONLY
|
||||
|
||||
|
||||
Reference in New Issue
Block a user