mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
384bb78327
commit
d1fa0352a1
|
@ -7519,7 +7519,7 @@ static void prepare_vmcs02(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12)
|
||||||
|
|
||||||
if (vmcs12->vm_entry_controls & VM_ENTRY_LOAD_IA32_EFER)
|
if (vmcs12->vm_entry_controls & VM_ENTRY_LOAD_IA32_EFER)
|
||||||
vcpu->arch.efer = vmcs12->guest_ia32_efer;
|
vcpu->arch.efer = vmcs12->guest_ia32_efer;
|
||||||
if (vmcs12->vm_entry_controls & VM_ENTRY_IA32E_MODE)
|
else if (vmcs12->vm_entry_controls & VM_ENTRY_IA32E_MODE)
|
||||||
vcpu->arch.efer |= (EFER_LMA | EFER_LME);
|
vcpu->arch.efer |= (EFER_LMA | EFER_LME);
|
||||||
else
|
else
|
||||||
vcpu->arch.efer &= ~(EFER_LMA | EFER_LME);
|
vcpu->arch.efer &= ~(EFER_LMA | EFER_LME);
|
||||||
|
@ -7929,7 +7929,7 @@ static void load_vmcs12_host_state(struct kvm_vcpu *vcpu,
|
||||||
{
|
{
|
||||||
if (vmcs12->vm_exit_controls & VM_EXIT_LOAD_IA32_EFER)
|
if (vmcs12->vm_exit_controls & VM_EXIT_LOAD_IA32_EFER)
|
||||||
vcpu->arch.efer = vmcs12->host_ia32_efer;
|
vcpu->arch.efer = vmcs12->host_ia32_efer;
|
||||||
if (vmcs12->vm_exit_controls & VM_EXIT_HOST_ADDR_SPACE_SIZE)
|
else if (vmcs12->vm_exit_controls & VM_EXIT_HOST_ADDR_SPACE_SIZE)
|
||||||
vcpu->arch.efer |= (EFER_LMA | EFER_LME);
|
vcpu->arch.efer |= (EFER_LMA | EFER_LME);
|
||||||
else
|
else
|
||||||
vcpu->arch.efer &= ~(EFER_LMA | EFER_LME);
|
vcpu->arch.efer &= ~(EFER_LMA | EFER_LME);
|
||||||
|
|
Loading…
Reference in New Issue