in addition to moving exclude _E03 handler from SSDT if memory hotplug is not enabled.
Signed-off-by: Igor Mammedov <imamm...@redhat.com> --- hw/acpi/memory_hotplug_acpi_table.c | 6 +++--- hw/i386/acpi-build.c | 8 ++++++++ hw/i386/acpi-dsdt-mem-hotplug.dsl | 16 ---------------- hw/i386/acpi-dsdt.dsl | 5 ----- hw/i386/q35-acpi-dsdt.dsl | 5 ----- include/hw/acpi/memory_hotplug.h | 5 +++++ include/hw/acpi/pc-hotplug.h | 2 -- 7 files changed, 16 insertions(+), 31 deletions(-) delete mode 100644 hw/i386/acpi-dsdt-mem-hotplug.dsl diff --git a/hw/acpi/memory_hotplug_acpi_table.c b/hw/acpi/memory_hotplug_acpi_table.c index ea308ab..e370233 100644 --- a/hw/acpi/memory_hotplug_acpi_table.c +++ b/hw/acpi/memory_hotplug_acpi_table.c @@ -22,7 +22,7 @@ #define MEMORY_SLOT_LOCK "MLCK" #define MEMORY_SLOT_SLECTOR "MSEL" -#define BASEPATH "\\_SB.PCI0." stringify(MEMORY_HOTPLUG_DEVICE) "." +#define BASEPATH "\\_SB.PCI0." MEMORY_HOTPLUG_DEVICE "." void build_mhpt(GArray *table_data, GArray *linker, uint32_t nr_mem, uint16_t io_base, uint16_t io_len) @@ -36,7 +36,7 @@ void build_mhpt(GArray *table_data, GArray *linker, uint32_t nr_mem, /* scope for memory hotplug controller device node */ assert(nr_mem <= ACPI_MAX_RAM_SLOTS); - ctrl_dev = aml_device("\\_SB.PCI0." stringify(MEMORY_HOTPLUG_DEVICE)); + ctrl_dev = aml_device("\\_SB.PCI0." MEMORY_HOTPLUG_DEVICE); { Aml *crs, *field; Aml *a_slot_arg = aml_arg(0); @@ -98,7 +98,7 @@ void build_mhpt(GArray *table_data, GArray *linker, uint32_t nr_mem, aml_append(ctrl_dev, aml_mutex(MEMORY_SLOT_LOCK, 0)); - method = aml_method(stringify(MEMORY_SLOT_SCAN_METHOD), 0); + method = aml_method(MEMORY_SLOT_SCAN_METHOD, 0); { Aml *a_idx = aml_local(0); diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index c929540..1bdae78 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -935,6 +935,14 @@ build_ssdt(GArray *table_data, GArray *linker, aml_append(sb_scope, method); aml_append(ssdt, sb_scope); + scope = aml_scope("\\_GPE"); + if (nr_mem) { + method = aml_method("_E03", 0); + aml_append(method, aml_call0(MEMORY_HOTPLUG_HANDLER_PATH)); + aml_append(scope, method); + } + aml_append(ssdt, scope); + /* Extra PCI root buses are implemented only for i440fx */ bus = find_i440fx(); if (bus) { diff --git a/hw/i386/acpi-dsdt-mem-hotplug.dsl b/hw/i386/acpi-dsdt-mem-hotplug.dsl deleted file mode 100644 index 20c5ec1..0000000 --- a/hw/i386/acpi-dsdt-mem-hotplug.dsl +++ /dev/null @@ -1,16 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License along - * with this program; if not, see <http://www.gnu.org/licenses/>. - */ - - External(\_SB.PCI0.MEMORY_HOTPLUG_DEVICE.MEMORY_SLOT_SCAN_METHOD, MethodObj) diff --git a/hw/i386/acpi-dsdt.dsl b/hw/i386/acpi-dsdt.dsl index 6d46b36..203863f 100644 --- a/hw/i386/acpi-dsdt.dsl +++ b/hw/i386/acpi-dsdt.dsl @@ -250,7 +250,6 @@ DefinitionBlock ( #include "hw/acpi/pc-hotplug.h" #define CPU_STATUS_BASE PIIX4_CPU_HOTPLUG_IO_BASE #include "acpi-dsdt-cpu-hotplug.dsl" -#include "acpi-dsdt-mem-hotplug.dsl" /**************************************************************** @@ -271,10 +270,6 @@ DefinitionBlock ( // CPU hotplug event \_SB.PRSC() } - Method(_E03) { - // Memory hotplug event - \_SB.PCI0.MEMORY_HOTPLUG_DEVICE.MEMORY_SLOT_SCAN_METHOD() - } Method(_L04) { } Method(_L05) { diff --git a/hw/i386/q35-acpi-dsdt.dsl b/hw/i386/q35-acpi-dsdt.dsl index ecefdec..ca2d25d 100644 --- a/hw/i386/q35-acpi-dsdt.dsl +++ b/hw/i386/q35-acpi-dsdt.dsl @@ -387,7 +387,6 @@ DefinitionBlock ( #include "hw/acpi/pc-hotplug.h" #define CPU_STATUS_BASE ICH9_CPU_HOTPLUG_IO_BASE #include "acpi-dsdt-cpu-hotplug.dsl" -#include "acpi-dsdt-mem-hotplug.dsl" /**************************************************************** @@ -404,10 +403,6 @@ DefinitionBlock ( // CPU hotplug event \_SB.PRSC() } - Method(_E03) { - // Memory hotplug event - \_SB.PCI0.MEMORY_HOTPLUG_DEVICE.MEMORY_SLOT_SCAN_METHOD() - } Method(_L04) { } Method(_L05) { diff --git a/include/hw/acpi/memory_hotplug.h b/include/hw/acpi/memory_hotplug.h index 5fd2854..a107b9b 100644 --- a/include/hw/acpi/memory_hotplug.h +++ b/include/hw/acpi/memory_hotplug.h @@ -46,6 +46,11 @@ extern const VMStateDescription vmstate_memory_hotplug; void acpi_memory_ospm_status(MemHotplugState *mem_st, ACPIOSTInfoList ***list); +#define MEMORY_HOTPLUG_DEVICE "MHPD" +#define MEMORY_SLOT_SCAN_METHOD "MSCN" +#define MEMORY_HOTPLUG_HANDLER_PATH "\\_SB.PCI0." MEMORY_HOTPLUG_DEVICE "." \ + MEMORY_SLOT_SCAN_METHOD + void build_mhpt(GArray *table_data, GArray *linker, uint32_t nr_mem, uint16_t io_base, uint16_t io_len); #endif diff --git a/include/hw/acpi/pc-hotplug.h b/include/hw/acpi/pc-hotplug.h index 29f0244..65e7d3b 100644 --- a/include/hw/acpi/pc-hotplug.h +++ b/include/hw/acpi/pc-hotplug.h @@ -32,8 +32,6 @@ #define ACPI_MEMORY_HOTPLUG_IO_LEN 24 #define ACPI_MEMORY_HOTPLUG_BASE 0x0a00 -#define MEMORY_HOTPLUG_DEVICE MHPD #define MEMORY_HOTPLUG_IO_REGION HPMR -#define MEMORY_SLOT_SCAN_METHOD MSCN #endif -- 1.8.3.1