Distinguish between the 2 levels of vCPU execution loops: - "Outer vCPU loop" handles CPU events in vCPU thread - "Inner vCPU loop" handles actual vCPU execution This helps following the same pattern between all our accelerators. Signed-off-by: Philippe Mathieu-Daudé --- accel/dummy-cpus.c | 1 + accel/hvf/hvf-accel-ops.c | 1 + accel/kvm/kvm-accel-ops.c | 1 + accel/kvm/kvm-all.c | 1 + accel/mshv/mshv-all.c | 2 ++ accel/tcg/tcg-accel-ops-mttcg.c | 1 + accel/whpx/whpx-accel-ops.c | 1 + target/arm/hvf/hvf.c | 1 + target/arm/whpx/whpx-all.c | 6 +++--- target/i386/hvf/hvf.c | 1 + target/i386/nvmm/nvmm-accel-ops.c | 1 + target/i386/whpx/whpx-all.c | 1 + 12 files changed, 15 insertions(+), 3 deletions(-) diff --git a/accel/dummy-cpus.c b/accel/dummy-cpus.c index 5752f6302c8..f9a8d5fff07 100644 --- a/accel/dummy-cpus.c +++ b/accel/dummy-cpus.c @@ -42,6 +42,7 @@ static void *dummy_cpu_thread_fn(void *arg) cpu_thread_signal_created(cpu); qemu_guest_random_seed_thread_part2(cpu->random_seed); + /* Outer vCPU loop */ do { qemu_process_cpu_events(cpu); bql_unlock(); diff --git a/accel/hvf/hvf-accel-ops.c b/accel/hvf/hvf-accel-ops.c index d2276d8513e..d8fc7be707f 100644 --- a/accel/hvf/hvf-accel-ops.c +++ b/accel/hvf/hvf-accel-ops.c @@ -172,6 +172,7 @@ static void *hvf_cpu_thread_fn(void *arg) cpu_thread_signal_created(cpu); qemu_guest_random_seed_thread_part2(cpu->random_seed); + /* Outer vCPU loop */ do { qemu_process_cpu_events(cpu); if (cpu_can_run(cpu)) { diff --git a/accel/kvm/kvm-accel-ops.c b/accel/kvm/kvm-accel-ops.c index c8e7aa38709..73ff93aab67 100644 --- a/accel/kvm/kvm-accel-ops.c +++ b/accel/kvm/kvm-accel-ops.c @@ -47,6 +47,7 @@ static void *kvm_vcpu_thread_fn(void *arg) cpu_thread_signal_created(cpu); qemu_guest_random_seed_thread_part2(cpu->random_seed); + /* Outer vCPU loop */ do { qemu_process_cpu_events(cpu); diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index 83cbd120a84..b74c7f96866 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -3438,6 +3438,7 @@ int kvm_cpu_exec(CPUState *cpu) bql_unlock(); cpu_exec_start(cpu); + /* Inner vCPU loop */ do { MemTxAttrs attrs; diff --git a/accel/mshv/mshv-all.c b/accel/mshv/mshv-all.c index 72721d0f0de..af172a8ee34 100644 --- a/accel/mshv/mshv-all.c +++ b/accel/mshv/mshv-all.c @@ -616,6 +616,7 @@ static int mshv_cpu_exec(CPUState *cpu) bql_unlock(); cpu_exec_start(cpu); + /* Inner vCPU loop */ do { if (cpu->vcpu_dirty) { ret = mshv_arch_store_vcpu_state(cpu); @@ -705,6 +706,7 @@ static void *mshv_vcpu_thread(void *arg) cpu_thread_signal_created(cpu); qemu_guest_random_seed_thread_part2(cpu->random_seed); + /* Outer vCPU loop */ do { qemu_process_cpu_events(cpu); if (cpu_can_run(cpu)) { diff --git a/accel/tcg/tcg-accel-ops-mttcg.c b/accel/tcg/tcg-accel-ops-mttcg.c index 69560fdb9d8..e33e35dab3d 100644 --- a/accel/tcg/tcg-accel-ops-mttcg.c +++ b/accel/tcg/tcg-accel-ops-mttcg.c @@ -86,6 +86,7 @@ static void *mttcg_cpu_thread_fn(void *arg) cpu_thread_signal_created(cpu); qemu_guest_random_seed_thread_part2(cpu->random_seed); + /* Outer vCPU loop */ do { qemu_process_cpu_events(cpu); diff --git a/accel/whpx/whpx-accel-ops.c b/accel/whpx/whpx-accel-ops.c index ca5a119521a..535667061b3 100644 --- a/accel/whpx/whpx-accel-ops.c +++ b/accel/whpx/whpx-accel-ops.c @@ -42,6 +42,7 @@ static void *whpx_cpu_thread_fn(void *arg) cpu_thread_signal_created(cpu); qemu_guest_random_seed_thread_part2(cpu->random_seed); + /* Outer vCPU loop */ do { qemu_process_cpu_events(cpu); diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index da3ec521fc7..3eeb9f70de4 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -2600,6 +2600,7 @@ int hvf_arch_vcpu_exec(CPUState *cpu) flush_cpu_state(cpu); + /* Inner vCPU loop */ do { if (!(cpu->singlestep_flags & SSTEP_NOIRQ) && hvf_inject_interrupts(cpu)) { diff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c index 00a5de8cdc1..5e4c25bb7d5 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -407,9 +407,9 @@ int whpx_vcpu_run(CPUState *cpu) } bql_unlock(); - - cpu_exec_start(cpu); + + /* Inner vCPU loop */ do { bool advance_pc = false; if (cpu->vcpu_dirty) { @@ -495,8 +495,8 @@ int whpx_vcpu_run(CPUState *cpu) } while (!ret); cpu_exec_end(cpu); - bql_lock(); + current_cpu = cpu; if (--whpx->running_cpus == 0) { diff --git a/target/i386/hvf/hvf.c b/target/i386/hvf/hvf.c index 150598418e2..0ffa3658dc5 100644 --- a/target/i386/hvf/hvf.c +++ b/target/i386/hvf/hvf.c @@ -1009,6 +1009,7 @@ int hvf_arch_vcpu_exec(CPUState *cpu) return EXCP_HLT; } + /* Inner vCPU loop */ do { if (cpu->vcpu_dirty) { hvf_arch_put_registers(cpu); diff --git a/target/i386/nvmm/nvmm-accel-ops.c b/target/i386/nvmm/nvmm-accel-ops.c index dd5d5428b1c..da28fbe3de8 100644 --- a/target/i386/nvmm/nvmm-accel-ops.c +++ b/target/i386/nvmm/nvmm-accel-ops.c @@ -41,6 +41,7 @@ static void *qemu_nvmm_cpu_thread_fn(void *arg) cpu_thread_signal_created(cpu); qemu_guest_random_seed_thread_part2(cpu->random_seed); + /* Outer vCPU loop */ do { qemu_process_cpu_events(cpu); diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 634d5428219..b4f499905a7 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -2251,6 +2251,7 @@ int whpx_vcpu_run(CPUState *cpu) cpu_exec_start(cpu); } + /* Inner vCPU loop */ do { if (cpu->vcpu_dirty) { whpx_set_registers(cpu, WHPX_LEVEL_RUNTIME_STATE); -- 2.53.0