struct lscpu_cpu *cpu = cxt->cpus[i];
cpu_set_t *thread_siblings = NULL, *core_siblings = NULL;
cpu_set_t *book_siblings = NULL, *drawer_siblings = NULL;
- int num, n;
+ int num, n = 0;
if (!cpu || cpu->type != ct)
continue;
ul_path_readf_cpuset(sys, &drawer_siblings, cxt->maxcpus,
"cpu%d/topology/drawer_siblings", num);
- n = CPU_COUNT_S(cxt->setsize, thread_siblings);
+ if (thread_siblings)
+ n = CPU_COUNT_S(cxt->setsize, thread_siblings);
if (!n)
n = 1;
if (n > nthreads)
* E.g. completely virtualized architectures like s390 may
* have multiple sockets of different sizes.
*/
- if (!ct->coremaps)
+ if (!ct->coremaps && thread_siblings)
ct->coremaps = xcalloc(npos, sizeof(cpu_set_t *));
- if (!ct->socketmaps)
+ if (!ct->socketmaps && core_siblings)
ct->socketmaps = xcalloc(npos, sizeof(cpu_set_t *));
if (!ct->bookmaps && book_siblings)
ct->bookmaps = xcalloc(npos, sizeof(cpu_set_t *));
ct->drawermaps = xcalloc(npos, sizeof(cpu_set_t *));
/* add to topology maps */
- add_cpuset_to_array(ct->coremaps, &ct->ncores, thread_siblings, cxt->setsize);
- add_cpuset_to_array(ct->socketmaps, &ct->nsockets, core_siblings, cxt->setsize);
-
+ if (thread_siblings)
+ add_cpuset_to_array(ct->coremaps, &ct->ncores, thread_siblings, cxt->setsize);
+ if (core_siblings)
+ add_cpuset_to_array(ct->socketmaps, &ct->nsockets, core_siblings, cxt->setsize);
if (book_siblings)
add_cpuset_to_array(ct->bookmaps, &ct->nbooks, book_siblings, cxt->setsize);
if (drawer_siblings)