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 02/11] x86: cpuhp: prevent guest crash on CPU hotplug when broadcast SMI is in use
Date: Wed, 23 Sep 2020 05:46:41 -0400 [thread overview]
Message-ID: <20200923094650.1301166-3-imammedo@redhat.com> (raw)
In-Reply-To: <20200923094650.1301166-1-imammedo@redhat.com>
There were reports of guest crash on CPU hotplug, when using q35 machine
type and OVMF with SMM, due to hotplugged CPU trying to process SMI at
default SMI handler location without it being relocated by firmware first.
Fix it by refusing hotplug if firmware hasn't negotiated CPU hotplug with
SMI support while SMI broadcast is in use.
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Tested-by: Laszlo Ersek <lersek@redhat.com>
---
v6:
- rebase on top of current master, due to non trivial conflicts
caused by microvm series, which moved/renamed pc_cpu_pre_plug()
(Ankur Arora <ankur.a.arora@oracle.com>)
v1:
fix typos an use suggested wording in commit and error msg
s/secure boot/smm/; s/hotplug SMI/hotplug with SMI/
(Laszlo Ersek <lersek@redhat.com>)
---
hw/acpi/ich9.c | 12 +++++++++++-
hw/i386/x86.c | 11 +++++++++++
2 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/hw/acpi/ich9.c b/hw/acpi/ich9.c
index 6a19070cec..0acc9a3107 100644
--- a/hw/acpi/ich9.c
+++ b/hw/acpi/ich9.c
@@ -408,10 +408,20 @@ void ich9_pm_device_pre_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev,
ICH9LPCState *lpc = ICH9_LPC_DEVICE(hotplug_dev);
if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM) &&
- !lpc->pm.acpi_memory_hotplug.is_enabled)
+ !lpc->pm.acpi_memory_hotplug.is_enabled) {
error_setg(errp,
"memory hotplug is not enabled: %s.memory-hotplug-support "
"is not set", object_get_typename(OBJECT(lpc)));
+ } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) {
+ uint64_t negotiated = lpc->smi_negotiated_features;
+
+ if (negotiated & BIT_ULL(ICH9_LPC_SMI_F_BROADCAST_BIT) &&
+ !(negotiated & BIT_ULL(ICH9_LPC_SMI_F_CPU_HOTPLUG_BIT))) {
+ error_setg(errp, "cpu hotplug with SMI wasn't enabled by firmware");
+ error_append_hint(errp, "update machine type to newer than 5.1 "
+ "and firmware that suppors CPU hotplug with SMM");
+ }
+ }
}
void ich9_pm_device_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev,
diff --git a/hw/i386/x86.c b/hw/i386/x86.c
index c2ea989579..403c2b1dad 100644
--- a/hw/i386/x86.c
+++ b/hw/i386/x86.c
@@ -279,6 +279,17 @@ void x86_cpu_pre_plug(HotplugHandler *hotplug_dev,
return;
}
+ if (x86ms->acpi_dev) {
+ Error *local_err = NULL;
+
+ hotplug_handler_pre_plug(HOTPLUG_HANDLER(x86ms->acpi_dev), dev,
+ &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return;
+ }
+ }
+
init_topo_info(&topo_info, x86ms);
env->nr_dies = x86ms->smp_dies;
--
2.27.0
next prev parent reply other threads:[~2020-09-23 9:48 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 ` [PATCH v6 01/11] x86: lpc9: let firmware negotiate 'CPU hotplug with SMI' features Igor Mammedov
2020-09-23 9:46 ` Igor Mammedov [this message]
2020-09-23 17:16 ` [PATCH v6 02/11] x86: cpuhp: prevent guest crash on CPU hotplug when broadcast SMI is in use 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-3-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).