aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/svm.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kvm/svm.c')
-rw-r--r--arch/x86/kvm/svm.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index c480d7f64a60..5ad9d802bd16 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -1799,10 +1799,7 @@ static int nested_svm_vmexit(struct vcpu_svm *svm)
1799 nested_vmcb->save.gdtr = vmcb->save.gdtr; 1799 nested_vmcb->save.gdtr = vmcb->save.gdtr;
1800 nested_vmcb->save.idtr = vmcb->save.idtr; 1800 nested_vmcb->save.idtr = vmcb->save.idtr;
1801 nested_vmcb->save.cr0 = kvm_read_cr0(&svm->vcpu); 1801 nested_vmcb->save.cr0 = kvm_read_cr0(&svm->vcpu);
1802 if (npt_enabled) 1802 nested_vmcb->save.cr3 = svm->vcpu.arch.cr3;
1803 nested_vmcb->save.cr3 = vmcb->save.cr3;
1804 else
1805 nested_vmcb->save.cr3 = svm->vcpu.arch.cr3;
1806 nested_vmcb->save.cr2 = vmcb->save.cr2; 1803 nested_vmcb->save.cr2 = vmcb->save.cr2;
1807 nested_vmcb->save.cr4 = svm->vcpu.arch.cr4; 1804 nested_vmcb->save.cr4 = svm->vcpu.arch.cr4;
1808 nested_vmcb->save.rflags = vmcb->save.rflags; 1805 nested_vmcb->save.rflags = vmcb->save.rflags;
@@ -2641,6 +2638,11 @@ static int handle_exit(struct kvm_vcpu *vcpu)
2641 2638
2642 trace_kvm_exit(exit_code, vcpu); 2639 trace_kvm_exit(exit_code, vcpu);
2643 2640
2641 if (!(svm->vmcb->control.intercept_cr_write & INTERCEPT_CR0_MASK))
2642 vcpu->arch.cr0 = svm->vmcb->save.cr0;
2643 if (npt_enabled)
2644 vcpu->arch.cr3 = svm->vmcb->save.cr3;
2645
2644 if (unlikely(svm->nested.exit_required)) { 2646 if (unlikely(svm->nested.exit_required)) {
2645 nested_svm_vmexit(svm); 2647 nested_svm_vmexit(svm);
2646 svm->nested.exit_required = false; 2648 svm->nested.exit_required = false;
@@ -2668,11 +2670,6 @@ static int handle_exit(struct kvm_vcpu *vcpu)
2668 2670
2669 svm_complete_interrupts(svm); 2671 svm_complete_interrupts(svm);
2670 2672
2671 if (!(svm->vmcb->control.intercept_cr_write & INTERCEPT_CR0_MASK))
2672 vcpu->arch.cr0 = svm->vmcb->save.cr0;
2673 if (npt_enabled)
2674 vcpu->arch.cr3 = svm->vmcb->save.cr3;
2675
2676 if (svm->vmcb->control.exit_code == SVM_EXIT_ERR) { 2673 if (svm->vmcb->control.exit_code == SVM_EXIT_ERR) {
2677 kvm_run->exit_reason = KVM_EXIT_FAIL_ENTRY; 2674 kvm_run->exit_reason = KVM_EXIT_FAIL_ENTRY;
2678 kvm_run->fail_entry.hardware_entry_failure_reason 2675 kvm_run->fail_entry.hardware_entry_failure_reason