From 2471410fe54c7022b58fc74e3c4d1d7b87680cab Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Wed, 17 Jun 2020 16:53:15 +0200 Subject: [PATCH] libc: provide number of CPUs for sysctl&sysconf Fixes #3786 --- repos/libports/src/lib/libc/sysctl.cc | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/repos/libports/src/lib/libc/sysctl.cc b/repos/libports/src/lib/libc/sysctl.cc index 23234c9e87..e0a7d4a193 100644 --- a/repos/libports/src/lib/libc/sysctl.cc +++ b/repos/libports/src/lib/libc/sysctl.cc @@ -49,12 +49,15 @@ extern "C" long sysconf(int name) switch (name) { case _SC_CHILD_MAX: return CHILD_MAX; case _SC_OPEN_MAX: return getdtablesize(); - case _SC_NPROCESSORS_CONF: return 1; - case _SC_NPROCESSORS_ONLN: return 1; case _SC_PAGESIZE: return PAGESIZE; - case _SC_PHYS_PAGES: return _global_env->pd().ram_quota().value / PAGESIZE; + case _SC_NPROCESSORS_CONF: + [[fallthrough]]; + case _SC_NPROCESSORS_ONLN: { + Affinity::Space space = _global_env->cpu().affinity_space(); + return space.total() ? : 1; + } default: warning(__func__, "(", name, ") not implemented"); return Errno(EINVAL); @@ -155,7 +158,9 @@ extern "C" int __sysctl(const int *name, u_int namelen, return 0; case HW_NCPU: - *(int*)oldp = 1; + Affinity::Space space = _global_env->cpu().affinity_space(); + + *(int*)oldp = space.total() ? : 1; *oldlenp = sizeof(int); return 0;