58 lines
1.9 KiB
Diff
58 lines
1.9 KiB
Diff
|
|
From a9f9a4a0a60596f2e738e6e434c20a3f5266fa17 Mon Sep 17 00:00:00 2001
|
||
|
|
From: Bibo Mao <maobibo@loongson.cn>
|
||
|
|
Date: Tue, 19 Mar 2024 10:26:06 +0800
|
||
|
|
Subject: [PATCH 21/78] hw/loongarch: Refine default numa id calculation
|
||
|
|
|
||
|
|
With numa_test test case, there is subcase named test_def_cpu_split(),
|
||
|
|
there are 8 sockets and 2 numa nodes. Here is command line:
|
||
|
|
"-machine smp.cpus=8,smp.sockets=8 -numa node,memdev=ram -numa node"
|
||
|
|
|
||
|
|
The required result is:
|
||
|
|
node 0 cpus: 0 2 4 6
|
||
|
|
node 1 cpus: 1 3 5 7
|
||
|
|
Test case numa_test fails on LoongArch, since the actual result is:
|
||
|
|
node 0 cpus: 0 1 2 3
|
||
|
|
node 1 cpus: 4 5 6 7
|
||
|
|
|
||
|
|
It will be better if all the cpus in one socket share the same numa
|
||
|
|
node. Here socket id is used to calculate numa id in function
|
||
|
|
virt_get_default_cpu_node_id().
|
||
|
|
|
||
|
|
Signed-off-by: Bibo Mao <maobibo@loongson.cn>
|
||
|
|
Reviewed-by: Song Gao <gaosong@loongson.cn>
|
||
|
|
Message-Id: <20240319022606.2994565-1-maobibo@loongson.cn>
|
||
|
|
Signed-off-by: Song Gao <gaosong@loongson.cn>
|
||
|
|
Signed-off-by: Xianglai Li <lixianglai@loongson.cn>
|
||
|
|
---
|
||
|
|
hw/loongarch/virt.c | 11 +++++------
|
||
|
|
1 file changed, 5 insertions(+), 6 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c
|
||
|
|
index e39989193e..e82e3b6792 100644
|
||
|
|
--- a/hw/loongarch/virt.c
|
||
|
|
+++ b/hw/loongarch/virt.c
|
||
|
|
@@ -1278,15 +1278,14 @@ static CpuInstanceProperties virt_cpu_index_to_props(MachineState *ms,
|
||
|
|
|
||
|
|
static int64_t virt_get_default_cpu_node_id(const MachineState *ms, int idx)
|
||
|
|
{
|
||
|
|
- int64_t nidx = 0;
|
||
|
|
+ int64_t socket_id;
|
||
|
|
|
||
|
|
if (ms->numa_state->num_nodes) {
|
||
|
|
- nidx = idx / (ms->smp.cpus / ms->numa_state->num_nodes);
|
||
|
|
- if (ms->numa_state->num_nodes <= nidx) {
|
||
|
|
- nidx = ms->numa_state->num_nodes - 1;
|
||
|
|
- }
|
||
|
|
+ socket_id = ms->possible_cpus->cpus[idx].props.socket_id;
|
||
|
|
+ return socket_id % ms->numa_state->num_nodes;
|
||
|
|
+ } else {
|
||
|
|
+ return 0;
|
||
|
|
}
|
||
|
|
- return nidx;
|
||
|
|
}
|
||
|
|
|
||
|
|
static void virt_class_init(ObjectClass *oc, void *data)
|
||
|
|
--
|
||
|
|
2.39.1
|
||
|
|
|