aboutsummaryrefslogtreecommitdiff
path: root/coreutils
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2024-05-31 11:56:40 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2024-05-31 11:58:48 +0200
commit5a68a246e750359819d63bcff5ef97dd9c7788fc (patch)
tree2a9af97b38d5a9780bd63e03403d0b613194a0f4 /coreutils
parentfd47f056765aed515f4c71118813f07be1402bee (diff)
downloadbusybox-w32-5a68a246e750359819d63bcff5ef97dd9c7788fc.tar.gz
busybox-w32-5a68a246e750359819d63bcff5ef97dd9c7788fc.tar.bz2
busybox-w32-5a68a246e750359819d63bcff5ef97dd9c7788fc.zip
nproc: prepare for arbitrarily large CPU masks
function old new delta get_malloc_cpu_affinity - 76 +76 nproc_main 216 206 -10 process_pid_str 250 206 -44 ------------------------------------------------------------------------------ (add/remove: 2/0 grow/shrink: 0/2 up/down: 76/-54) Total: 22 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'coreutils')
-rw-r--r--coreutils/nproc.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/coreutils/nproc.c b/coreutils/nproc.c
index f1d11fa5a..a0d818c59 100644
--- a/coreutils/nproc.c
+++ b/coreutils/nproc.c
@@ -23,13 +23,11 @@
23//usage: "\n --ignore=N Exclude N CPUs" 23//usage: "\n --ignore=N Exclude N CPUs"
24//usage: ) 24//usage: )
25 25
26#include <sched.h>
27#include "libbb.h" 26#include "libbb.h"
28 27
29int nproc_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 28int nproc_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
30int nproc_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) 29int nproc_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
31{ 30{
32 unsigned long mask[1024];
33 int count = 0; 31 int count = 0;
34#if ENABLE_LONG_OPTS 32#if ENABLE_LONG_OPTS
35 int ignore = 0; 33 int ignore = 0;
@@ -52,9 +50,12 @@ int nproc_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
52 } 50 }
53 } else 51 } else
54#endif 52#endif
55 if (sched_getaffinity(0, sizeof(mask), (void*)mask) == 0) { 53 {
56 int i; 54 int i;
57 for (i = 0; i < ARRAY_SIZE(mask); i++) { 55 unsigned sz = 2 * 1024;
56 unsigned long *mask = get_malloc_cpu_affinity(0, &sz);
57 sz /= sizeof(long);
58 for (i = 0; i < sz; i++) {
58 unsigned long m = mask[i]; 59 unsigned long m = mask[i];
59 while (m) { 60 while (m) {
60 if (m & 1) 61 if (m & 1)