[RFC PATCH RESEND 40/42] accel/split: Call TCGCPUOps::rebuild_tb_hflags()

Philippe Mathieu-Daudé posted 42 patches 4 months, 3 weeks ago
[RFC PATCH RESEND 40/42] accel/split: Call TCGCPUOps::rebuild_tb_hflags()
Posted by Philippe Mathieu-Daudé 4 months, 3 weeks ago
Call TCG rebuild_tb_hflags() when transitioning from
hardware accelerator to TCG.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 accel/split/split-accel-ops.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/accel/split/split-accel-ops.c b/accel/split/split-accel-ops.c
index 615faf1d96b..4b058034252 100644
--- a/accel/split/split-accel-ops.c
+++ b/accel/split/split-accel-ops.c
@@ -40,6 +40,8 @@ static void *split_cpu_thread_routine(void *arg)
     assert(swc->allowed);
     assert(hwc->allowed);
 
+    assert(swops->rebuild_tcg_tb_flags);
+
     rcu_register_thread();
     sw_force_rcu = mttcg_vcpu_register(cpu);
 
@@ -69,6 +71,7 @@ static void *split_cpu_thread_routine(void *arg)
                 r = hwops->exec_vcpu_thread(cpu);
                 trace_accel_split_exec_vcpu_thread_hw(r);
             } else {
+                swops->rebuild_tcg_tb_flags(cpu);
                 r = swops->exec_vcpu_thread(cpu);
                 trace_accel_split_exec_vcpu_thread_sw(r);
             }
-- 
2.49.0


Re: [RFC PATCH RESEND 40/42] accel/split: Call TCGCPUOps::rebuild_tb_hflags()
Posted by Richard Henderson 4 months, 3 weeks ago
On 6/20/25 10:27, Philippe Mathieu-Daudé wrote:
> Call TCG rebuild_tb_hflags() when transitioning from
> hardware accelerator to TCG.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   accel/split/split-accel-ops.c | 3 +++
>   1 file changed, 3 insertions(+)
> 
> diff --git a/accel/split/split-accel-ops.c b/accel/split/split-accel-ops.c
> index 615faf1d96b..4b058034252 100644
> --- a/accel/split/split-accel-ops.c
> +++ b/accel/split/split-accel-ops.c
> @@ -40,6 +40,8 @@ static void *split_cpu_thread_routine(void *arg)
>       assert(swc->allowed);
>       assert(hwc->allowed);
>   
> +    assert(swops->rebuild_tcg_tb_flags);
> +
>       rcu_register_thread();
>       sw_force_rcu = mttcg_vcpu_register(cpu);
>   
> @@ -69,6 +71,7 @@ static void *split_cpu_thread_routine(void *arg)
>                   r = hwops->exec_vcpu_thread(cpu);
>                   trace_accel_split_exec_vcpu_thread_hw(r);
>               } else {
> +                swops->rebuild_tcg_tb_flags(cpu);
>                   r = swops->exec_vcpu_thread(cpu)

You should not need to do this before every exec, only on transitions.


r~