Browse Source

accel/hvf: Guard hv_vcpu_run() between cpu_exec_start/end() calls

Similarly to 1d78a3c3ab for KVM, wrap hv_vcpu_run() with
cpu_exec_start/end(), so that the accelerator can perform
pending operations while all vCPUs are quiescent. See also
explanation in commit c265e976f4 ("cpus-common: lock-free
fast path for cpu_exec_start/end").

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
pull/307/head
Philippe Mathieu-Daudé 10 months ago
committed by Peter Maydell
parent
commit
5f34a5b642
  1. 2
      target/arm/hvf/hvf.c
  2. 4
      target/i386/hvf/hvf.c

2
target/arm/hvf/hvf.c

@ -2026,7 +2026,9 @@ int hvf_arch_vcpu_exec(CPUState *cpu)
}
bql_unlock();
cpu_exec_start(cpu);
r = hv_vcpu_run(cpu->accel->fd);
cpu_exec_end(cpu);
bql_lock();
switch (r) {
case HV_SUCCESS:

4
target/i386/hvf/hvf.c

@ -992,9 +992,13 @@ int hvf_arch_vcpu_exec(CPUState *cpu)
return EXCP_HLT;
}
cpu_exec_start(cpu);
hv_return_t r = hv_vcpu_run_until(cpu->accel->fd, HV_DEADLINE_FOREVER);
assert_hvf_ok(r);
cpu_exec_end(cpu);
ret = hvf_handle_vmexit(cpu);
} while (ret == 0);

Loading…
Cancel
Save