From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35422) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1axD3e-0006B3-Ve for qemu-devel@nongnu.org; Mon, 02 May 2016 08:34:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1axD3T-0008Q2-2C for qemu-devel@nongnu.org; Mon, 02 May 2016 08:34:33 -0400 Received: from mx1.redhat.com ([209.132.183.28]:60142) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1axD3S-0008LX-RN for qemu-devel@nongnu.org; Mon, 02 May 2016 08:34:26 -0400 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id BAAB481113 for ; Mon, 2 May 2016 12:34:15 +0000 (UTC) From: Igor Mammedov Date: Mon, 2 May 2016 14:33:21 +0200 Message-Id: <1462192431-146342-13-git-send-email-imammedo@redhat.com> In-Reply-To: <1462192431-146342-1-git-send-email-imammedo@redhat.com> References: <1462192431-146342-1-git-send-email-imammedo@redhat.com> Subject: [Qemu-devel] [RFC 12/42] pc: initialize legacy hotplug only for 2.6 and older machine types List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: mst@redhat.com, ehabkost@redhat.com, marcel@redhat.com, eblake@redhat.com, armbru@redhat.com, drjones@redhat.com 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 --- 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