summaryrefslogtreecommitdiffstats
path: root/schedutils
diff options
context:
space:
mode:
authorKarel Zak2010-05-28 11:08:39 +0200
committerKarel Zak2010-06-01 11:11:26 +0200
commitbae91ecf07384f09fcf94903b7c3d7e565f4f66d (patch)
tree1395d6445a0e6871202c6042aba58dedf09fa850 /schedutils
parentlscpu: improve --sysroot code (diff)
downloadkernel-qcow2-util-linux-bae91ecf07384f09fcf94903b7c3d7e565f4f66d.tar.gz
kernel-qcow2-util-linux-bae91ecf07384f09fcf94903b7c3d7e565f4f66d.tar.xz
kernel-qcow2-util-linux-bae91ecf07384f09fcf94903b7c3d7e565f4f66d.zip
taskset: move NR_CPUS determination to lib/cpuset.c
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'schedutils')
-rw-r--r--schedutils/taskset.c39
1 files changed, 3 insertions, 36 deletions
diff --git a/schedutils/taskset.c b/schedutils/taskset.c
index 66387c827..2f1bc745f 100644
--- a/schedutils/taskset.c
+++ b/schedutils/taskset.c
@@ -27,7 +27,6 @@
#include <errno.h>
#include <string.h>
#include <ctype.h>
-#include <sys/syscall.h>
#include <err.h>
#include "cpuset.h"
@@ -64,40 +63,6 @@ static void __attribute__((__noreturn__)) usage(FILE *out)
exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS);
}
-/*
- * Number of bits in a CPU bitmask on current system
- */
-static int max_number_of_cpus(void)
-{
- int n, cpus = 2048;
- size_t setsize;
- cpu_set_t *set = cpuset_alloc(cpus, &setsize, NULL);
-
- if (!set)
- goto err;
-
- for (;;) {
- CPU_ZERO_S(setsize, set);
-
- /* the library version does not return size of cpumask_t */
- n = syscall(SYS_sched_getaffinity, 0, setsize, set);
-
- if (n < 0 && errno == EINVAL && cpus < 1024 * 1024) {
- cpuset_free(set);
- cpus *= 2;
- set = cpuset_alloc(cpus, &setsize, NULL);
- if (!set)
- goto err;
- continue;
- }
- cpuset_free(set);
- return n * 8;
- }
-err:
- errx(EXIT_FAILURE, _("cannot determine NR_CPUS; aborting"));
- return 0;
-}
-
int main(int argc, char *argv[])
{
cpu_set_t *new_set, *cur_set;
@@ -143,7 +108,9 @@ int main(int argc, char *argv[])
|| (pid && (argc - optind < 1 || argc - optind > 2)))
usage(stderr);
- ncpus = max_number_of_cpus();
+ ncpus = get_max_number_of_cpus();
+ if (ncpus <= 0)
+ errx(EXIT_FAILURE, _("cannot determine NR_CPUS; aborting"));
/*
* cur_set is always used for the sched_getaffinity call