Blame SOURCES/kvm-hw-arm-virt-Consider-SMP-configuration-in-CPU-topolo.patch

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