diff options
Diffstat (limited to 'drivers/kvm/svm.c')
-rw-r--r-- | drivers/kvm/svm.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/kvm/svm.c b/drivers/kvm/svm.c index 85f61dd1e936..83da4ea150a3 100644 --- a/drivers/kvm/svm.c +++ b/drivers/kvm/svm.c | |||
@@ -528,7 +528,13 @@ static void init_vmcb(struct vmcb *vmcb) | |||
528 | save->cs.attrib = SVM_SELECTOR_READ_MASK | SVM_SELECTOR_P_MASK | | 528 | save->cs.attrib = SVM_SELECTOR_READ_MASK | SVM_SELECTOR_P_MASK | |
529 | SVM_SELECTOR_S_MASK | SVM_SELECTOR_CODE_MASK; | 529 | SVM_SELECTOR_S_MASK | SVM_SELECTOR_CODE_MASK; |
530 | save->cs.limit = 0xffff; | 530 | save->cs.limit = 0xffff; |
531 | save->cs.base = 0xffff0000; | 531 | /* |
532 | * cs.base should really be 0xffff0000, but vmx can't handle that, so | ||
533 | * be consistent with it. | ||
534 | * | ||
535 | * Replace when we have real mode working for vmx. | ||
536 | */ | ||
537 | save->cs.base = 0xf0000; | ||
532 | 538 | ||
533 | save->gdtr.limit = 0xffff; | 539 | save->gdtr.limit = 0xffff; |
534 | save->idtr.limit = 0xffff; | 540 | save->idtr.limit = 0xffff; |
@@ -603,6 +609,10 @@ static void svm_vcpu_put(struct kvm_vcpu *vcpu) | |||
603 | put_cpu(); | 609 | put_cpu(); |
604 | } | 610 | } |
605 | 611 | ||
612 | static void svm_vcpu_decache(struct kvm_vcpu *vcpu) | ||
613 | { | ||
614 | } | ||
615 | |||
606 | static void svm_cache_regs(struct kvm_vcpu *vcpu) | 616 | static void svm_cache_regs(struct kvm_vcpu *vcpu) |
607 | { | 617 | { |
608 | vcpu->regs[VCPU_REGS_RAX] = vcpu->svm->vmcb->save.rax; | 618 | vcpu->regs[VCPU_REGS_RAX] = vcpu->svm->vmcb->save.rax; |
@@ -723,7 +733,7 @@ static void svm_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0) | |||
723 | } | 733 | } |
724 | #endif | 734 | #endif |
725 | vcpu->svm->cr0 = cr0; | 735 | vcpu->svm->cr0 = cr0; |
726 | vcpu->svm->vmcb->save.cr0 = cr0 | CR0_PG_MASK; | 736 | vcpu->svm->vmcb->save.cr0 = cr0 | CR0_PG_MASK | CR0_WP_MASK; |
727 | vcpu->cr0 = cr0; | 737 | vcpu->cr0 = cr0; |
728 | } | 738 | } |
729 | 739 | ||
@@ -1671,6 +1681,7 @@ static struct kvm_arch_ops svm_arch_ops = { | |||
1671 | 1681 | ||
1672 | .vcpu_load = svm_vcpu_load, | 1682 | .vcpu_load = svm_vcpu_load, |
1673 | .vcpu_put = svm_vcpu_put, | 1683 | .vcpu_put = svm_vcpu_put, |
1684 | .vcpu_decache = svm_vcpu_decache, | ||
1674 | 1685 | ||
1675 | .set_guest_debug = svm_guest_debug, | 1686 | .set_guest_debug = svm_guest_debug, |
1676 | .get_msr = svm_get_msr, | 1687 | .get_msr = svm_get_msr, |