From: Yanan Wang <wangyanan55@huawei.com>
To: <qemu-devel@nongnu.org>
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
"Andrew Jones" <drjones@redhat.com>,
"Cornelia Huck" <cohuck@redhat.com>,
"Daniel P . Berrangé" <berrange@redhat.com>,
"Eduardo Habkost" <ehabkost@redhat.com>,
"Pierre Morel" <pmorel@linux.ibm.com>,
"Michael S . Tsirkin" <mst@redhat.com>,
"Pankaj Gupta" <pankaj.gupta.linux@gmail.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Greg Kurz" <groug@kaod.org>, "Halil Pasic" <pasic@linux.ibm.com>,
wanghaibin.wang@huawei.com, "Thomas Huth" <thuth@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Yanan Wang" <wangyanan55@huawei.com>,
"David Gibson" <david@gibson.dropbear.id.au>
Subject: [PATCH for-6.2 v3 04/11] machine: Improve the error reporting of smp parsing
Date: Wed, 28 Jul 2021 11:48:41 +0800 [thread overview]
Message-ID: <20210728034848.75228-5-wangyanan55@huawei.com> (raw)
In-Reply-To: <20210728034848.75228-1-wangyanan55@huawei.com>
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>
---
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 958e6e7107..e879163c3b 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -777,25 +777,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 9ad7ae5254..3e403a7129 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -747,25 +747,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 * 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
next prev parent reply other threads:[~2021-07-28 3:53 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-28 3:48 [PATCH for-6.2 v3 00/11] machine: smp parsing fixes and improvement Yanan Wang
2021-07-28 3:48 ` [PATCH for-6.2 v3 01/11] machine: Minor refactor/cleanup for the smp parsers Yanan Wang
2021-07-28 20:16 ` Andrew Jones
2021-07-29 6:24 ` wangyanan (Y)
2021-07-28 3:48 ` [PATCH for-6.2 v3 02/11] machine: Uniformly use maxcpus to calculate the omitted parameters Yanan Wang
2021-07-28 3:48 ` [PATCH for-6.2 v3 03/11] machine: Set the value of cpus to match maxcpus if it's omitted Yanan Wang
2021-07-28 20:22 ` Andrew Jones
2021-07-29 6:30 ` wangyanan (Y)
2021-07-28 3:48 ` Yanan Wang [this message]
2021-07-28 20:24 ` [PATCH for-6.2 v3 04/11] machine: Improve the error reporting of smp parsing Andrew Jones
2021-07-28 3:48 ` [PATCH for-6.2 v3 05/11] hw: Add compat machines for 6.2 Yanan Wang
2021-07-28 3:48 ` [PATCH for-6.2 v3 06/11] machine: Prefer cores over sockets in smp parsing since 6.2 Yanan Wang
2021-07-28 20:28 ` Andrew Jones
2021-07-29 9:12 ` Cornelia Huck
2021-07-28 3:48 ` [PATCH for-6.2 v3 07/11] machine: Use ms instead of global current_machine in sanity-check Yanan Wang
2021-07-28 4:37 ` Pankaj Gupta
2021-07-29 9:12 ` Cornelia Huck
2021-07-28 3:48 ` [PATCH for-6.2 v3 08/11] machine: Tweak the order of topology members in struct CpuTopology Yanan Wang
2021-07-28 3:48 ` [PATCH for-6.2 v3 09/11] machine: Make smp_parse generic enough for all arches Yanan Wang
2021-07-28 20:38 ` Andrew Jones
2021-07-28 20:41 ` Andrew Jones
2021-07-28 3:48 ` [PATCH for-6.2 v3 10/11] machine: Remove smp_parse callback from MachineClass Yanan Wang
2021-07-28 20:39 ` Andrew Jones
2021-07-28 3:48 ` [PATCH for-6.2 v3 11/11] machine: Move smp_prefer_sockets to struct SMPCompatProps Yanan Wang
2021-07-28 5:09 ` David Gibson
2021-07-28 20:40 ` Andrew Jones
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210728034848.75228-5-wangyanan55@huawei.com \
--to=wangyanan55@huawei.com \
--cc=berrange@redhat.com \
--cc=cohuck@redhat.com \
--cc=david@gibson.dropbear.id.au \
--cc=drjones@redhat.com \
--cc=ehabkost@redhat.com \
--cc=groug@kaod.org \
--cc=mst@redhat.com \
--cc=pankaj.gupta.linux@gmail.com \
--cc=pasic@linux.ibm.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=pmorel@linux.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=thuth@redhat.com \
--cc=wanghaibin.wang@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).