76 lines
2.9 KiB
Diff
76 lines
2.9 KiB
Diff
|
|
From 8d287871fd4e1b4654fe9e5011b80614cb44f6d8 Mon Sep 17 00:00:00 2001
|
||
|
|
From: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
|
||
|
|
Date: Wed, 18 Sep 2019 14:06:28 +0100
|
||
|
|
Subject: [PATCH] hw/arm/virt-acpi-build: Add PC-DIMM in SRAT
|
||
|
|
|
||
|
|
Generate Memory Affinity Structures for PC-DIMM ranges.
|
||
|
|
|
||
|
|
Also, Linux and Windows need ACPI SRAT table to make memory hotplug
|
||
|
|
work properly, however currently QEMU doesn't create SRAT table if
|
||
|
|
numa options aren't present on CLI. Hence add support(>=4.2) to
|
||
|
|
create numa node automatically (auto_enable_numa_with_memhp) when
|
||
|
|
QEMU is started with memory hotplug enabled but without '-numa'
|
||
|
|
options on CLI.
|
||
|
|
|
||
|
|
Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
|
||
|
|
Signed-off-by: Eric Auger <eric.auger@redhat.com>
|
||
|
|
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
|
||
|
|
Message-Id: <20190918130633.4872-7-shameerali.kolothum.thodi@huawei.com>
|
||
|
|
Acked-by: Peter Maydell <peter.maydell@linaro.org>
|
||
|
|
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
|
||
|
|
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
|
||
|
|
---
|
||
|
|
hw/arm/virt-acpi-build.c | 9 +++++++++
|
||
|
|
hw/arm/virt.c | 2 ++
|
||
|
|
2 files changed, 11 insertions(+)
|
||
|
|
|
||
|
|
diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
|
||
|
|
index fca53ae01f..9622994e50 100644
|
||
|
|
--- a/hw/arm/virt-acpi-build.c
|
||
|
|
+++ b/hw/arm/virt-acpi-build.c
|
||
|
|
@@ -592,6 +592,7 @@ build_srat(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
|
||
|
|
int i, srat_start;
|
||
|
|
uint64_t mem_base;
|
||
|
|
MachineClass *mc = MACHINE_GET_CLASS(vms);
|
||
|
|
+ MachineState *ms = MACHINE(vms);
|
||
|
|
const CPUArchIdList *cpu_list = mc->possible_cpu_arch_ids(MACHINE(vms));
|
||
|
|
|
||
|
|
srat_start = table_data->len;
|
||
|
|
@@ -617,6 +618,14 @@ build_srat(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
+ if (ms->device_memory) {
|
||
|
|
+ numamem = acpi_data_push(table_data, sizeof *numamem);
|
||
|
|
+ build_srat_memory(numamem, ms->device_memory->base,
|
||
|
|
+ memory_region_size(&ms->device_memory->mr),
|
||
|
|
+ nb_numa_nodes - 1,
|
||
|
|
+ MEM_AFFINITY_HOTPLUGGABLE | MEM_AFFINITY_ENABLED);
|
||
|
|
+ }
|
||
|
|
+
|
||
|
|
build_header(linker, table_data, (void *)(table_data->data + srat_start),
|
||
|
|
"SRAT", table_data->len - srat_start, 3, NULL, NULL);
|
||
|
|
}
|
||
|
|
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
|
||
|
|
index 8ccabd5159..ab33cce4b3 100644
|
||
|
|
--- a/hw/arm/virt.c
|
||
|
|
+++ b/hw/arm/virt.c
|
||
|
|
@@ -2173,6 +2173,7 @@ static void virt_machine_class_init(ObjectClass *oc, void *data)
|
||
|
|
hc->plug = virt_machine_device_plug_cb;
|
||
|
|
hc->unplug_request = virt_machine_device_unplug_request_cb;
|
||
|
|
mc->numa_mem_supported = true;
|
||
|
|
+ mc->auto_enable_numa_with_memhp = true;
|
||
|
|
}
|
||
|
|
|
||
|
|
static void virt_instance_init(Object *obj)
|
||
|
|
@@ -2278,6 +2279,7 @@ static void virt_machine_4_0_options(MachineClass *mc)
|
||
|
|
virt_machine_4_1_options(mc);
|
||
|
|
compat_props_add(mc->compat_props, hw_compat_4_0, hw_compat_4_0_len);
|
||
|
|
vmc->no_ged = true;
|
||
|
|
+ mc->auto_enable_numa_with_memhp = false;
|
||
|
|
}
|
||
|
|
DEFINE_VIRT_MACHINE(4, 0)
|
||
|
|
|
||
|
|
--
|
||
|
|
2.19.1
|