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é <phi...@linaro.org> --- 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; } } -- 2.47.1