diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-07-13 20:30:49 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-07-13 20:30:49 -0400 |
commit | 177dd7e1ebac9420636f155e8d429bc4f809c724 (patch) | |
tree | e68acbf2dcab6848e46700ac14a4b6d902bc1749 /arch | |
parent | 1c5474a65bf15a4cb162dfff86d6d0b5a08a740c (diff) | |
parent | 91546356d0e550fa23abf7f4b04a903c2855761f (diff) |
Merge branch 'kvm-updates/2.6.35' of git://git.kernel.org/pub/scm/virt/kvm/kvm
* 'kvm-updates/2.6.35' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
KVM: MMU: flush remote tlbs when overwriting spte with different pfn
KVM: VMX: Fix host MSR_KERNEL_GS_BASE corruption
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/kvm/mmu.c | 2 | ||||
-rw-r--r-- | arch/x86/kvm/vmx.c | 7 |
2 files changed, 4 insertions, 5 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index a6f695d76928..3699613e8830 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
@@ -1879,6 +1879,8 @@ static void mmu_set_spte(struct kvm_vcpu *vcpu, u64 *sptep, | |||
1879 | pgprintk("hfn old %lx new %lx\n", | 1879 | pgprintk("hfn old %lx new %lx\n", |
1880 | spte_to_pfn(*sptep), pfn); | 1880 | spte_to_pfn(*sptep), pfn); |
1881 | rmap_remove(vcpu->kvm, sptep); | 1881 | rmap_remove(vcpu->kvm, sptep); |
1882 | __set_spte(sptep, shadow_trap_nonpresent_pte); | ||
1883 | kvm_flush_remote_tlbs(vcpu->kvm); | ||
1882 | } else | 1884 | } else |
1883 | was_rmapped = 1; | 1885 | was_rmapped = 1; |
1884 | } | 1886 | } |
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 859a01a07dbf..ee03679efe78 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
@@ -1744,18 +1744,15 @@ static void enter_lmode(struct kvm_vcpu *vcpu) | |||
1744 | (guest_tr_ar & ~AR_TYPE_MASK) | 1744 | (guest_tr_ar & ~AR_TYPE_MASK) |
1745 | | AR_TYPE_BUSY_64_TSS); | 1745 | | AR_TYPE_BUSY_64_TSS); |
1746 | } | 1746 | } |
1747 | vcpu->arch.efer |= EFER_LMA; | 1747 | vmx_set_efer(vcpu, vcpu->arch.efer | EFER_LMA); |
1748 | vmx_set_efer(vcpu, vcpu->arch.efer); | ||
1749 | } | 1748 | } |
1750 | 1749 | ||
1751 | static void exit_lmode(struct kvm_vcpu *vcpu) | 1750 | static void exit_lmode(struct kvm_vcpu *vcpu) |
1752 | { | 1751 | { |
1753 | vcpu->arch.efer &= ~EFER_LMA; | ||
1754 | |||
1755 | vmcs_write32(VM_ENTRY_CONTROLS, | 1752 | vmcs_write32(VM_ENTRY_CONTROLS, |
1756 | vmcs_read32(VM_ENTRY_CONTROLS) | 1753 | vmcs_read32(VM_ENTRY_CONTROLS) |
1757 | & ~VM_ENTRY_IA32E_MODE); | 1754 | & ~VM_ENTRY_IA32E_MODE); |
1758 | vmx_set_efer(vcpu, vcpu->arch.efer); | 1755 | vmx_set_efer(vcpu, vcpu->arch.efer & ~EFER_LMA); |
1759 | } | 1756 | } |
1760 | 1757 | ||
1761 | #endif | 1758 | #endif |