diff options
author | Avi Kivity <avi@redhat.com> | 2008-12-21 19:27:36 +0200 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2009-03-24 11:02:51 +0200 |
commit | 2f0b3d60b2c43aef7cd10169c425c052169c622a (patch) | |
tree | 4a2afc6eee48522e380f69fc4c28abde314d3edb /arch/x86/kvm | |
parent | a770f6f28b1a9287189f3dc8333eb694d9a2f0ab (diff) | |
download | op-kernel-dev-2f0b3d60b2c43aef7cd10169c425c052169c622a.zip op-kernel-dev-2f0b3d60b2c43aef7cd10169c425c052169c622a.tar.gz |
KVM: MMU: Segregate mmu pages created with different cr4.pge settings
Don't allow a vcpu with cr4.pge cleared to use a shadow page created with
cr4.pge set; this might cause a cr3 switch not to sync ptes that have the
global bit set (the global bit has no effect if !cr4.pge).
This can only occur on smp with different cr4.pge settings for different
vcpus (since a cr4 change will resync the shadow ptes), but there's no
cost to being correct here.
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/x86/kvm')
-rw-r--r-- | arch/x86/kvm/x86.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 2477e87..873602b 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -364,6 +364,7 @@ void kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4) } kvm_x86_ops->set_cr4(vcpu, cr4); vcpu->arch.cr4 = cr4; + vcpu->arch.mmu.base_role.cr4_pge = !!(cr4 & X86_CR4_PGE); kvm_mmu_sync_global(vcpu); kvm_mmu_reset_context(vcpu); } |