summaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/svm.c
diff options
context:
space:
mode:
authorJoerg Roedel2010-07-27 18:14:20 +0200
committerAvi Kivity2010-10-24 10:50:03 +0200
commit3f6a9d1693deaeef28d98109bc92c98dd94a8523 (patch)
treee7dbbef3b591eb7edc502ae7af68403b4bd13063 /arch/x86/kvm/svm.c
parentKVM: MMU: remove valueless output message (diff)
downloadkernel-qcow2-linux-3f6a9d1693deaeef28d98109bc92c98dd94a8523.tar.gz
kernel-qcow2-linux-3f6a9d1693deaeef28d98109bc92c98dd94a8523.tar.xz
kernel-qcow2-linux-3f6a9d1693deaeef28d98109bc92c98dd94a8523.zip
KVM: SVM: Sync efer back into nested vmcb
This patch fixes a bug in a nested hypervisor that heavily switches between real-mode and long-mode. The problem is fixed by syncing back efer into the guest vmcb on emulated vmexit. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'arch/x86/kvm/svm.c')
-rw-r--r--arch/x86/kvm/svm.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index 8a3f9f64f86f..09704a0501d7 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -1896,6 +1896,7 @@ static int nested_svm_vmexit(struct vcpu_svm *svm)
nested_vmcb->save.ds = vmcb->save.ds;
nested_vmcb->save.gdtr = vmcb->save.gdtr;
nested_vmcb->save.idtr = vmcb->save.idtr;
+ nested_vmcb->save.efer = svm->vcpu.arch.efer;
nested_vmcb->save.cr0 = kvm_read_cr0(&svm->vcpu);
nested_vmcb->save.cr3 = svm->vcpu.arch.cr3;
nested_vmcb->save.cr2 = vmcb->save.cr2;