On 4/19/24 11:31, Dorjoy Chowdhury wrote:
+
+ /*
+ * Instantiate a temporary CPU object to build mp_affinity
+ * of the possible CPUs.
+ */
+ cpuobj = object_new(ms->cpu_type);
+ armcpu = ARM_CPU(cpuobj);
+
for (n = 0; n < ms->possible_cpus->len; n++) {
ms->possible_cpus->cpus[n].type = ms->cpu_type;
ms->possible_cpus->cpus[n].arch_id =
- sbsa_ref_cpu_mp_affinity(sms, n);
+ sbsa_ref_cpu_mp_affinity(armcpu, n);
ms->possible_cpus->cpus[n].props.has_thread_id = true;
ms->possible_cpus->cpus[n].props.thread_id = n;
}
+
+ object_unref(cpuobj);
Why is this instantiation necessary?
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -1314,8 +1314,18 @@ static void arm_cpu_dump_state(CPUState *cs, FILE *f,
int flags)
}
}
-uint64_t arm_build_mp_affinity(int idx, uint8_t clustersz)
+uint64_t arm_build_mp_affinity(ARMCPU *cpu, int idx, uint8_t clustersz)
{
+ if (cpu->has_smt) {
+ /*
+ * Right now, the ARM CPUs with SMT supported by QEMU only have
+ * one thread per core. So Aff0 is always 0.
+ */
Well, this isn't true.
-smp
[[cpus=]n][,maxcpus=maxcpus][,drawers=drawers][,books=books][,sockets=sockets]
[,dies=dies][,clusters=clusters][,cores=cores][,threads=threads]
I would expect all of Aff[0-3] to be settable with the proper topology
parameters.
r~