PSCI can update the power state of a vCPU other than the caller. Kick that vCPU after changing its state so it observes the update promptly.
Reported-by: Paolo Bonzini <[email protected]> Signed-off-by: Philippe Mathieu-Daudé <[email protected]> --- target/arm/arm-powerctl.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/target/arm/arm-powerctl.c b/target/arm/arm-powerctl.c index 213e7ae056c..1bd8a549cc9 100644 --- a/target/arm/arm-powerctl.c +++ b/target/arm/arm-powerctl.c @@ -48,9 +48,14 @@ struct CpuOnInfo { void arm_set_cpu_power_state(ARMCPU *cpu, ARMPSCIState state) { CPUARMState *env = &cpu->env; + CPUState *cs = CPU(cpu); cpu->power_state = state; env->halt_reason = state == PSCI_OFF ? HALT_PSCI : NOT_HALTED; + + if (!qemu_cpu_is_self(cs)) { + qemu_cpu_kick(cs); + } } static void arm_set_cpu_on_async_work(CPUState *target_cpu_state, -- 2.53.0
