diff options
author | Avi Kivity <avi@redhat.com> | 2009-08-17 23:19:53 +0300 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-08-27 20:35:30 -0500 |
commit | 4c0960c0c483fffc5f8e1dab169d946ac295bf44 (patch) | |
tree | 1dd3a77d60b3aa96132741326bdb3a8e66fa95c8 /kvm-all.c | |
parent | 09aaa1602f9381c0e0fb539390b1793e51bdfc7b (diff) |
kvm: Simplify cpu_synchronize_state()
cpu_synchronize_state() is a little unreadable since the 'modified'
argument isn't self-explanatory. Simplify it by making it always
synchronize the kernel state into qemu, and automatically flush the
registers back to the kernel if they've been synchronized on this
exit.
Signed-off-by: Avi Kivity <avi@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'kvm-all.c')
-rw-r--r-- | kvm-all.c | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -57,6 +57,7 @@ struct KVMState KVMSlot slots[32]; int fd; int vmfd; + int regs_modified; int coalesced_mmio; int broken_set_mem_region; int migration_log; @@ -576,6 +577,14 @@ static void kvm_run_coalesced_mmio(CPUState *env, struct kvm_run *run) #endif } +void kvm_cpu_synchronize_state(CPUState *env) +{ + if (!env->kvm_state->regs_modified) { + kvm_arch_get_registers(env); + env->kvm_state->regs_modified = 1; + } +} + int kvm_cpu_exec(CPUState *env) { struct kvm_run *run = env->kvm_run; @@ -590,6 +599,11 @@ int kvm_cpu_exec(CPUState *env) break; } + if (env->kvm_state->regs_modified) { + kvm_arch_put_registers(env); + env->kvm_state->regs_modified = 0; + } + kvm_arch_pre_run(env, run); ret = kvm_vcpu_ioctl(env, KVM_RUN, 0); kvm_arch_post_run(env, run); |