]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lscpu: fix fallback nthreads calculation
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Wed, 10 Aug 2011 08:34:29 +0000 (10:34 +0200)
committerHeiko Carstens <heiko.carstens@de.ibm.com>
Sun, 14 Aug 2011 15:34:17 +0000 (17:34 +0200)
The fallback calculation of nthreads did not consider books.
In order to avoid division/multiply by/with zero make sure each number
used is at least "1".

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
sys-utils/lscpu.c

index 4eeb502e1ccb37eee362a41e28072900b17a7ea8..c5e5f2d3010bef52c2bd9f66a0111f639ceaf57f 100644 (file)
@@ -649,17 +649,21 @@ read_topology(struct lscpu_desc *desc, int num)
                nthreads = CPU_COUNT_S(setsize, thread_siblings);
                /* cores within one socket */
                ncores = CPU_COUNT_S(setsize, core_siblings) / nthreads;
-               /* number of sockets within one book */
-               nsockets = desc->ncpus / nthreads / ncores;
+               /* number of sockets within one book.
+                * Because of odd / non-present cpu maps and to keep
+                * calculation easy we make sure that nsockets and
+                * nbooks is at least 1.
+                */
+               nsockets = desc->ncpus / nthreads / ncores ?: 1;
                /* number of books */
-               nbooks = desc->ncpus / nthreads / ncores / nsockets;
+               nbooks = desc->ncpus / nthreads / ncores / nsockets ?: 1;
 
                /* all threads, see also read_basicinfo()
-                * -- this is fallback for kernels where is not
+                * -- fallback for kernels without
                 *    /sys/devices/system/cpu/online.
                 */
                if (!desc->nthreads)
-                       desc->nthreads = nsockets * ncores * nthreads;
+                       desc->nthreads = nbooks * nsockets * ncores * nthreads;
                /* For each map we make sure that it can have up to ncpus
                 * entries. This is because we cannot reliably calculate the
                 * number of cores, sockets and books on all architectures.