From: Igor Mammedov <imammedo@redhat.com>
To: qemu-devel@nongnu.org
Cc: lersek@redhat.com, ankur.a.arora@oracle.com, mst@redhat.com
Subject: [PATCH v6 01/11] x86: lpc9: let firmware negotiate 'CPU hotplug with SMI' features
Date: Wed, 23 Sep 2020 05:46:40 -0400 [thread overview]
Message-ID: <20200923094650.1301166-2-imammedo@redhat.com> (raw)
In-Reply-To: <20200923094650.1301166-1-imammedo@redhat.com>
It will allow firmware to notify QEMU that firmware requires SMI
being triggered on CPU hot[un]plug, so that it would be able to account
for hotplugged CPU and relocate it to new SMM base and/or safely remove
CPU on unplug.
Using negotiated features, follow up patches will insert SMI upcall
into AML code, to make sure that firmware processes hotplug before
guest OS would attempt to use new CPU.
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Tested-by: Laszlo Ersek <lersek@redhat.com>
---
v4:
- fix 5.2 machine types so they won't apply pc_compat_5_1
(Laszlo Ersek <lersek@redhat.com>)
v3:
- rebase on top of "[PATCH v2] hw: add compat machines for 5.2"
so apply that before this patch
v2:
- rebase on top of 5.1 (move compat values to 5.1 machine)
- make "x-smi-cpu-hotunplug" false by default (Laszlo Ersek <lersek@redhat.com>)
fixup
---
include/hw/i386/ich9.h | 2 ++
hw/i386/pc.c | 4 +++-
hw/isa/lpc_ich9.c | 13 +++++++++++++
3 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/include/hw/i386/ich9.h b/include/hw/i386/ich9.h
index 48b442bc0b..703d56036a 100644
--- a/include/hw/i386/ich9.h
+++ b/include/hw/i386/ich9.h
@@ -247,5 +247,7 @@ struct ICH9LPCState {
/* bit positions used in fw_cfg SMI feature negotiation */
#define ICH9_LPC_SMI_F_BROADCAST_BIT 0
+#define ICH9_LPC_SMI_F_CPU_HOTPLUG_BIT 1
+#define ICH9_LPC_SMI_F_CPU_HOT_UNPLUG_BIT 2
#endif /* HW_ICH9_H */
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index b55369357e..2af660c55e 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -97,7 +97,9 @@
#include "trace.h"
#include CONFIG_DEVICES
-GlobalProperty pc_compat_5_1[] = {};
+GlobalProperty pc_compat_5_1[] = {
+ { "ICH9-LPC", "x-smi-cpu-hotplug", "off" },
+};
const size_t pc_compat_5_1_len = G_N_ELEMENTS(pc_compat_5_1);
GlobalProperty pc_compat_5_0[] = {
diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c
index 3303d2eab6..a54b3ec8bd 100644
--- a/hw/isa/lpc_ich9.c
+++ b/hw/isa/lpc_ich9.c
@@ -373,6 +373,15 @@ static void smi_features_ok_callback(void *opaque)
/* guest requests invalid features, leave @features_ok at zero */
return;
}
+ if (!(guest_features & BIT_ULL(ICH9_LPC_SMI_F_BROADCAST_BIT)) &&
+ guest_features & (BIT_ULL(ICH9_LPC_SMI_F_CPU_HOTPLUG_BIT) |
+ BIT_ULL(ICH9_LPC_SMI_F_CPU_HOT_UNPLUG_BIT))) {
+ /*
+ * cpu hot-[un]plug with SMI requires SMI broadcast,
+ * leave @features_ok at zero
+ */
+ return;
+ }
/* valid feature subset requested, lock it down, report success */
lpc->smi_negotiated_features = guest_features;
@@ -747,6 +756,10 @@ static Property ich9_lpc_properties[] = {
DEFINE_PROP_BOOL("noreboot", ICH9LPCState, pin_strap.spkr_hi, true),
DEFINE_PROP_BIT64("x-smi-broadcast", ICH9LPCState, smi_host_features,
ICH9_LPC_SMI_F_BROADCAST_BIT, true),
+ DEFINE_PROP_BIT64("x-smi-cpu-hotplug", ICH9LPCState, smi_host_features,
+ ICH9_LPC_SMI_F_CPU_HOTPLUG_BIT, true),
+ DEFINE_PROP_BIT64("x-smi-cpu-hotunplug", ICH9LPCState, smi_host_features,
+ ICH9_LPC_SMI_F_CPU_HOT_UNPLUG_BIT, false),
DEFINE_PROP_END_OF_LIST(),
};
--
2.27.0
next prev parent reply other threads:[~2020-09-23 9:50 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-23 9:46 [PATCH v6 00/11] x86: fix cpu hotplug with secure boot Igor Mammedov
2020-09-23 9:46 ` Igor Mammedov [this message]
2020-09-23 9:46 ` [PATCH v6 02/11] x86: cpuhp: prevent guest crash on CPU hotplug when broadcast SMI is in use Igor Mammedov
2020-09-23 17:16 ` Laszlo Ersek
2020-09-23 9:46 ` [PATCH v6 03/11] x86: cpuhp: refuse cpu hot-unplug request earlier if not supported Igor Mammedov
2020-09-23 9:46 ` [PATCH v6 04/11] acpi: add aml_land() and aml_break() primitives Igor Mammedov
2020-09-23 9:46 ` [PATCH v6 05/11] tests: acpi: mark to be changed tables in bios-tables-test-allowed-diff Igor Mammedov
2020-09-23 9:46 ` [PATCH v6 06/11] x86: ich9: expose "smi_negotiated_features" as a QOM property Igor Mammedov
2020-09-23 9:46 ` [PATCH v6 07/11] x86: acpi: introduce AcpiPmInfo::smi_on_cpuhp Igor Mammedov
2020-09-23 9:46 ` [PATCH v6 08/11] x86: acpi: introduce the PCI0.SMI0 ACPI device Igor Mammedov
2020-09-23 9:46 ` [PATCH v6 09/11] x68: acpi: trigger SMI before sending hotplug Notify event to OSPM Igor Mammedov
2020-09-23 9:46 ` [PATCH v6 10/11] tests: acpi: update acpi blobs with new AML Igor Mammedov
2020-09-23 9:46 ` [PATCH v6 11/11] smp: drop support for deprecated (invalid topologies) Igor Mammedov
2020-09-23 9:55 ` Igor Mammedov
2020-09-23 16:44 ` [PATCH v6 00/11] x86: fix cpu hotplug with secure boot Laszlo Ersek
2020-09-24 7:12 ` Igor Mammedov
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=20200923094650.1301166-2-imammedo@redhat.com \
--to=imammedo@redhat.com \
--cc=ankur.a.arora@oracle.com \
--cc=lersek@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
/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).