diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2007-07-17 09:34:16 -0400 |
---|---|---|
committer | Avi Kivity <avi@qumranet.com> | 2007-10-13 04:18:18 -0400 |
commit | 66aee91aaab8f998d28a61ed7733be17ad8e6d8f (patch) | |
tree | f3cd552c4a176cbba0929788b03867cb33d7b5b5 /drivers/kvm/vmx.c | |
parent | f802a307cb2cabdd0c6b48067dbe901d6fe27246 (diff) |
KVM: Use standard CR4 flags, tighten checking
On this machine (Intel), writing to the CR4 bits 0x00000800 and
0x00001000 cause a GPF. The Intel manual is a little unclear, but
AFIACT they're reserved, too.
Also fix spelling of CR4_RESEVED_BITS.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Avi Kivity <avi@qumranet.com>
Diffstat (limited to 'drivers/kvm/vmx.c')
-rw-r--r-- | drivers/kvm/vmx.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/kvm/vmx.c b/drivers/kvm/vmx.c index ebd93b4775af..f3e78187e892 100644 --- a/drivers/kvm/vmx.c +++ b/drivers/kvm/vmx.c | |||
@@ -764,7 +764,7 @@ static void hardware_enable(void *garbage) | |||
764 | if ((old & 5) != 5) | 764 | if ((old & 5) != 5) |
765 | /* enable and lock */ | 765 | /* enable and lock */ |
766 | wrmsrl(MSR_IA32_FEATURE_CONTROL, old | 5); | 766 | wrmsrl(MSR_IA32_FEATURE_CONTROL, old | 5); |
767 | write_cr4(read_cr4() | CR4_VMXE); /* FIXME: not cpu hotplug safe */ | 767 | write_cr4(read_cr4() | X86_CR4_VMXE); /* FIXME: not cpu hotplug safe */ |
768 | asm volatile (ASM_VMX_VMXON_RAX : : "a"(&phys_addr), "m"(phys_addr) | 768 | asm volatile (ASM_VMX_VMXON_RAX : : "a"(&phys_addr), "m"(phys_addr) |
769 | : "memory", "cc"); | 769 | : "memory", "cc"); |
770 | } | 770 | } |
@@ -879,8 +879,8 @@ static void enter_pmode(struct kvm_vcpu *vcpu) | |||
879 | flags |= (vcpu->rmode.save_iopl << IOPL_SHIFT); | 879 | flags |= (vcpu->rmode.save_iopl << IOPL_SHIFT); |
880 | vmcs_writel(GUEST_RFLAGS, flags); | 880 | vmcs_writel(GUEST_RFLAGS, flags); |
881 | 881 | ||
882 | vmcs_writel(GUEST_CR4, (vmcs_readl(GUEST_CR4) & ~CR4_VME_MASK) | | 882 | vmcs_writel(GUEST_CR4, (vmcs_readl(GUEST_CR4) & ~X86_CR4_VME) | |
883 | (vmcs_readl(CR4_READ_SHADOW) & CR4_VME_MASK)); | 883 | (vmcs_readl(CR4_READ_SHADOW) & X86_CR4_VME)); |
884 | 884 | ||
885 | update_exception_bitmap(vcpu); | 885 | update_exception_bitmap(vcpu); |
886 | 886 | ||
@@ -937,7 +937,7 @@ static void enter_rmode(struct kvm_vcpu *vcpu) | |||
937 | flags |= IOPL_MASK | X86_EFLAGS_VM; | 937 | flags |= IOPL_MASK | X86_EFLAGS_VM; |
938 | 938 | ||
939 | vmcs_writel(GUEST_RFLAGS, flags); | 939 | vmcs_writel(GUEST_RFLAGS, flags); |
940 | vmcs_writel(GUEST_CR4, vmcs_readl(GUEST_CR4) | CR4_VME_MASK); | 940 | vmcs_writel(GUEST_CR4, vmcs_readl(GUEST_CR4) | X86_CR4_VME); |
941 | update_exception_bitmap(vcpu); | 941 | update_exception_bitmap(vcpu); |
942 | 942 | ||
943 | vmcs_write16(GUEST_SS_SELECTOR, vmcs_readl(GUEST_SS_BASE) >> 4); | 943 | vmcs_write16(GUEST_SS_SELECTOR, vmcs_readl(GUEST_SS_BASE) >> 4); |