]> git.proxmox.com Git - mirror_qemu.git/commitdiff
accel/tcg: Introduce TCGCPUOps::cpu_exec_halt() handler
authorPhilippe Mathieu-Daudé <philmd@linaro.org>
Wed, 24 Jan 2024 10:16:38 +0000 (11:16 +0100)
committerRichard Henderson <richard.henderson@linaro.org>
Mon, 29 Jan 2024 11:04:10 +0000 (21:04 +1000)
In order to make accel/tcg/ target agnostic,
introduce the cpu_exec_halt() handler.

Reviewed-by: Anton Johansson <anjo@rev.ng>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-Id: <20240124101639.30056-9-philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
accel/tcg/cpu-exec.c
include/hw/core/tcg-cpu-ops.h

index 75f7ba7bedb3a65b15f54912e19f40692710ae77..82627b12b8f2d20070a0dcf8af255484b07f8d52 100644 (file)
@@ -664,6 +664,8 @@ static inline bool cpu_handle_halt(CPUState *cpu)
 {
 #ifndef CONFIG_USER_ONLY
     if (cpu->halted) {
+        const TCGCPUOps *tcg_ops = cpu->cc->tcg_ops;
+
 #if defined(TARGET_I386)
         if (cpu->interrupt_request & CPU_INTERRUPT_POLL) {
             X86CPU *x86_cpu = X86_CPU(cpu);
@@ -673,6 +675,9 @@ static inline bool cpu_handle_halt(CPUState *cpu)
             bql_unlock();
         }
 #endif /* TARGET_I386 */
+        if (tcg_ops->cpu_exec_halt) {
+            tcg_ops->cpu_exec_halt(cpu);
+        }
         if (!cpu_has_work(cpu)) {
             return true;
         }
index 013867b890a1dc63753130b28d8334bd2c5eb743..bf8ff8e3eec14300562fb80a60632fed73591602 100644 (file)
@@ -112,6 +112,8 @@ struct TCGCPUOps {
     void (*do_interrupt)(CPUState *cpu);
     /** @cpu_exec_interrupt: Callback for processing interrupts in cpu_exec */
     bool (*cpu_exec_interrupt)(CPUState *cpu, int interrupt_request);
+    /** @cpu_exec_halt: Callback for handling halt in cpu_exec */
+    void (*cpu_exec_halt)(CPUState *cpu);
     /**
      * @tlb_fill: Handle a softmmu tlb miss
      *