On 9/24/25 10:40, Philippe Mathieu-Daudé wrote:
CPUXtensa::runstall and CPUState::start_powered_off are
semantically equivalent. Replace the target specific field
by the generic one.

Signed-off-by: Philippe Mathieu-Daudé <phi...@linaro.org>
---
  target/xtensa/cpu.h    | 1 -
  target/xtensa/cpu.c    | 8 ++++++--
  target/xtensa/helper.c | 6 ++++--
  3 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/target/xtensa/cpu.h b/target/xtensa/cpu.h
index 74122ebe15c..43b8cabdcd3 100644
--- a/target/xtensa/cpu.h
+++ b/target/xtensa/cpu.h
@@ -529,7 +529,6 @@ struct CPUArchState {
      xtensa_tlb_entry dtlb[10][MAX_TLB_WAY_SIZE];
      xtensa_mpu_entry mpu_fg[MAX_MPU_FOREGROUND_SEGMENTS];
      unsigned autorefill_idx;
-    bool runstall;
      AddressSpace *address_space_er;
      MemoryRegion *system_er;
      int pending_irq_level; /* level of last raised IRQ */
diff --git a/target/xtensa/cpu.c b/target/xtensa/cpu.c
index ea9b6df3aa2..65f0e778775 100644
--- a/target/xtensa/cpu.c
+++ b/target/xtensa/cpu.c
@@ -143,7 +143,7 @@ static bool xtensa_cpu_has_work(CPUState *cs)
  {
      CPUXtensaState *env = cpu_env(cs);
- return !env->runstall && env->pending_irq_level;
+    return !cs->start_powered_off && env->pending_irq_level;
  }
  #endif /* !CONFIG_USER_ONLY */
@@ -204,7 +204,11 @@ static void xtensa_cpu_reset_hold(Object *obj, ResetType type) #ifndef CONFIG_USER_ONLY
      reset_mmu(env);
-    cs->halted = env->runstall;
+    if (cs->start_powered_off) {
+        cs->halted = 1;
+    } else {
+        cs->halted = 0;
+    }

This would of course be

  cs->halted = cs->start_powered_off;

though I'm a bit surprised that such generic fields must
be handled in target-specific code.


  #endif
      /* For inf * 0 + NaN, return the input NaN */
      set_float_infzeronan_rule(float_infzeronan_dnan_never, &env->fp_status);
diff --git a/target/xtensa/helper.c b/target/xtensa/helper.c
index 2d93b45036d..a64df1cadac 100644
--- a/target/xtensa/helper.c
+++ b/target/xtensa/helper.c
@@ -311,11 +311,13 @@ void xtensa_runstall(CPUXtensaState *env, bool runstall)
  {
      CPUState *cpu = env_cpu(env);
- env->runstall = runstall;
-    cpu->halted = runstall;
      if (runstall) {
+        cpu->start_powered_off = true;
+        cpu->halted = 1;
          cpu_interrupt(cpu, CPU_INTERRUPT_HALT);
      } else {
+        cpu->start_powered_off = false;
+        cpu->halted = 0;
          qemu_cpu_kick(cpu);
      }
  }

Why this change?


r~


Reply via email to