hw/core/machine-smp: Deprecate unsupported "parameter=1" SMP configurations
Currently, it was allowed for users to specify the unsupported topology parameter as "1". For example, x86 PC machine doesn't support drawer/book/cluster topology levels, but user could specify "-smp drawers=1,books=1,clusters=1". This is meaningless and confusing, so that the support for this kind of configurations is marked deprecated since 9.0. And report warning message for such case like: qemu-system-x86_64: warning: Deprecated CPU topology (considered invalid): Unsupported clusters parameter mustn't be specified as 1 qemu-system-x86_64: warning: Deprecated CPU topology (considered invalid): Unsupported books parameter mustn't be specified as 1 qemu-system-x86_64: warning: Deprecated CPU topology (considered invalid): Unsupported drawers parameter mustn't be specified as 1 Users have to ensure that all the topology members described with -smp are supported by the target machine. Signed-off-by: Zhao Liu <zhao1.liu@intel.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Message-ID: <20240308160148.3130837-3-zhao1.liu@linux.intel.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
This commit is contained in:
parent
72d346f3b8
commit
54c4ea8f3a
@ -57,6 +57,20 @@ The ``-p`` option pretends to control the host page size. However,
|
||||
it is not possible to change the host page size, and using the
|
||||
option only causes failures.
|
||||
|
||||
``-smp`` (Unsupported "parameter=1" SMP configurations) (since 9.0)
|
||||
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
Specified CPU topology parameters must be supported by the machine.
|
||||
|
||||
In the SMP configuration, users should provide the CPU topology parameters that
|
||||
are supported by the target machine.
|
||||
|
||||
However, historically it was allowed for users to specify the unsupported
|
||||
topology parameter as "1", which is meaningless. So support for this kind of
|
||||
configurations (e.g. -smp drawers=1,books=1,clusters=1 for x86 PC machine) is
|
||||
marked deprecated since 9.0, users have to ensure that all the topology members
|
||||
described with -smp are supported by the target machine.
|
||||
|
||||
QEMU Machine Protocol (QMP) commands
|
||||
------------------------------------
|
||||
|
||||
|
@ -112,30 +112,61 @@ void machine_parse_smp_config(MachineState *ms,
|
||||
|
||||
/*
|
||||
* If not supported by the machine, a topology parameter must be
|
||||
* omitted or specified equal to 1.
|
||||
* omitted.
|
||||
*/
|
||||
if (!mc->smp_props.dies_supported && dies > 1) {
|
||||
error_setg(errp, "dies not supported by this machine's CPU topology");
|
||||
return;
|
||||
if (!mc->smp_props.clusters_supported && config->has_clusters) {
|
||||
if (config->clusters > 1) {
|
||||
error_setg(errp, "clusters not supported by this "
|
||||
"machine's CPU topology");
|
||||
return;
|
||||
} else {
|
||||
/* Here clusters only equals 1 since we've checked zero case. */
|
||||
warn_report("Deprecated CPU topology (considered invalid): "
|
||||
"Unsupported clusters parameter mustn't be "
|
||||
"specified as 1");
|
||||
}
|
||||
}
|
||||
if (!mc->smp_props.clusters_supported && clusters > 1) {
|
||||
error_setg(errp, "clusters not supported by this machine's CPU topology");
|
||||
return;
|
||||
}
|
||||
|
||||
dies = dies > 0 ? dies : 1;
|
||||
clusters = clusters > 0 ? clusters : 1;
|
||||
|
||||
if (!mc->smp_props.books_supported && books > 1) {
|
||||
error_setg(errp, "books not supported by this machine's CPU topology");
|
||||
return;
|
||||
if (!mc->smp_props.dies_supported && config->has_dies) {
|
||||
if (config->dies > 1) {
|
||||
error_setg(errp, "dies not supported by this "
|
||||
"machine's CPU topology");
|
||||
return;
|
||||
} else {
|
||||
/* Here dies only equals 1 since we've checked zero case. */
|
||||
warn_report("Deprecated CPU topology (considered invalid): "
|
||||
"Unsupported dies parameter mustn't be "
|
||||
"specified as 1");
|
||||
}
|
||||
}
|
||||
dies = dies > 0 ? dies : 1;
|
||||
|
||||
if (!mc->smp_props.books_supported && config->has_books) {
|
||||
if (config->books > 1) {
|
||||
error_setg(errp, "books not supported by this "
|
||||
"machine's CPU topology");
|
||||
return;
|
||||
} else {
|
||||
/* Here books only equals 1 since we've checked zero case. */
|
||||
warn_report("Deprecated CPU topology (considered invalid): "
|
||||
"Unsupported books parameter mustn't be "
|
||||
"specified as 1");
|
||||
}
|
||||
}
|
||||
books = books > 0 ? books : 1;
|
||||
|
||||
if (!mc->smp_props.drawers_supported && drawers > 1) {
|
||||
error_setg(errp,
|
||||
"drawers not supported by this machine's CPU topology");
|
||||
return;
|
||||
if (!mc->smp_props.drawers_supported && config->has_drawers) {
|
||||
if (config->drawers > 1) {
|
||||
error_setg(errp, "drawers not supported by this "
|
||||
"machine's CPU topology");
|
||||
return;
|
||||
} else {
|
||||
/* Here drawers only equals 1 since we've checked zero case. */
|
||||
warn_report("Deprecated CPU topology (considered invalid): "
|
||||
"Unsupported drawers parameter mustn't be "
|
||||
"specified as 1");
|
||||
}
|
||||
}
|
||||
drawers = drawers > 0 ? drawers : 1;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user