All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] hw/arm/boot: Use NUMA node ID in memory node name
@ 2021-06-01  7:30 Gavin Shan
  2021-06-01  7:50 ` Andrew Jones
  0 siblings, 1 reply; 11+ messages in thread
From: Gavin Shan @ 2021-06-01  7:30 UTC (permalink / raw)
  To: qemu-arm; +Cc: peter.maydell, drjones, qemu-devel, shan.gavin, eric.auger

We possibly populate empty nodes where memory isn't included and might
be hot added at late time. The FDT memory nodes can't be created due
to conflicts on their names if multiple empty nodes are specified.
For example, the VM fails to start with the following error messages.

  /home/gavin/sandbox/qemu.main/build/qemu-system-aarch64          \
  -accel kvm -machine virt,gic-version=host                        \
  -cpu host -smp 4,sockets=2,cores=2,threads=1 -m 1024M,maxmem=64G \
  -object memory-backend-ram,id=mem0,size=512M                     \
  -object memory-backend-ram,id=mem1,size=512M                     \
  -numa node,nodeid=0,cpus=0-1,memdev=mem0                         \
  -numa node,nodeid=1,cpus=2-3,memdev=mem1                         \
  -numa node,nodeid=2                                              \
  -numa node,nodeid=3                                              \
    :
  -device virtio-balloon-pci,id=balloon0,free-page-reporting=yes

  qemu-system-aarch64: FDT: Failed to create subnode /memory@80000000: \
                       FDT_ERR_EXISTS

This fixes the issue by using NUMA node ID or zero in the memory node
name to avoid the conflicting memory node names. With this applied, the
VM can boot successfully with above command lines.

Signed-off-by: Gavin Shan <gshan@redhat.com>
---
 hw/arm/boot.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/hw/arm/boot.c b/hw/arm/boot.c
index d7b059225e..3169bdf595 100644
--- a/hw/arm/boot.c
+++ b/hw/arm/boot.c
@@ -432,7 +432,12 @@ static int fdt_add_memory_node(void *fdt, uint32_t acells, hwaddr mem_base,
     char *nodename;
     int ret;
 
-    nodename = g_strdup_printf("/memory@%" PRIx64, mem_base);
+    if (numa_node_id >= 0) {
+        nodename = g_strdup_printf("/memory@%d", numa_node_id);
+    } else {
+        nodename = g_strdup("/memory@0");
+    }
+
     qemu_fdt_add_subnode(fdt, nodename);
     qemu_fdt_setprop_string(fdt, nodename, "device_type", "memory");
     ret = qemu_fdt_setprop_sized_cells(fdt, nodename, "reg", acells, mem_base,
-- 
2.23.0



^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2021-06-24  1:43 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-01  7:30 [PATCH] hw/arm/boot: Use NUMA node ID in memory node name Gavin Shan
2021-06-01  7:50 ` Andrew Jones
2021-06-02  1:09   ` Gavin Shan
2021-06-02 11:36     ` Andrew Jones
2021-06-03  4:48       ` Gavin Shan
2021-06-22  8:53         ` Gavin Shan
2021-06-22  7:13           ` Andrew Jones
2021-06-23  4:43             ` Gavin Shan
2021-06-23  8:07               ` Andrew Jones
2021-06-23  8:16                 ` Andrew Jones
2021-06-24  3:43                   ` Gavin Shan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.