From: Jan Kiszka Date: Tue, 4 May 2010 12:45:23 +0000 (-0300) Subject: kvm: synchronize state from cpu context X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=2705d56a6a7e9c7833e04d33aedbc01d2280a280;p=qemu.git kvm: synchronize state from cpu context It is not safe to retrieve the KVM internal state of a given cpu while its potentially modifying it. Queue the request to run on cpu context, similarly to qemu-kvm. Signed-off-by: Marcelo Tosatti Signed-off-by: Avi Kivity --- diff --git a/kvm-all.c b/kvm-all.c index fbd084cd6a..e76620229f 100644 --- a/kvm-all.c +++ b/kvm-all.c @@ -796,14 +796,22 @@ void kvm_flush_coalesced_mmio_buffer(void) #endif } -void kvm_cpu_synchronize_state(CPUState *env) +static void do_kvm_cpu_synchronize_state(void *_env) { + CPUState *env = _env; + if (!env->kvm_vcpu_dirty) { kvm_arch_get_registers(env); env->kvm_vcpu_dirty = 1; } } +void kvm_cpu_synchronize_state(CPUState *env) +{ + if (!env->kvm_vcpu_dirty) + run_on_cpu(env, do_kvm_cpu_synchronize_state, env); +} + void kvm_cpu_synchronize_post_reset(CPUState *env) { kvm_arch_put_registers(env, KVM_PUT_RESET_STATE);