lscpu: make read_topology() more robust to avoid SIGFPE
Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
parent
a901dd5dad
commit
d4bfa64d44
1 changed files with 17 additions and 6 deletions
|
@ -627,16 +627,26 @@ read_topology(struct lscpu_desc *desc, int num)
|
|||
|
||||
/* 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
|
||||
|
@ -644,6 +654,7 @@ read_topology(struct lscpu_desc *desc, int num)
|
|||
*/
|
||||
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.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue