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
|
it is not possible to change the host page size, and using the
|
||||||
option only causes failures.
|
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
|
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
|
* 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) {
|
if (!mc->smp_props.clusters_supported && config->has_clusters) {
|
||||||
error_setg(errp, "dies not supported by this machine's CPU topology");
|
if (config->clusters > 1) {
|
||||||
return;
|
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;
|
clusters = clusters > 0 ? clusters : 1;
|
||||||
|
|
||||||
if (!mc->smp_props.books_supported && books > 1) {
|
if (!mc->smp_props.dies_supported && config->has_dies) {
|
||||||
error_setg(errp, "books not supported by this machine's CPU topology");
|
if (config->dies > 1) {
|
||||||
return;
|
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;
|
books = books > 0 ? books : 1;
|
||||||
|
|
||||||
if (!mc->smp_props.drawers_supported && drawers > 1) {
|
if (!mc->smp_props.drawers_supported && config->has_drawers) {
|
||||||
error_setg(errp,
|
if (config->drawers > 1) {
|
||||||
"drawers not supported by this machine's CPU topology");
|
error_setg(errp, "drawers not supported by this "
|
||||||
return;
|
"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;
|
drawers = drawers > 0 ? drawers : 1;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user