Hi,

On 10/6/26 18:11, Peter Maydell wrote:
From: Alex Bennée <[email protected]>

With the advent of WFE and WFI we need to pay closer attention to the
reason why the vCPU may be sleeping to figure out if we should wake
it up.

Create env->halt_reason to track this and then re-order the tests so
we:

   - ignore everything is the vCPU is powered off
   - wake up if the event_register is set and we were in a WFE
   - otherwise any IRQ event does wake the vCPU up.

Reviewed-by: Richard Henderson <[email protected]>
Signed-off-by: Alex Bennée <[email protected]>
Message-id: [email protected]
Signed-off-by: Peter Maydell <[email protected]>
---
  target/arm/arm-powerctl.c  |  6 +++---
  target/arm/cpu.c           | 40 +++++++++++++++++++++++++++-----------
  target/arm/cpu.h           | 16 +++++++++++++++
  target/arm/internals.h     | 11 +++++++++++
  target/arm/kvm.c           |  5 +++--
  target/arm/machine.c       |  2 +-
  target/arm/tcg/op_helper.c |  3 +++
  7 files changed, 66 insertions(+), 17 deletions(-)

This patch updated TCG and KVM but missed HVF and WHPX:

 - target/arm/hvf/hvf.c
 - target/arm/whpx/whpx-all.c


diff --git a/target/arm/internals.h b/target/arm/internals.h
index 21cbd2b1db..b2035b9417 100644
--- a/target/arm/internals.h
+++ b/target/arm/internals.h
@@ -2063,4 +2063,15 @@ bool arm_cpu_match_cpreg_mig_tolerance(ARMCPU *cpu, 
uint64_t kvmidx,
                                         ARMCPRegMigToleranceType type);
+/**
+ * arm_set_cpu_power_state() - set power state synced with halt_reason
+ */
+static inline void arm_set_cpu_power_state(ARMCPU *cpu, ARMPSCIState state)
+{
+    CPUARMState *env = &cpu->env;
+
+    cpu->power_state = state;
+    env->halt_reason = state == PSCI_OFF ? HALT_PSCI : NOT_HALTED;
+}
+
  #endif
Why not add/use a getter()?

Reply via email to