mirror of https://github.com/xemu-project/xemu.git
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 cores = config->has_cores ? config->cores : 0;
|
||||||
unsigned threads = config->has_threads ? config->threads : 0;
|
unsigned threads = config->has_threads ? config->threads : 0;
|
||||||
unsigned maxcpus = config->has_maxcpus ? config->maxcpus : 0;
|
unsigned maxcpus = config->has_maxcpus ? config->maxcpus : 0;
|
||||||
|
unsigned total_cpus;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Specified CPU topology parameters must be greater than zero,
|
* 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 *
|
total_cpus = drawers * books * sockets * dies * clusters * cores * threads;
|
||||||
clusters * cores * threads;
|
maxcpus = maxcpus > 0 ? maxcpus : total_cpus;
|
||||||
cpus = cpus > 0 ? cpus : maxcpus;
|
cpus = cpus > 0 ? cpus : maxcpus;
|
||||||
|
|
||||||
ms->smp.cpus = cpus;
|
ms->smp.cpus = cpus;
|
||||||
|
@ -228,8 +229,7 @@ void machine_parse_smp_config(MachineState *ms,
|
||||||
mc->smp_props.has_clusters = config->has_clusters;
|
mc->smp_props.has_clusters = config->has_clusters;
|
||||||
|
|
||||||
/* sanity-check of the computed topology */
|
/* sanity-check of the computed topology */
|
||||||
if (drawers * books * sockets * dies * clusters * cores * threads !=
|
if (total_cpus != maxcpus) {
|
||||||
maxcpus) {
|
|
||||||
g_autofree char *topo_msg = cpu_hierarchy_to_string(ms);
|
g_autofree char *topo_msg = cpu_hierarchy_to_string(ms);
|
||||||
error_setg(errp, "Invalid CPU topology: "
|
error_setg(errp, "Invalid CPU topology: "
|
||||||
"product of the hierarchy must match maxcpus: "
|
"product of the hierarchy must match maxcpus: "
|
||||||
|
|
Loading…
Reference in New Issue