/* threads within one core */
nthreads = CPU_COUNT_S(setsize, thread_siblings);
+ if (!nthreads)
+ nthreads = 1;
+
/* cores within one socket */
ncores = CPU_COUNT_S(setsize, core_siblings) / nthreads;
- /* 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.
+ if (!ncores)
+ ncores = 1;
+
+ /* 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;
+ nsockets = desc->ncpus / nthreads / ncores;
+ if (!nsockets)
+ nsockets = 1;
+
/* number of books */
- nbooks = desc->ncpus / nthreads / ncores / nsockets ?: 1;
+ nbooks = desc->ncpus / nthreads / ncores / nsockets;
+ if (!nbooks)
+ nbooks = 1;
/* all threads, see also read_basicinfo()
* -- fallback for kernels without
*/
if (!desc->nthreads)
desc->nthreads = nbooks * nsockets * ncores * nthreads;
+
/* For each map we make sure that it can have up to ncpuspos
* entries. This is because we cannot reliably calculate the
* number of cores, sockets and books on all architectures.