aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
authorJan Kiszka <jan.kiszka@siemens.com>2013-04-14 06:44:54 -0400
committerGleb Natapov <gleb@redhat.com>2013-04-22 05:53:52 -0400
commitd1fa0352a151a597e8749e7be84121a1ff0d3502 (patch)
treeca7605976c80dad0bf349693b8a5091227020e82 /arch/x86
parent384bb783275145b70d769acf4c687957d1c61802 (diff)
KVM: nVMX: VM_ENTRY/EXIT_LOAD_IA32_EFER overrides EFER.LMA settings
If we load the complete EFER MSR on entry or exit, EFER.LMA (and LME) loading is skipped. Their consistency is already checked now before starting the transition. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Gleb Natapov <gleb@redhat.com>
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/kvm/vmx.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index d7ef55686227..5863adf71ede 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -7519,7 +7519,7 @@ static void prepare_vmcs02(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12)
7519 7519
7520 if (vmcs12->vm_entry_controls & VM_ENTRY_LOAD_IA32_EFER) 7520 if (vmcs12->vm_entry_controls & VM_ENTRY_LOAD_IA32_EFER)
7521 vcpu->arch.efer = vmcs12->guest_ia32_efer; 7521 vcpu->arch.efer = vmcs12->guest_ia32_efer;
7522 if (vmcs12->vm_entry_controls & VM_ENTRY_IA32E_MODE) 7522 else if (vmcs12->vm_entry_controls & VM_ENTRY_IA32E_MODE)
7523 vcpu->arch.efer |= (EFER_LMA | EFER_LME); 7523 vcpu->arch.efer |= (EFER_LMA | EFER_LME);
7524 else 7524 else
7525 vcpu->arch.efer &= ~(EFER_LMA | EFER_LME); 7525 vcpu->arch.efer &= ~(EFER_LMA | EFER_LME);
@@ -7929,7 +7929,7 @@ static void load_vmcs12_host_state(struct kvm_vcpu *vcpu,
7929{ 7929{
7930 if (vmcs12->vm_exit_controls & VM_EXIT_LOAD_IA32_EFER) 7930 if (vmcs12->vm_exit_controls & VM_EXIT_LOAD_IA32_EFER)
7931 vcpu->arch.efer = vmcs12->host_ia32_efer; 7931 vcpu->arch.efer = vmcs12->host_ia32_efer;
7932 if (vmcs12->vm_exit_controls & VM_EXIT_HOST_ADDR_SPACE_SIZE) 7932 else if (vmcs12->vm_exit_controls & VM_EXIT_HOST_ADDR_SPACE_SIZE)
7933 vcpu->arch.efer |= (EFER_LMA | EFER_LME); 7933 vcpu->arch.efer |= (EFER_LMA | EFER_LME);
7934 else 7934 else
7935 vcpu->arch.efer &= ~(EFER_LMA | EFER_LME); 7935 vcpu->arch.efer &= ~(EFER_LMA | EFER_LME);