[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC 12/42] pc: initialize legacy hotplug only for 2.6 and
From: |
Igor Mammedov |
Subject: |
[Qemu-devel] [RFC 12/42] pc: initialize legacy hotplug only for 2.6 and older machine types |
Date: |
Mon, 2 May 2016 14:33:21 +0200 |
on old machine types CPU hotplug was uncondtionally
enabled since it was introduced, consuming IO ports
and providing AML regardles of whether it was actually
in use or not. Keep it so for 2.6 and older machines.
New machine types will have an option to turn CPU
hotplug on if it's needed while by default it stays
disabled not consuming extra RAM/IO resources.
Signed-off-by: Igor Mammedov <address@hidden>
---
hw/acpi/ich9.c | 9 ++++++---
hw/acpi/piix4.c | 9 ++++++---
hw/i386/acpi-build.c | 8 +++++++-
include/hw/compat.h | 11 ++++++++++-
4 files changed, 29 insertions(+), 8 deletions(-)
diff --git a/hw/acpi/ich9.c b/hw/acpi/ich9.c
index 1cfe832..b5481d4 100644
--- a/hw/acpi/ich9.c
+++ b/hw/acpi/ich9.c
@@ -273,8 +273,10 @@ void ich9_pm_init(PCIDevice *lpc_pci, ICH9LPCPMRegs *pm,
pm->powerdown_notifier.notify = pm_powerdown_req;
qemu_register_powerdown_notifier(&pm->powerdown_notifier);
- legacy_acpi_cpu_hotplug_init(pci_address_space_io(lpc_pci),
- OBJECT(lpc_pci), &pm->gpe_cpu, ICH9_CPU_HOTPLUG_IO_BASE);
+ if (pm->cpu_hotplug_legacy) {
+ legacy_acpi_cpu_hotplug_init(pci_address_space_io(lpc_pci),
+ OBJECT(lpc_pci), &pm->gpe_cpu, ICH9_CPU_HOTPLUG_IO_BASE);
+ }
if (pm->acpi_memory_hotplug.is_enabled) {
acpi_memory_hotplug_init(pci_address_space_io(lpc_pci),
OBJECT(lpc_pci),
@@ -455,7 +457,8 @@ void ich9_pm_device_plug_cb(ICH9LPCPMRegs *pm, DeviceState
*dev, Error **errp)
object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
acpi_memory_plug_cb(&pm->acpi_regs, pm->irq, &pm->acpi_memory_hotplug,
dev, errp);
- } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) {
+ } else if (pm->cpu_hotplug_legacy &&
+ object_dynamic_cast(OBJECT(dev), TYPE_CPU)) {
legacy_acpi_cpu_plug_cb(&pm->acpi_regs, pm->irq,
&pm->gpe_cpu, dev, errp);
} else {
diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c
index 7b5c312..86d68dd 100644
--- a/hw/acpi/piix4.c
+++ b/hw/acpi/piix4.c
@@ -352,7 +352,8 @@ static void piix4_device_plug_cb(HotplugHandler
*hotplug_dev,
} else if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
acpi_pcihp_device_plug_cb(&s->ar, s->irq, &s->acpi_pci_hotplug, dev,
errp);
- } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) {
+ } else if (s->cpu_hotplug_legacy &&
+ object_dynamic_cast(OBJECT(dev), TYPE_CPU)) {
legacy_acpi_cpu_plug_cb(&s->ar, s->irq, &s->gpe_cpu, dev, errp);
} else {
error_setg(errp, "acpi: device plug request for not supported device"
@@ -571,8 +572,10 @@ static void piix4_acpi_system_hot_add_init(MemoryRegion
*parent,
acpi_pcihp_init(OBJECT(s), &s->acpi_pci_hotplug, bus, parent,
s->use_acpi_pci_hotplug);
- legacy_acpi_cpu_hotplug_init(parent, OBJECT(s), &s->gpe_cpu,
- PIIX4_CPU_HOTPLUG_IO_BASE);
+ if (s->cpu_hotplug_legacy) {
+ legacy_acpi_cpu_hotplug_init(parent, OBJECT(s), &s->gpe_cpu,
+ PIIX4_CPU_HOTPLUG_IO_BASE);
+ }
if (s->acpi_memory_hotplug.is_enabled) {
acpi_memory_hotplug_init(parent, OBJECT(s), &s->acpi_memory_hotplug);
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index 4a7eab3..502f1a7 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -93,6 +93,7 @@ typedef struct AcpiPmInfo {
uint32_t gpe0_blk;
uint32_t gpe0_blk_len;
uint32_t io_base;
+ bool legacy_cpu_hp;
uint16_t cpu_hp_io_base;
uint16_t mem_hp_io_base;
uint16_t mem_hp_io_len;
@@ -141,6 +142,9 @@ static void acpi_get_pm_info(AcpiPmInfo *pm)
}
assert(obj);
+ pm->legacy_cpu_hp = object_property_get_bool(obj, "cpu-hotplug-legacy",
+ NULL);
+
pm->mem_hp_io_base = ACPI_MEMORY_HOTPLUG_BASE;
pm->mem_hp_io_len = ACPI_MEMORY_HOTPLUG_IO_LEN;
@@ -1933,7 +1937,9 @@ build_dsdt(GArray *table_data, GArray *linker,
build_q35_pci0_int(dsdt);
}
- build_legacy_cpu_hotplug_aml(dsdt, machine, pm->cpu_hp_io_base);
+ if (pm->legacy_cpu_hp) {
+ build_legacy_cpu_hotplug_aml(dsdt, machine, pm->cpu_hp_io_base);
+ }
build_memory_hotplug_aml(dsdt, nr_mem, pm->mem_hp_io_base,
pm->mem_hp_io_len);
diff --git a/include/hw/compat.h b/include/hw/compat.h
index 636befe..f8c662d 100644
--- a/include/hw/compat.h
+++ b/include/hw/compat.h
@@ -2,7 +2,16 @@
#define HW_COMPAT_H
#define HW_COMPAT_2_6 \
- /* empty */
+ {\
+ .driver = "PIIX4_PM",\
+ .property = "cpu-hotplug-legacy",\
+ .value = "on",\
+ },\
+ {\
+ .driver = "ICH9-LPC",\
+ .property = "cpu-hotplug-legacy",\
+ .value = "on",\
+ },\
#define HW_COMPAT_2_5 \
{\
--
1.8.3.1
- [Qemu-devel] [RFC 00/42] ACPI CPU hotplug refactoring to support more than 255 CPUs and PXM/OST methods, Igor Mammedov, 2016/05/02
- [Qemu-devel] [RFC 02/42] acpi: add aml_refof(), Igor Mammedov, 2016/05/02
- [Qemu-devel] [RFC 05/42] pc: acpi: consolidate \GPE._E02 with the rest of CPU hotplug AML, Igor Mammedov, 2016/05/02
- [Qemu-devel] [RFC 04/42] pc: acpi: consolidate CPU hotplug AML, Igor Mammedov, 2016/05/02
- [Qemu-devel] [RFC 01/42] acpi: add aml_debug(), Igor Mammedov, 2016/05/02
- [Qemu-devel] [RFC 06/42] pc: acpi: cpu-hotplug: make AML CPU_foo defines local to cpu_hotplug_acpi_table.c, Igor Mammedov, 2016/05/02
- [Qemu-devel] [RFC 07/42] pc: acpi: mark current CPU hotplug functions as legacy, Igor Mammedov, 2016/05/02
- [Qemu-devel] [RFC 09/42] pc: acpi: simplify build_legacy_cpu_hotplug_aml() signature, Igor Mammedov, 2016/05/02
- [Qemu-devel] [RFC 11/42] pc: add 2.7 machine, Igor Mammedov, 2016/05/02
- [Qemu-devel] [RFC 12/42] pc: initialize legacy hotplug only for 2.6 and older machine types,
Igor Mammedov <=
- Re: [Qemu-devel] [RFC 12/42] pc: initialize legacy hotplug only for 2.6 and older machine types, Eduardo Habkost, 2016/05/10
- Re: [Qemu-devel] [RFC 12/42] pc: initialize legacy hotplug only for 2.6 and older machine types, Igor Mammedov, 2016/05/11
- Re: [Qemu-devel] [RFC 12/42] pc: initialize legacy hotplug only for 2.6 and older machine types, Michael S. Tsirkin, 2016/05/11
- Re: [Qemu-devel] [RFC 12/42] pc: initialize legacy hotplug only for 2.6 and older machine types, Eduardo Habkost, 2016/05/11
- Re: [Qemu-devel] [RFC 12/42] pc: initialize legacy hotplug only for 2.6 and older machine types, Michael S. Tsirkin, 2016/05/12
- Re: [Qemu-devel] [RFC 12/42] pc: initialize legacy hotplug only for 2.6 and older machine types, Igor Mammedov, 2016/05/12
- Re: [Qemu-devel] [RFC 12/42] pc: initialize legacy hotplug only for 2.6 and older machine types, Eduardo Habkost, 2016/05/12
- Re: [Qemu-devel] [libvirt] [RFC 12/42] pc: initialize legacy hotplug only for 2.6 and older machine types, Peter Krempa, 2016/05/12
- Re: [Qemu-devel] [libvirt] [RFC 12/42] pc: initialize legacy hotplug only for 2.6 and older machine types, Igor Mammedov, 2016/05/12
- Re: [Qemu-devel] [libvirt] [RFC 12/42] pc: initialize legacy hotplug only for 2.6 and older machine types, Peter Krempa, 2016/05/12