hw/core/machine-smp: Calculate total CPUs once in machine_parse_smp_config()
In machine_parse_smp_config(), the number of total CPUs is calculated by: drawers * books * sockets * dies * clusters * cores * threads To avoid missing the future new topology level, use a local variable to cache the calculation result so that total CPUs are only calculated once. Signed-off-by: Zhao Liu <zhao1.liu@intel.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-ID: <20240308160148.3130837-4-zhao1.liu@linux.intel.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
This commit is contained in:
parent
54c4ea8f3a
commit
4503dcf77b
@ -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: "
|
||||
|
Loading…
Reference in New Issue
Block a user