[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v9 05/16] machine: Improve the error reporting of smp parsing
From: |
Yanan Wang |
Subject: |
[PATCH v9 05/16] machine: Improve the error reporting of smp parsing |
Date: |
Fri, 10 Sep 2021 15:30:14 +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.23.0
- [PATCH v9 00/16] machine: smp parsing fixes and improvement, Yanan Wang, 2021/09/10
- [PATCH v9 03/16] machine: Uniformly use maxcpus to calculate the omitted parameters, Yanan Wang, 2021/09/10
- [PATCH v9 06/16] qtest/numa-test: Use detailed -smp CLIs in pc_dynamic_cpu_cfg, Yanan Wang, 2021/09/10
- [PATCH v9 08/16] machine: Prefer cores over sockets in smp parsing since 6.2, Yanan Wang, 2021/09/10
- [PATCH v9 01/16] machine: Deprecate "parameter=0" SMP configurations, Yanan Wang, 2021/09/10
- [PATCH v9 05/16] machine: Improve the error reporting of smp parsing,
Yanan Wang <=
- [PATCH v9 02/16] machine: Minor refactor/fix for the smp parsers, Yanan Wang, 2021/09/10
- [PATCH v9 11/16] machine: Make smp_parse generic enough for all arches, Yanan Wang, 2021/09/10
- [PATCH v9 12/16] machine: Remove smp_parse callback from MachineClass, Yanan Wang, 2021/09/10
- [PATCH v9 04/16] machine: Set the value of cpus to match maxcpus if it's omitted, Yanan Wang, 2021/09/10
- [PATCH v9 13/16] machine: Move smp_prefer_sockets to struct SMPCompatProps, Yanan Wang, 2021/09/10
- [PATCH v9 07/16] qtest/numa-test: Use detailed -smp CLI in test_def_cpu_split, Yanan Wang, 2021/09/10
- [PATCH v9 16/16] tests/unit: Add a unit test for smp parsing, Yanan Wang, 2021/09/10
- [PATCH v9 10/16] machine: Tweak the order of topology members in struct CpuTopology, Yanan Wang, 2021/09/10