Message ID | 20240428221450.26460-8-philmd@linaro.org |
---|---|
State | New |
Headers | show |
Series | exec: Rework around CPUState user fields (part 2) | expand |
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é <philmd@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.henderson@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); > }
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); }
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é <philmd@linaro.org> --- accel/tcg/tcg-accel-ops.c | 2 ++ system/cpus.c | 3 --- 2 files changed, 2 insertions(+), 3 deletions(-)