aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/kvm/svm.c
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2007-07-17 09:34:16 -0400
committerAvi Kivity <avi@qumranet.com>2007-10-13 04:18:18 -0400
commit66aee91aaab8f998d28a61ed7733be17ad8e6d8f (patch)
treef3cd552c4a176cbba0929788b03867cb33d7b5b5 /drivers/kvm/svm.c
parentf802a307cb2cabdd0c6b48067dbe901d6fe27246 (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/svm.c')
-rw-r--r--drivers/kvm/svm.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/kvm/svm.c b/drivers/kvm/svm.c
index e920c2269af0..5c058fa1c8ad 100644
--- a/drivers/kvm/svm.c
+++ b/drivers/kvm/svm.c
@@ -38,7 +38,6 @@ MODULE_LICENSE("GPL");
38 38
39#define DR7_GD_MASK (1 << 13) 39#define DR7_GD_MASK (1 << 13)
40#define DR6_BD_MASK (1 << 13) 40#define DR6_BD_MASK (1 << 13)
41#define CR4_DE_MASK (1UL << 3)
42 41
43#define SEG_TYPE_LDT 2 42#define SEG_TYPE_LDT 2
44#define SEG_TYPE_BUSY_TSS16 3 43#define SEG_TYPE_BUSY_TSS16 3
@@ -564,7 +563,7 @@ static void init_vmcb(struct vmcb *vmcb)
564 * cache by default. the orderly way is to enable cache in bios. 563 * cache by default. the orderly way is to enable cache in bios.
565 */ 564 */
566 save->cr0 = 0x00000010 | X86_CR0_PG | X86_CR0_WP; 565 save->cr0 = 0x00000010 | X86_CR0_PG | X86_CR0_WP;
567 save->cr4 = CR4_PAE_MASK; 566 save->cr4 = X86_CR4_PAE;
568 /* rdx = ?? */ 567 /* rdx = ?? */
569} 568}
570 569
@@ -781,7 +780,7 @@ static void svm_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0)
781static void svm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4) 780static void svm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4)
782{ 781{
783 vcpu->cr4 = cr4; 782 vcpu->cr4 = cr4;
784 vcpu->svm->vmcb->save.cr4 = cr4 | CR4_PAE_MASK; 783 vcpu->svm->vmcb->save.cr4 = cr4 | X86_CR4_PAE;
785} 784}
786 785
787static void svm_set_segment(struct kvm_vcpu *vcpu, 786static void svm_set_segment(struct kvm_vcpu *vcpu,
@@ -877,7 +876,7 @@ static void svm_set_dr(struct kvm_vcpu *vcpu, int dr, unsigned long value,
877 vcpu->svm->db_regs[dr] = value; 876 vcpu->svm->db_regs[dr] = value;
878 return; 877 return;
879 case 4 ... 5: 878 case 4 ... 5:
880 if (vcpu->cr4 & CR4_DE_MASK) { 879 if (vcpu->cr4 & X86_CR4_DE) {
881 *exception = UD_VECTOR; 880 *exception = UD_VECTOR;
882 return; 881 return;
883 } 882 }