[MODERATED] Re: ***UNCHECKED*** Re: [PATCH v7 3/5] NX 3
Joerg Roedel <[email protected]>
| Newsgroups | org.kernel.lore.historical-speck |
|---|---|
| Message-ID | <[email protected]> |
On Fri, Oct 25, 2019 at 10:48:04AM +0200, speck for Paolo Bonzini wrote:
> diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
> index e7970a2e8eae..1f923dee99e5 100644
> --- a/arch/x86/kvm/vmx/vmx.c
> +++ b/arch/x86/kvm/vmx/vmx.c
> @@ -992,6 +992,9 @@ static bool update_transition_efer(struct vcpu_vmx *vmx, int efer_offset)
> ignore_bits &= ~(u64)EFER_SCE;
> #endif
>
> + guest_efer &= ~ignore_bits;
> + guest_efer |= host_efer & ignore_bits;
> +
> /*
> * On EPT, we can't emulate NX, so we must switch EFER atomically.
> * On CPUs that support "load IA32_EFER", always switch EFER
> @@ -1010,9 +1013,6 @@ static bool update_transition_efer(struct vcpu_vmx *vmx, int efer_offset)
> } else {
> clear_atomic_switch_msr(vmx, MSR_EFER);
>
> - guest_efer &= ~ignore_bits;
> - guest_efer |= host_efer & ignore_bits;
> -
> vmx->guest_msrs[efer_offset].data = guest_efer;
> vmx->guest_msrs[efer_offset].mask = ~ignore_bits;
>
>
>
This works on my machine with ept=0 but breaks with ept=1:
KVM: entry failed, hardware error 0x80000021
Regards,
Joerg