From 0ceb1f2c515ca437a7ccc9841f647bcd2ac89757 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Thu, 13 Mar 2025 13:35:30 +0100 Subject: [PATCH] DEV: ncpu: also emulate sysconf() for _SC_NPROCESSORS_* This is also needed in order to make the requested number of CPUs appear. For now we don't reroute to the original sysconf() call so we return -1,EINVAL for all other info. --- dev/ncpu/ncpu.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/dev/ncpu/ncpu.c b/dev/ncpu/ncpu.c index cdc91eb33..e96961c09 100644 --- a/dev/ncpu/ncpu.c +++ b/dev/ncpu/ncpu.c @@ -1,4 +1,5 @@ #define _GNU_SOURCE +#include #include #include #include @@ -11,6 +12,22 @@ static char prog_full_path[PATH_MAX]; +long sysconf(int name) +{ + if (name == _SC_NPROCESSORS_ONLN || + name == _SC_NPROCESSORS_CONF) { + const char *ncpu = getenv("NCPU"); + int n; + + n = ncpu ? atoi(ncpu) : CPU_SETSIZE; + if (n < 0 || n > CPU_SETSIZE) + n = CPU_SETSIZE; + return n; + } + errno = EINVAL; + return -1; +} + /* return a cpu_set having the first $NCPU set */ int sched_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask) {