On 1/6/25 3:23 PM, Philippe Mathieu-Daudé wrote:
When running on a heterogeneous setup, the CPU_FOREACH() macro in arm_get_cpu_by_id() iterates on all vCPUs, regardless they are ARM or not. Check the CPU class type and skip the non-ARM instances. Signed-off-by: Philippe Mathieu-Daudé <[email protected]> ---
Reviewed-by: Daniel Henrique Barboza <[email protected]>
target/arm/arm-powerctl.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/target/arm/arm-powerctl.c b/target/arm/arm-powerctl.c index 20c70c7d6bb..a080a6ab79f 100644 --- a/target/arm/arm-powerctl.c +++ b/target/arm/arm-powerctl.c @@ -36,9 +36,11 @@ CPUState *arm_get_cpu_by_id(uint64_t id) DPRINTF("cpu %" PRId64 "\n", id);CPU_FOREACH(cpu) {- ARMCPU *armcpu = ARM_CPU(cpu); + if (!object_class_dynamic_cast((ObjectClass *)cpu->cc, TYPE_ARM_CPU)) { + continue; + }- if (arm_cpu_mp_affinity(armcpu) == id) {+ if (arm_cpu_mp_affinity((ARMCPU *)cpu) == id) { return cpu; } }
