From c07dfca3b340161294755691f416ab20f37fa7c3 Mon Sep 17 00:00:00 2001 From: Igor Mammedov Date: Thu, 4 Oct 2018 10:31:31 +0100 Subject: [PATCH 01/17] Revert "hw/acpi-build: build SRAT memory affinity structures for DIMM devices" RH-Author: Igor Mammedov Message-id: <1538649091-70517-1-git-send-email-imammedo@redhat.com> Patchwork-id: 82373 O-Subject: [RHEL8/virt-8.0.0 qemu-kvm PATCH] Revert "hw/acpi-build: build SRAT memory affinity structures for DIMM devices" Bugzilla: 1609235 RH-Acked-by: Laszlo Ersek RH-Acked-by: Michael S. Tsirkin RH-Acked-by: Thomas Huth Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1609235 Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=18630981 Upstream: RHEL only Since upstream commits (0efd7e108 "pc: acpi: fix memory hotplug regression by reducing stub SRAT entry size") (dbb6da8ba7 "pc: acpi: revert back to 1 SRAT entry for hotpluggable area") hasn't been backported to RHEL8, it's sufficient to revert commit (848a1cc1e8 "hw/acpi-build: build SRAT memory affinity structures for DIMM devices") for the result to match the current upstream state and fix the bug. Signed-off-by: Igor Mammedov Signed-off-by: Danilo C. L. de Paula --- hw/i386/acpi-build.c | 56 ++++------------------------------------------------ 1 file changed, 4 insertions(+), 52 deletions(-) diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index b309a97..a175a8a 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -2253,55 +2253,6 @@ build_tpm2(GArray *table_data, BIOSLinker *linker, GArray *tcpalog) #define HOLE_640K_START (640 * 1024) #define HOLE_640K_END (1024 * 1024) -static void build_srat_hotpluggable_memory(GArray *table_data, uint64_t base, - uint64_t len, int default_node) -{ - MemoryDeviceInfoList *info_list = qmp_pc_dimm_device_list(); - MemoryDeviceInfoList *info; - MemoryDeviceInfo *mi; - PCDIMMDeviceInfo *di; - uint64_t end = base + len, cur, size; - bool is_nvdimm; - AcpiSratMemoryAffinity *numamem; - MemoryAffinityFlags flags; - - for (cur = base, info = info_list; - cur < end; - cur += size, info = info->next) { - numamem = acpi_data_push(table_data, sizeof *numamem); - - if (!info) { - build_srat_memory(numamem, cur, end - cur, default_node, - MEM_AFFINITY_HOTPLUGGABLE | MEM_AFFINITY_ENABLED); - break; - } - - mi = info->value; - is_nvdimm = (mi->type == MEMORY_DEVICE_INFO_KIND_NVDIMM); - di = !is_nvdimm ? mi->u.dimm.data : mi->u.nvdimm.data; - - if (cur < di->addr) { - build_srat_memory(numamem, cur, di->addr - cur, default_node, - MEM_AFFINITY_HOTPLUGGABLE | MEM_AFFINITY_ENABLED); - numamem = acpi_data_push(table_data, sizeof *numamem); - } - - size = di->size; - - flags = MEM_AFFINITY_ENABLED; - if (di->hotpluggable) { - flags |= MEM_AFFINITY_HOTPLUGGABLE; - } - if (is_nvdimm) { - flags |= MEM_AFFINITY_NON_VOLATILE; - } - - build_srat_memory(numamem, di->addr, size, di->node, flags); - } - - qapi_free_MemoryDeviceInfoList(info_list); -} - static void build_srat(GArray *table_data, BIOSLinker *linker, MachineState *machine) { @@ -2413,9 +2364,10 @@ build_srat(GArray *table_data, BIOSLinker *linker, MachineState *machine) * providing _PXM method if necessary. */ if (hotplugabble_address_space_size) { - build_srat_hotpluggable_memory(table_data, pcms->hotplug_memory.base, - hotplugabble_address_space_size, - pcms->numa_nodes - 1); + numamem = acpi_data_push(table_data, sizeof *numamem); + build_srat_memory(numamem, pcms->hotplug_memory.base, + hotplugabble_address_space_size, pcms->numa_nodes - 1, + MEM_AFFINITY_HOTPLUGGABLE | MEM_AFFINITY_ENABLED); } build_header(linker, table_data, -- 1.8.3.1