[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v10 05/14] machine: Improve the error reporting of smp parsing
From: |
Yanan Wang |
Subject: |
[PATCH v10 05/14] machine: Improve the error reporting of smp parsing |
Date: |
Sun, 26 Sep 2021 16:45:32 +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>
---
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 fe935cb4a3..f1b30b3101 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 83aa136a15..f08eb4fc3b 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 v10 00/14] machine: smp parsing fixes and improvement, Yanan Wang, 2021/09/26
- [PATCH v10 01/14] machine: Deprecate "parameter=0" SMP configurations, Yanan Wang, 2021/09/26
- [PATCH v10 04/14] machine: Set the value of cpus to match maxcpus if it's omitted, Yanan Wang, 2021/09/26
- [PATCH v10 03/14] machine: Uniformly use maxcpus to calculate the omitted parameters, Yanan Wang, 2021/09/26
- [PATCH v10 02/14] machine: Minor refactor/fix for the smp parsers, Yanan Wang, 2021/09/26
- [PATCH v10 05/14] machine: Improve the error reporting of smp parsing,
Yanan Wang <=
- [PATCH v10 10/14] machine: Tweak the order of topology members in struct CpuTopology, Yanan Wang, 2021/09/26
- [PATCH v10 06/14] qtest/numa-test: Use detailed -smp CLIs in pc_dynamic_cpu_cfg, Yanan Wang, 2021/09/26
- [PATCH v10 07/14] qtest/numa-test: Use detailed -smp CLIs in test_def_cpu_split, Yanan Wang, 2021/09/26
- [PATCH v10 09/14] machine: Use ms instead of global current_machine in sanity-check, Yanan Wang, 2021/09/26
- [PATCH v10 11/14] machine: Make smp_parse generic enough for all arches, Yanan Wang, 2021/09/26
- [PATCH v10 08/14] machine: Prefer cores over sockets in smp parsing since 6.2, Yanan Wang, 2021/09/26
- [PATCH v10 12/14] machine: Remove smp_parse callback from MachineClass, Yanan Wang, 2021/09/26
- [PATCH v10 14/14] machine: Put all sanity-check in the generic SMP parser, Yanan Wang, 2021/09/26