diff options
author | Bibo Mao <maobibo@loongson.cn> | 2024-03-19 10:26:06 +0800 |
---|---|---|
committer | Song Gao <gaosong@loongson.cn> | 2024-05-09 15:17:56 +0800 |
commit | f532cf013133320045b8588c2f62fc847902fd18 (patch) | |
tree | 66698a4732b1225f9d4a36234f6b50296792c3ab | |
parent | 4e66a08546a2588a4667766a1edab9caccf24ce3 (diff) | |
download | qemu-f532cf013133320045b8588c2f62fc847902fd18.zip qemu-f532cf013133320045b8588c2f62fc847902fd18.tar.gz qemu-f532cf013133320045b8588c2f62fc847902fd18.tar.bz2 |
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>
-rw-r--r-- | hw/loongarch/virt.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c index c099987..12d2005 100644 --- a/hw/loongarch/virt.c +++ b/hw/loongarch/virt.c @@ -1192,15 +1192,14 @@ virt_cpu_index_to_props(MachineState *ms, unsigned cpu_index) 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 loongarch_class_init(ObjectClass *oc, void *data) |