From e72e1e4e43000e78f1d57dfff68debe1915196d1 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Wed, 23 Jul 2025 16:34:40 +0300 Subject: [PATCH] LibC: Add _SC_NPROCESSORS_{CONF,ONLN) --- kernel/include/kernel/Process.h | 2 ++ kernel/kernel/Process.cpp | 5 +++++ userspace/libraries/LibC/include/sys/syscall.h | 1 + userspace/libraries/LibC/include/unistd.h | 4 ++++ userspace/libraries/LibC/unistd.cpp | 3 +++ 5 files changed, 15 insertions(+) diff --git a/kernel/include/kernel/Process.h b/kernel/include/kernel/Process.h index c58f03c4..6eb394ca 100644 --- a/kernel/include/kernel/Process.h +++ b/kernel/include/kernel/Process.h @@ -161,6 +161,8 @@ namespace Kernel BAN::ErrorOr sys_sync(bool should_block); + BAN::ErrorOr sys_get_nprocessor(); + static BAN::ErrorOr clean_poweroff(int command); BAN::ErrorOr sys_poweroff(int command); diff --git a/kernel/kernel/Process.cpp b/kernel/kernel/Process.cpp index 02d4e724..74e70a3f 100644 --- a/kernel/kernel/Process.cpp +++ b/kernel/kernel/Process.cpp @@ -2011,6 +2011,11 @@ namespace Kernel return 0; } + BAN::ErrorOr Process::sys_get_nprocessor() + { + return Processor::count(); + } + [[noreturn]] static void reset_system() { (void)ACPI::ACPI::get().reset(); diff --git a/userspace/libraries/LibC/include/sys/syscall.h b/userspace/libraries/LibC/include/sys/syscall.h index 1bfa45ac..8d5b0746 100644 --- a/userspace/libraries/LibC/include/sys/syscall.h +++ b/userspace/libraries/LibC/include/sys/syscall.h @@ -108,6 +108,7 @@ __BEGIN_DECLS O(SYS_EPOLL_CTL, epoll_ctl) \ O(SYS_EPOLL_PWAIT2, epoll_pwait2) \ O(SYS_FLOCK, flock) \ + O(SYS_GET_NPROCESSOR, get_nprocessor) \ enum Syscall { diff --git a/userspace/libraries/LibC/include/unistd.h b/userspace/libraries/LibC/include/unistd.h index dc19c436..6300d511 100644 --- a/userspace/libraries/LibC/include/unistd.h +++ b/userspace/libraries/LibC/include/unistd.h @@ -342,6 +342,10 @@ enum #define _SC_MQ_PRIO_MAX _SC_MQ_PRIO_MAX _SC_NGROUPS_MAX, #define _SC_NGROUPS_MAX _SC_NGROUPS_MAX + _SC_NPROCESSORS_CONF, +#define _SC_NPROCESSORS_CONF _SC_NPROCESSORS_CONF + _SC_NPROCESSORS_ONLN, +#define _SC_NPROCESSORS_ONLN _SC_NPROCESSORS_ONLN _SC_OPEN_MAX, #define _SC_OPEN_MAX _SC_OPEN_MAX _SC_PAGE_SIZE, diff --git a/userspace/libraries/LibC/unistd.cpp b/userspace/libraries/LibC/unistd.cpp index 858b8b19..1f57d1ed 100644 --- a/userspace/libraries/LibC/unistd.cpp +++ b/userspace/libraries/LibC/unistd.cpp @@ -1015,6 +1015,9 @@ long sysconf(int name) case _SC_PAGE_SIZE: case _SC_PAGESIZE: return getpagesize(); + case _SC_NPROCESSORS_ONLN: return syscall(SYS_GET_NPROCESSOR); + case _SC_NPROCESSORS_CONF: return syscall(SYS_GET_NPROCESSOR); + case _SC_CLK_TCK: return 100; case _SC_GETGR_R_SIZE_MAX: return 1024; case _SC_GETPW_R_SIZE_MAX: return 1024;