[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL v4 22/48] x86: cpuhp: prevent guest crash on CPU hotplug when broa
From: |
Michael S. Tsirkin |
Subject: |
[PULL v4 22/48] x86: cpuhp: prevent guest crash on CPU hotplug when broadcast SMI is in use |
Date: |
Tue, 29 Sep 2020 03:21:51 -0400 |
From: Igor Mammedov <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>
Message-Id: <20200923094650.1301166-3-imammedo@redhat.com>
Tested-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@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;
--
MST
- [PULL v4 10/48] virtio-iommu: Check gtrees are non null before destroying them, (continued)
- [PULL v4 10/48] virtio-iommu: Check gtrees are non null before destroying them, Michael S. Tsirkin, 2020/09/29
- [PULL v4 11/48] virtio-iommu-pci: force virtio version 1, Michael S. Tsirkin, 2020/09/29
- [PULL v4 09/48] cphp: remove deprecated cpu-add command(s), Michael S. Tsirkin, 2020/09/29
- [PULL v4 13/48] util/hexdump: introduce qemu_hexdump_line(), Michael S. Tsirkin, 2020/09/29
- [PULL v4 14/48] vhost-vdpa: add trace-events, Michael S. Tsirkin, 2020/09/29
- [PULL v4 15/48] configure: Fix build dependencies with vhost-vdpa., Michael S. Tsirkin, 2020/09/29
- [PULL v4 16/48] virtio: skip legacy support check on machine types less than 5.1, Michael S. Tsirkin, 2020/09/29
- [PULL v4 17/48] vhost-vsock-pci: force virtio version 1, Michael S. Tsirkin, 2020/09/29
- [PULL v4 18/48] vhost-user-vsock-pci: force virtio version 1, Michael S. Tsirkin, 2020/09/29
- [PULL v4 19/48] vhost-vsock-ccw: force virtio version 1, Michael S. Tsirkin, 2020/09/29
- [PULL v4 22/48] x86: cpuhp: prevent guest crash on CPU hotplug when broadcast SMI is in use,
Michael S. Tsirkin <=
- [PULL v4 21/48] x86: lpc9: let firmware negotiate 'CPU hotplug with SMI' features, Michael S. Tsirkin, 2020/09/29
- [PULL v4 24/48] acpi: add aml_land() and aml_break() primitives, Michael S. Tsirkin, 2020/09/29
- [PULL v4 25/48] tests: acpi: mark to be changed tables in bios-tables-test-allowed-diff, Michael S. Tsirkin, 2020/09/29
- [PULL v4 26/48] x86: ich9: expose "smi_negotiated_features" as a QOM property, Michael S. Tsirkin, 2020/09/29
- [PULL v4 27/48] x86: acpi: introduce AcpiPmInfo::smi_on_cpuhp, Michael S. Tsirkin, 2020/09/29
- [PULL v4 28/48] x86: acpi: introduce the PCI0.SMI0 ACPI device, Michael S. Tsirkin, 2020/09/29
- [PULL v4 29/48] x68: acpi: trigger SMI before sending hotplug Notify event to OSPM, Michael S. Tsirkin, 2020/09/29
- [PULL v4 31/48] hw/smbios: support loading OEM strings values from a file, Michael S. Tsirkin, 2020/09/29
- [PULL v4 32/48] hw/smbios: report error if table size is too large, Michael S. Tsirkin, 2020/09/29
- [PULL v4 34/48] vhost-user: save features of multiqueues if chardev is closed, Michael S. Tsirkin, 2020/09/29