[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v4 7/8] hw/arm/boot: Add "hotpluggable" property to
From: |
Shameer Kolothum |
Subject: |
[Qemu-devel] [PATCH v4 7/8] hw/arm/boot: Add "hotpluggable" property to DT memory node |
Date: |
Tue, 9 Apr 2019 11:29:34 +0100 |
Currently firmware has no way of differentiating the memory
nodes and as a result device memory nodes might get exposed
to Guest Kernel via UEFI GetMemoryMap() as early boot memory
even if Guest boots with ACPI. This will prevent hot-unplug
of the device memory. To address this, an additional
"hotpluggable" property is introduced here similar to
the MEM_AFFINITY_HOTPLUGGABLE flag used in ACPI SRAT table.
Firmware can now check for "hotpluggable" property in the
memory node and treat them differently.
This is in preparation of exposing device memory nodes in DT.
Signed-off-by: Shameer Kolothum <address@hidden>
---
hw/arm/boot.c | 22 +++++++++++++++++++---
1 file changed, 19 insertions(+), 3 deletions(-)
diff --git a/hw/arm/boot.c b/hw/arm/boot.c
index a830655..8c840ba 100644
--- a/hw/arm/boot.c
+++ b/hw/arm/boot.c
@@ -425,7 +425,7 @@ static void set_kernel_args_old(const struct arm_boot_info
*info,
static int fdt_add_memory_node(void *fdt, uint32_t acells, hwaddr mem_base,
uint32_t scells, hwaddr mem_len,
- int numa_node_id)
+ int numa_node_id, bool hotplug)
{
char *nodename;
int ret;
@@ -444,6 +444,22 @@ static int fdt_add_memory_node(void *fdt, uint32_t acells,
hwaddr mem_base,
ret = qemu_fdt_setprop_cell(fdt, nodename,
"numa-node-id", numa_node_id);
}
+
+ /*
+ * Firmware has no way of differentiating the memory nodes currently
+ * and in the case of device memory nodes this is a problem if Guest
+ * boots with ACPI as these nodes might get exposed to Guest Kernel
+ * via UEFI GetMemoryMap() as early boot memory. This will prevent
+ * the memory being hot-unpluggable. To address this, an additional
+ * "hotpluggable" property is introduced here, similar to the
+ * MEM_AFFINITY_HOTPLUGGABLE flag used in ACPI SRAT table.
+ * Firmware can now check for "hotpluggable" property in the memory
+ * node and treat them differently.
+ */
+
+ if (hotplug) {
+ ret = qemu_fdt_setprop(fdt, nodename, "hotpluggable", NULL, 0);
+ }
out:
g_free(nodename);
return ret;
@@ -602,7 +618,7 @@ int arm_load_dtb(hwaddr addr, const struct arm_boot_info
*binfo,
for (i = 0; i < nb_numa_nodes; i++) {
mem_len = numa_info[i].node_mem;
rc = fdt_add_memory_node(fdt, acells, mem_base,
- scells, mem_len, i);
+ scells, mem_len, i, false);
if (rc < 0) {
fprintf(stderr, "couldn't add /address@hidden"PRIx64" node\n",
mem_base);
@@ -613,7 +629,7 @@ int arm_load_dtb(hwaddr addr, const struct arm_boot_info
*binfo,
}
} else {
rc = fdt_add_memory_node(fdt, acells, binfo->loader_start,
- scells, binfo->ram_size, -1);
+ scells, binfo->ram_size, -1, false);
if (rc < 0) {
fprintf(stderr, "couldn't add /address@hidden"PRIx64" node\n",
binfo->loader_start);
--
2.7.4
- [Qemu-devel] [PATCH v4 0/8] ARM virt: ACPI memory hotplug support, Shameer Kolothum, 2019/04/09
- [Qemu-devel] [PATCH v4 1/8] hw/acpi: Make ACPI IO address space configurable, Shameer Kolothum, 2019/04/09
- [Qemu-devel] [PATCH v4 2/8] hw/acpi: Do not create memory hotplug method when handler is not defined, Shameer Kolothum, 2019/04/09
- [Qemu-devel] [PATCH v4 3/8] hw/acpi: Add ACPI Generic Event Device Support, Shameer Kolothum, 2019/04/09
- [Qemu-devel] [PATCH v4 4/8] hw/arm/virt: Add memory hotplug framework, Shameer Kolothum, 2019/04/09
- [Qemu-devel] [PATCH v4 5/8] hw/arm/virt: Enable device memory cold/hot plug with ACPI boot, Shameer Kolothum, 2019/04/09
- [Qemu-devel] [PATCH v4 6/8] hw/arm/virt-acpi-build: Add PC-DIMM in SRAT, Shameer Kolothum, 2019/04/09
- [Qemu-devel] [PATCH v4 7/8] hw/arm/boot: Add "hotpluggable" property to DT memory node,
Shameer Kolothum <=
- [Qemu-devel] [PATCH v4 8/8] hw/arm/boot: Expose the PC-DIMM nodes in the DT, Shameer Kolothum, 2019/04/09