thebeanogamer / rpms / qemu-kvm

Forked from rpms/qemu-kvm 5 months ago
Clone
586cba
From 14e49ad3b98f01c1ad6fe456469d40a96a43dc3c Mon Sep 17 00:00:00 2001
586cba
From: Gavin Shan <gshan@redhat.com>
586cba
Date: Wed, 11 May 2022 18:01:35 +0800
586cba
Subject: [PATCH 05/16] hw/arm/virt: Fix CPU's default NUMA node ID
586cba
586cba
RH-Author: Gavin Shan <gshan@redhat.com>
586cba
RH-MergeRequest: 86: hw/arm/virt: Fix the default CPU topology
586cba
RH-Commit: [5/6] 5336f62bc0c53c0417db1d71ef89544907bc28c0 (gwshan/qemu-rhel-9)
586cba
RH-Bugzilla: 2041823
586cba
RH-Acked-by: Eric Auger <eric.auger@redhat.com>
586cba
RH-Acked-by: Cornelia Huck <cohuck@redhat.com>
586cba
RH-Acked-by: Andrew Jones <drjones@redhat.com>
586cba
586cba
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2041823
586cba
586cba
When CPU-to-NUMA association isn't explicitly provided by users,
586cba
the default one is given by mc->get_default_cpu_node_id(). However,
586cba
the CPU topology isn't fully considered in the default association
586cba
and this causes CPU topology broken warnings on booting Linux guest.
586cba
586cba
For example, the following warning messages are observed when the
586cba
Linux guest is booted with the following command lines.
586cba
586cba
/home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \
586cba
-accel kvm -machine virt,gic-version=host \
586cba
-cpu host \
586cba
-smp 6,sockets=2,cores=3,threads=1 \
586cba
-m 1024M,slots=16,maxmem=64G \
586cba
-object memory-backend-ram,id=mem0,size=128M \
586cba
-object memory-backend-ram,id=mem1,size=128M \
586cba
-object memory-backend-ram,id=mem2,size=128M \
586cba
-object memory-backend-ram,id=mem3,size=128M \
586cba
-object memory-backend-ram,id=mem4,size=128M \
586cba
-object memory-backend-ram,id=mem4,size=384M \
586cba
-numa node,nodeid=0,memdev=mem0 \
586cba
-numa node,nodeid=1,memdev=mem1 \
586cba
-numa node,nodeid=2,memdev=mem2 \
586cba
-numa node,nodeid=3,memdev=mem3 \
586cba
-numa node,nodeid=4,memdev=mem4 \
586cba
-numa node,nodeid=5,memdev=mem5
586cba
:
586cba
alternatives: patching kernel code
586cba
BUG: arch topology borken
586cba
the CLS domain not a subset of the MC domain
586cba
<the above error log repeats>
586cba
BUG: arch topology borken
586cba
the DIE domain not a subset of the NODE domain
586cba
586cba
With current implementation of mc->get_default_cpu_node_id(),
586cba
CPU#0 to CPU#5 are associated with NODE#0 to NODE#5 separately.
586cba
That's incorrect because CPU#0/1/2 should be associated with same
586cba
NUMA node because they're seated in same socket.
586cba
586cba
This fixes the issue by considering the socket ID when the default
586cba
CPU-to-NUMA association is provided in virt_possible_cpu_arch_ids().
586cba
With this applied, no more CPU topology broken warnings are seen
586cba
from the Linux guest. The 6 CPUs are associated with NODE#0/1, but
586cba
there are no CPUs associated with NODE#2/3/4/5.
586cba
586cba
Signed-off-by: Gavin Shan <gshan@redhat.com>
586cba
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
586cba
Reviewed-by: Yanan Wang <wangyanan55@huawei.com>
586cba
Message-id: 20220503140304.855514-6-gshan@redhat.com
586cba
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
586cba
(cherry picked from commit 4c18bc192386dfbca530e7f550e0992df657818a)
586cba
Signed-off-by: Gavin Shan <gshan@redhat.com>
586cba
---
586cba
 hw/arm/virt.c | 4 +++-
586cba
 1 file changed, 3 insertions(+), 1 deletion(-)
586cba
586cba
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
586cba
index a87c8d396a..95d012d6eb 100644
586cba
--- a/hw/arm/virt.c
586cba
+++ b/hw/arm/virt.c
586cba
@@ -2545,7 +2545,9 @@ virt_cpu_index_to_props(MachineState *ms, unsigned cpu_index)
586cba
 
586cba
 static int64_t virt_get_default_cpu_node_id(const MachineState *ms, int idx)
586cba
 {
586cba
-    return idx % ms->numa_state->num_nodes;
586cba
+    int64_t socket_id = ms->possible_cpus->cpus[idx].props.socket_id;
586cba
+
586cba
+    return socket_id % ms->numa_state->num_nodes;
586cba
 }
586cba
 
586cba
 static const CPUArchIdList *virt_possible_cpu_arch_ids(MachineState *ms)
586cba
-- 
586cba
2.31.1
586cba