KVM: VMX: do not overwrite uptodate vcpu->arch.cr3 on KVM_SET_SREGS
authorMarcelo Tosatti <[email protected]>
Mon, 6 Jun 2011 17:27:47 +0000 (14:27 -0300)
committerAvi Kivity <[email protected]>
Sun, 19 Jun 2011 16:23:13 +0000 (19:23 +0300)
Only decache guest CR3 value if vcpu->arch.cr3 is stale.
Fixes loadvm with live guest.

Signed-off-by: Marcelo Tosatti <[email protected]>
Tested-by: Markus Schade <[email protected]>
Signed-off-by: Avi Kivity <[email protected]>
arch/x86/kvm/vmx.c

index 4c3fa0f6746970cef9bb5d26e5808d8bbdabcb1f..d48ec60ea421a8211271195db0193bc42a9a7532 100644 (file)
@@ -2047,7 +2047,8 @@ static void ept_update_paging_mode_cr0(unsigned long *hw_cr0,
                                        unsigned long cr0,
                                        struct kvm_vcpu *vcpu)
 {
-       vmx_decache_cr3(vcpu);
+       if (!test_bit(VCPU_EXREG_CR3, (ulong *)&vcpu->arch.regs_avail))
+               vmx_decache_cr3(vcpu);
        if (!(cr0 & X86_CR0_PG)) {
                /* From paging/starting to nonpaging */
                vmcs_write32(CPU_BASED_VM_EXEC_CONTROL,