On 4/28/24 15:14, Philippe Mathieu-Daudé wrote:
The TCG-specific code from the system generic cpu_exit()
is equivalent of tcg_cpu_exit(). Define the AccelOpsClass
exit_vcpu_thread() handler to it, making cpu_exit() generic.
Signed-off-by: Philippe Mathieu-Daudé <phi...@linaro.org>
---
accel/tcg/tcg-accel-ops.c | 2 ++
system/cpus.c | 3 ---
2 files changed, 2 insertions(+), 3 deletions(-)
Reviewed-by: Richard Henderson <richard.hender...@linaro.org>
r~
diff --git a/accel/tcg/tcg-accel-ops.c b/accel/tcg/tcg-accel-ops.c
index 7ac5f0c974..56bbad9fcd 100644
--- a/accel/tcg/tcg-accel-ops.c
+++ b/accel/tcg/tcg-accel-ops.c
@@ -43,6 +43,7 @@
#include "tcg-accel-ops-mttcg.h"
#include "tcg-accel-ops-rr.h"
#include "tcg-accel-ops-icount.h"
+#include "internal-common.h"
/* common functionality among all TCG variants */
@@ -218,6 +219,7 @@ static void tcg_accel_ops_init(AccelOpsClass *ops)
}
}
+ ops->exit_vcpu_thread = tcg_cpu_exit;
ops->cpu_reset_hold = tcg_cpu_reset_hold;
ops->supports_guest_debug = tcg_supports_guest_debug;
ops->insert_breakpoint = tcg_insert_breakpoint;
diff --git a/system/cpus.c b/system/cpus.c
index d0d585e8b9..3e86b488d3 100644
--- a/system/cpus.c
+++ b/system/cpus.c
@@ -422,9 +422,6 @@ void run_on_cpu(CPUState *cpu, run_on_cpu_func func,
run_on_cpu_data data)
void cpu_exit(CPUState *cpu)
{
qatomic_set(&cpu->exit_request, 1);
- /* Ensure cpu_exec will see the exit request after TCG has exited. */
- smp_wmb();
- qatomic_set(&cpu->neg.icount_decr.u16.high, -1);
if (cpus_accel->exit_vcpu_thread) {
cpus_accel->exit_vcpu_thread(cpu);
}