[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v8 05/14] machine: Improve the error reporting of smp parsing
From: |
Yanan Wang |
Subject: |
[PATCH v8 05/14] machine: Improve the error reporting of smp parsing |
Date: |
Thu, 2 Sep 2021 19:03:21 +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 cf75fa5c7a..19dbe28d12 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 v8 00/14] machine: smp parsing fixes and improvement, Yanan Wang, 2021/09/02
- [PATCH v8 01/14] machine: Deprecate "parameter=0" SMP configurations, Yanan Wang, 2021/09/02
- [PATCH v8 06/14] machine: Prefer cores over sockets in smp parsing since 6.2, Yanan Wang, 2021/09/02
- [PATCH v8 05/14] machine: Improve the error reporting of smp parsing,
Yanan Wang <=
- [PATCH v8 08/14] machine: Tweak the order of topology members in struct CpuTopology, Yanan Wang, 2021/09/02
- [PATCH v8 02/14] machine: Minor refactor/fix for the smp parsers, Yanan Wang, 2021/09/02
- [PATCH v8 03/14] machine: Uniformly use maxcpus to calculate the omitted parameters, Yanan Wang, 2021/09/02
- [PATCH v8 11/14] machine: Move smp_prefer_sockets to struct SMPCompatProps, Yanan Wang, 2021/09/02
- [PATCH v8 12/14] machine: Put all sanity-check in the generic SMP parser, Yanan Wang, 2021/09/02
- [PATCH v8 07/14] machine: Use ms instead of global current_machine in sanity-check, Yanan Wang, 2021/09/02
- [PATCH v8 14/14] tests/unit: Add a unit test for smp parsing, Yanan Wang, 2021/09/02
- [PATCH v8 10/14] machine: Remove smp_parse callback from MachineClass, Yanan Wang, 2021/09/02
- [PATCH v8 04/14] machine: Set the value of cpus to match maxcpus if it's omitted, Yanan Wang, 2021/09/02
- [PATCH v8 09/14] machine: Make smp_parse generic enough for all arches, Yanan Wang, 2021/09/02