]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lscpu, chcpu: Avoid use of the old CPU macros
authorStanislav Brabec <sbrabec@suse.cz>
Wed, 9 May 2018 16:08:32 +0000 (18:08 +0200)
committerKarel Zak <kzak@redhat.com>
Wed, 11 Jul 2018 13:42:42 +0000 (15:42 +0200)
The old CPU macros are limited to 1024 cores. As a result, lscpu cannot
count sockets on large systems. Use new scalable macros.

Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
Cc: Michael Matz <matz@suse.de>
sys-utils/chcpu.c
sys-utils/lscpu.c

index 12e52d8873fe1af4a18ba06f7a3734922dca23d6..f32b7a6fc22649860b97ed4797e57c5812b0e32c 100644 (file)
@@ -81,7 +81,7 @@ static int cpu_enable(cpu_set_t *cpu_set, size_t setsize, int enable)
        size_t fails = 0;
 
        for (cpu = 0; cpu < setsize; cpu++) {
-               if (!CPU_ISSET(cpu, cpu_set))
+               if (!CPU_ISSET_S(cpu, setsize, cpu_set))
                        continue;
                if (!path_exist(_PATH_SYS_CPU "/cpu%d", cpu)) {
                        warnx(_("CPU %u does not exist"), cpu);
@@ -127,7 +127,7 @@ static int cpu_enable(cpu_set_t *cpu_set, size_t setsize, int enable)
                        } else {
                                printf(_("CPU %u disabled\n"), cpu);
                                if (onlinecpus)
-                                       CPU_CLR(cpu, onlinecpus);
+                                       CPU_CLR_S(cpu, setsize, onlinecpus);
                        }
                }
        }
@@ -173,7 +173,7 @@ static int cpu_configure(cpu_set_t *cpu_set, size_t setsize, int configure)
        size_t fails = 0;
 
        for (cpu = 0; cpu < setsize; cpu++) {
-               if (!CPU_ISSET(cpu, cpu_set))
+               if (!CPU_ISSET_S(cpu, setsize, cpu_set))
                        continue;
                if (!path_exist(_PATH_SYS_CPU "/cpu%d", cpu)) {
                        warnx(_("CPU %u does not exist"), cpu);
index 2132511a5a8555088197033e867b82e1c18b4191..fd6d63bbf34d0676b4d2b1bdc198f1c910b254f0 100644 (file)
@@ -478,7 +478,7 @@ read_basicinfo(struct lscpu_desc *desc, struct lscpu_modifier *mod)
                desc->idx2cpunum = xcalloc(desc->ncpuspos, sizeof(int));
 
                for (num = 0, idx = 0; num < maxcpus; num++) {
-                       if (CPU_ISSET(num, tmp))
+                       if (CPU_ISSET_S(num, setsize, tmp))
                                desc->idx2cpunum[idx++] = num;
                }
                cpuset_free(tmp);
@@ -1109,10 +1109,11 @@ cpu_max_mhz(struct lscpu_desc *desc, char *buf, size_t bufsz)
 {
        int i;
        float cpu_freq = 0.0;
+       size_t setsize = CPU_ALLOC_SIZE(maxcpus);
 
        if (desc->present) {
                for (i = 0; i < desc->ncpuspos; i++) {
-                       if (CPU_ISSET(real_cpu_num(desc, i), desc->present)
+                       if (CPU_ISSET_S(real_cpu_num(desc, i), setsize, desc->present)
                            && desc->maxmhz[i]) {
                                float freq = atof(desc->maxmhz[i]);
 
@@ -1131,10 +1132,11 @@ cpu_min_mhz(struct lscpu_desc *desc, char *buf, size_t bufsz)
 {
        int i;
        float cpu_freq = -1.0;
+       size_t setsize = CPU_ALLOC_SIZE(maxcpus);
 
        if (desc->present) {
                for (i = 0; i < desc->ncpuspos; i++) {
-                       if (CPU_ISSET(real_cpu_num(desc, i), desc->present)
+                       if (CPU_ISSET_S(real_cpu_num(desc, i), setsize, desc->present)
                            && desc->minmhz[i]) {
                                float freq = atof(desc->minmhz[i]);
 
@@ -1931,6 +1933,7 @@ int main(int argc, char *argv[])
        int c, i;
        int columns[ARRAY_SIZE(coldescs)], ncolumns = 0;
        int cpu_modifier_specified = 0;
+       size_t setsize;
 
        static const struct option longopts[] = {
                { "all",        no_argument,       NULL, 'a' },
@@ -2034,10 +2037,12 @@ int main(int argc, char *argv[])
 
        read_basicinfo(desc, mod);
 
+       setsize = CPU_ALLOC_SIZE(maxcpus);
+
        for (i = 0; i < desc->ncpuspos; i++) {
                /* only consider present CPUs */
                if (desc->present &&
-                   !CPU_ISSET(real_cpu_num(desc, i), desc->present))
+                   !CPU_ISSET_S(real_cpu_num(desc, i), setsize, desc->present))
                        continue;
                read_topology(desc, i);
                read_cache(desc, i);