|
|
586cba |
From 3b05d3464945295112b5d02d142422f524a52054 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 03/16] hw/arm/virt: Consider SMP configuration in CPU topology
|
|
|
586cba |
|
|
|
586cba |
RH-Author: Gavin Shan <gshan@redhat.com>
|
|
|
586cba |
RH-MergeRequest: 86: hw/arm/virt: Fix the default CPU topology
|
|
|
586cba |
RH-Commit: [3/6] 7125b41f038c2b1cb33377d0ef1222f1ea42b648 (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 |
Currently, the SMP configuration isn't considered when the CPU
|
|
|
586cba |
topology is populated. In this case, it's impossible to provide
|
|
|
586cba |
the default CPU-to-NUMA mapping or association based on the socket
|
|
|
586cba |
ID of the given CPU.
|
|
|
586cba |
|
|
|
586cba |
This takes account of SMP configuration when the CPU topology
|
|
|
586cba |
is populated. The die ID for the given CPU isn't assigned since
|
|
|
586cba |
it's not supported on arm/virt machine. Besides, the used SMP
|
|
|
586cba |
configuration in qtest/numa-test/aarch64_numa_cpu() is corrcted
|
|
|
586cba |
to avoid testing failure
|
|
|
586cba |
|
|
|
586cba |
Signed-off-by: Gavin Shan <gshan@redhat.com>
|
|
|
586cba |
Reviewed-by: Yanan Wang <wangyanan55@huawei.com>
|
|
|
586cba |
Acked-by: Igor Mammedov <imammedo@redhat.com>
|
|
|
586cba |
Message-id: 20220503140304.855514-4-gshan@redhat.com
|
|
|
586cba |
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
|
|
|
586cba |
(cherry picked from commit c9ec4cb5e4936f980889e717524e73896b0200ed)
|
|
|
586cba |
Signed-off-by: Gavin Shan <gshan@redhat.com>
|
|
|
586cba |
---
|
|
|
586cba |
hw/arm/virt.c | 15 ++++++++++++++-
|
|
|
586cba |
1 file changed, 14 insertions(+), 1 deletion(-)
|
|
|
586cba |
|
|
|
586cba |
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
|
|
|
586cba |
index 8be12e121d..a87c8d396a 100644
|
|
|
586cba |
--- a/hw/arm/virt.c
|
|
|
586cba |
+++ b/hw/arm/virt.c
|
|
|
586cba |
@@ -2553,6 +2553,7 @@ static const CPUArchIdList *virt_possible_cpu_arch_ids(MachineState *ms)
|
|
|
586cba |
int n;
|
|
|
586cba |
unsigned int max_cpus = ms->smp.max_cpus;
|
|
|
586cba |
VirtMachineState *vms = VIRT_MACHINE(ms);
|
|
|
586cba |
+ MachineClass *mc = MACHINE_GET_CLASS(vms);
|
|
|
586cba |
|
|
|
586cba |
if (ms->possible_cpus) {
|
|
|
586cba |
assert(ms->possible_cpus->len == max_cpus);
|
|
|
586cba |
@@ -2566,8 +2567,20 @@ static const CPUArchIdList *virt_possible_cpu_arch_ids(MachineState *ms)
|
|
|
586cba |
ms->possible_cpus->cpus[n].type = ms->cpu_type;
|
|
|
586cba |
ms->possible_cpus->cpus[n].arch_id =
|
|
|
586cba |
virt_cpu_mp_affinity(vms, n);
|
|
|
586cba |
+
|
|
|
586cba |
+ assert(!mc->smp_props.dies_supported);
|
|
|
586cba |
+ ms->possible_cpus->cpus[n].props.has_socket_id = true;
|
|
|
586cba |
+ ms->possible_cpus->cpus[n].props.socket_id =
|
|
|
586cba |
+ n / (ms->smp.clusters * ms->smp.cores * ms->smp.threads);
|
|
|
586cba |
+ ms->possible_cpus->cpus[n].props.has_cluster_id = true;
|
|
|
586cba |
+ ms->possible_cpus->cpus[n].props.cluster_id =
|
|
|
586cba |
+ (n / (ms->smp.cores * ms->smp.threads)) % ms->smp.clusters;
|
|
|
586cba |
+ ms->possible_cpus->cpus[n].props.has_core_id = true;
|
|
|
586cba |
+ ms->possible_cpus->cpus[n].props.core_id =
|
|
|
586cba |
+ (n / ms->smp.threads) % ms->smp.cores;
|
|
|
586cba |
ms->possible_cpus->cpus[n].props.has_thread_id = true;
|
|
|
586cba |
- ms->possible_cpus->cpus[n].props.thread_id = n;
|
|
|
586cba |
+ ms->possible_cpus->cpus[n].props.thread_id =
|
|
|
586cba |
+ n % ms->smp.threads;
|
|
|
586cba |
}
|
|
|
586cba |
return ms->possible_cpus;
|
|
|
586cba |
}
|
|
|
586cba |
--
|
|
|
586cba |
2.31.1
|
|
|
586cba |
|