[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v12 06/16] machine: Improve the error reporting of smp parsing
From: |
Yanan Wang |
Subject: |
[PATCH v12 06/16] machine: Improve the error reporting of smp parsing |
Date: |
Wed, 29 Sep 2021 10:58:06 +0800 |
We have two requirements for a valid SMP configuration:
the product of "sockets * cores * threads" must represent all the
possible cpus, i.e., max_cpus, and then must include the initially
present cpus, i.e., smp_cpus.
So we only need to ensure 1) "sockets * cores * threads == maxcpus"
at first and then ensure 2) "maxcpus >= cpus". With a reasonable
order of the sanity check, we can simplify the error reporting code.
When reporting an error message we also report the exact value of
each topology member to make users easily see what's going on.
Signed-off-by: Yanan Wang <wangyanan55@huawei.com>
Reviewed-by: Andrew Jones <drjones@redhat.com>
Reviewed-by: Pankaj Gupta <pankaj.gupta@ionos.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
hw/core/machine.c | 22 +++++++++-------------
hw/i386/pc.c | 24 ++++++++++--------------
2 files changed, 19 insertions(+), 27 deletions(-)
diff --git a/hw/core/machine.c b/hw/core/machine.c
index d8f458db60..e38ab760e6 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -782,25 +782,21 @@ static void smp_parse(MachineState *ms, SMPConfiguration
*config, Error **errp)
maxcpus = maxcpus > 0 ? maxcpus : sockets * cores * threads;
cpus = cpus > 0 ? cpus : maxcpus;
- if (sockets * cores * threads < cpus) {
- error_setg(errp, "cpu topology: "
- "sockets (%u) * cores (%u) * threads (%u) < "
- "smp_cpus (%u)",
- sockets, cores, threads, cpus);
+ if (sockets * cores * threads != maxcpus) {
+ error_setg(errp, "Invalid CPU topology: "
+ "product of the hierarchy must match maxcpus: "
+ "sockets (%u) * cores (%u) * threads (%u) "
+ "!= maxcpus (%u)",
+ sockets, cores, threads, maxcpus);
return;
}
if (maxcpus < cpus) {
- error_setg(errp, "maxcpus must be equal to or greater than smp");
- return;
- }
-
- if (sockets * cores * threads != maxcpus) {
error_setg(errp, "Invalid CPU topology: "
+ "maxcpus must be equal to or greater than smp: "
"sockets (%u) * cores (%u) * threads (%u) "
- "!= maxcpus (%u)",
- sockets, cores, threads,
- maxcpus);
+ "== maxcpus (%u) < smp_cpus (%u)",
+ sockets, cores, threads, maxcpus, cpus);
return;
}
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index d9382b7d57..a37eef8057 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -749,25 +749,21 @@ static void pc_smp_parse(MachineState *ms,
SMPConfiguration *config, Error **err
maxcpus = maxcpus > 0 ? maxcpus : sockets * dies * cores * threads;
cpus = cpus > 0 ? cpus : maxcpus;
- if (sockets * dies * cores * threads < cpus) {
- error_setg(errp, "cpu topology: "
- "sockets (%u) * dies (%u) * cores (%u) * threads (%u) < "
- "smp_cpus (%u)",
- sockets, dies, cores, threads, cpus);
+ if (sockets * dies * cores * threads != maxcpus) {
+ error_setg(errp, "Invalid CPU topology: "
+ "product of the hierarchy must match maxcpus: "
+ "sockets (%u) * dies (%u) * cores (%u) * threads (%u) "
+ "!= maxcpus (%u)",
+ sockets, dies, cores, threads, maxcpus);
return;
}
if (maxcpus < cpus) {
- error_setg(errp, "maxcpus must be equal to or greater than smp");
- return;
- }
-
- if (sockets * dies * cores * threads != maxcpus) {
- error_setg(errp, "Invalid CPU topology deprecated: "
+ error_setg(errp, "Invalid CPU topology: "
+ "maxcpus must be equal to or greater than smp: "
"sockets (%u) * dies (%u) * cores (%u) * threads (%u) "
- "!= maxcpus (%u)",
- sockets, dies, cores, threads,
- maxcpus);
+ "== maxcpus (%u) < smp_cpus (%u)",
+ sockets, dies, cores, threads, maxcpus, cpus);
return;
}
--
2.19.1
- [PATCH v12 00/16] machine: smp parsing fixes and improvement, Yanan Wang, 2021/09/28
- [PATCH v12 01/16] qapi/machine: Fix an incorrect comment of SMPConfiguration, Yanan Wang, 2021/09/28
- [PATCH v12 10/16] machine: Use ms instead of global current_machine in sanity-check, Yanan Wang, 2021/09/28
- [PATCH v12 07/16] qtest/numa-test: Use detailed -smp CLIs in pc_dynamic_cpu_cfg, Yanan Wang, 2021/09/28
- [PATCH v12 02/16] machine: Deprecate "parameter=0" SMP configurations, Yanan Wang, 2021/09/28
- [PATCH v12 04/16] machine: Uniformly use maxcpus to calculate the omitted parameters, Yanan Wang, 2021/09/28
- [PATCH v12 09/16] machine: Prefer cores over sockets in smp parsing since 6.2, Yanan Wang, 2021/09/28
- [PATCH v12 03/16] machine: Minor refactor/fix for the smp parsers, Yanan Wang, 2021/09/28
- [PATCH v12 06/16] machine: Improve the error reporting of smp parsing,
Yanan Wang <=
- [PATCH v12 08/16] qtest/numa-test: Use detailed -smp CLIs in test_def_cpu_split, Yanan Wang, 2021/09/28
- [PATCH v12 16/16] machine: Make smp_parse return a boolean, Yanan Wang, 2021/09/28
- [PATCH v12 13/16] machine: Remove smp_parse callback from MachineClass, Yanan Wang, 2021/09/28
- [PATCH v12 05/16] machine: Set the value of cpus to match maxcpus if it's omitted, Yanan Wang, 2021/09/28
- [PATCH v12 12/16] machine: Make smp_parse generic enough for all arches, Yanan Wang, 2021/09/28
- [PATCH v12 15/16] machine: Put all sanity-check in the generic SMP parser, Yanan Wang, 2021/09/28
- [PATCH v12 11/16] machine: Tweak the order of topology members in struct CpuTopology, Yanan Wang, 2021/09/28