aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm
diff options
context:
space:
mode:
authorJan Kiszka <jan.kiszka@siemens.com>2014-05-10 03:24:34 -0400
committerPaolo Bonzini <pbonzini@redhat.com>2014-05-12 14:04:01 -0400
commitd9f89b88f5102ce235b75a5907838e3c7ed84b97 (patch)
tree04b6aa4e625eecf1bff59dad2e69fa7426713ddf /arch/x86/kvm
parent87c00572ba05aa8c9db118da75c608f47eb10b9e (diff)
KVM: x86: Fix CR3 reserved bits check in long mode
Regression of 346874c9: PAE is set in long mode, but that does not mean we have valid PDPTRs. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch/x86/kvm')
-rw-r--r--arch/x86/kvm/x86.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 41f673facf2f..fb313fc896dd 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -701,10 +701,11 @@ int kvm_set_cr3(struct kvm_vcpu *vcpu, unsigned long cr3)
701 return 0; 701 return 0;
702 } 702 }
703 703
704 if (is_long_mode(vcpu) && (cr3 & CR3_L_MODE_RESERVED_BITS)) 704 if (is_long_mode(vcpu)) {
705 return 1; 705 if (cr3 & CR3_L_MODE_RESERVED_BITS)
706 if (is_pae(vcpu) && is_paging(vcpu) && 706 return 1;
707 !load_pdptrs(vcpu, vcpu->arch.walk_mmu, cr3)) 707 } else if (is_pae(vcpu) && is_paging(vcpu) &&
708 !load_pdptrs(vcpu, vcpu->arch.walk_mmu, cr3))
708 return 1; 709 return 1;
709 710
710 vcpu->arch.cr3 = cr3; 711 vcpu->arch.cr3 = cr3;