aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAvi Kivity <avi@redhat.com>2008-12-21 18:31:10 +0200
committerAvi Kivity <avi@redhat.com>2008-12-31 16:55:48 +0200
commit25e2343246fe135fce672f41abe61e9d2c38caac (patch)
tree76699895f67a24cbcdc05415068905d7e5be84c4
parentfe634fd46ff643d98fdbcd153847e08c3c076e6e (diff)
downloadmrst-s0i3-test-25e2343246fe135fce672f41abe61e9d2c38caac.tar.gz
mrst-s0i3-test-25e2343246fe135fce672f41abe61e9d2c38caac.tar.xz
mrst-s0i3-test-25e2343246fe135fce672f41abe61e9d2c38caac.zip
KVM: MMU: Don't treat a global pte as such if cr4.pge is cleared
The pte.g bit is meaningless if global pages are disabled; deferring mmu page synchronization on these ptes will lead to the guest using stale shadow ptes. Fixes Vista x86 smp bootloader failure. Signed-off-by: Avi Kivity <avi@redhat.com>
-rw-r--r--arch/x86/kvm/mmu.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
index 641c07844e6..d50ebac6a07 100644
--- a/arch/x86/kvm/mmu.c
+++ b/arch/x86/kvm/mmu.c
@@ -1669,6 +1669,8 @@ static int set_spte(struct kvm_vcpu *vcpu, u64 *shadow_pte,
u64 mt_mask = shadow_mt_mask;
struct kvm_mmu_page *sp = page_header(__pa(shadow_pte));
+ if (!(vcpu->arch.cr4 & X86_CR4_PGE))
+ global = 0;
if (!global && sp->global) {
sp->global = 0;
if (sp->unsync) {