|
@@ -91,6 +91,7 @@ void machine_parse_smp_config(MachineState *ms,
|
|
|
unsigned cores = config->has_cores ? config->cores : 0;
|
|
|
unsigned threads = config->has_threads ? config->threads : 0;
|
|
|
unsigned maxcpus = config->has_maxcpus ? config->maxcpus : 0;
|
|
|
+ unsigned total_cpus;
|
|
|
|
|
|
/*
|
|
|
* Specified CPU topology parameters must be greater than zero,
|
|
@@ -211,8 +212,8 @@ void machine_parse_smp_config(MachineState *ms,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- maxcpus = maxcpus > 0 ? maxcpus : drawers * books * sockets * dies *
|
|
|
- clusters * cores * threads;
|
|
|
+ total_cpus = drawers * books * sockets * dies * clusters * cores * threads;
|
|
|
+ maxcpus = maxcpus > 0 ? maxcpus : total_cpus;
|
|
|
cpus = cpus > 0 ? cpus : maxcpus;
|
|
|
|
|
|
ms->smp.cpus = cpus;
|
|
@@ -228,8 +229,7 @@ void machine_parse_smp_config(MachineState *ms,
|
|
|
mc->smp_props.has_clusters = config->has_clusters;
|
|
|
|
|
|
/* sanity-check of the computed topology */
|
|
|
- if (drawers * books * sockets * dies * clusters * cores * threads !=
|
|
|
- maxcpus) {
|
|
|
+ if (total_cpus != maxcpus) {
|
|
|
g_autofree char *topo_msg = cpu_hierarchy_to_string(ms);
|
|
|
error_setg(errp, "Invalid CPU topology: "
|
|
|
"product of the hierarchy must match maxcpus: "
|