ACK: [SRU Bionic 1/1] KVM: nVMX: Always reflect #NM VM-exits to L1
Stefan Bader
stefan.bader at canonical.com
Fri Dec 4 08:35:31 UTC 2020
On 03.12.20 21:33, Thadeu Lima de Souza Cascardo wrote:
> From: Jim Mattson <jmattson at google.com>
>
> BugLink: https://bugs.launchpad.net/bugs/1872401
>
> When bit 3 (corresponding to CR0.TS) of the VMCS12 cr0_guest_host_mask
> field is clear, the VMCS12 guest_cr0 field does not necessarily hold
> the current value of the L2 CR0.TS bit, so the code that checked for
> L2's CR0.TS bit being set was incorrect. Moreover, I'm not sure that
> the CR0.TS check was adequate. (What if L2's CR0.EM was set, for
> instance?)
>
> Fortunately, lazy FPU has gone away, so L0 has lost all interest in
> intercepting #NM exceptions. See commit bd7e5b0899a4 ("KVM: x86:
> remove code for lazy FPU handling"). Therefore, there is no longer any
> question of which hypervisor gets first dibs. The #NM VM-exit should
> always be reflected to L1. (Note that the corresponding bit must be
> set in the VMCS12 exception_bitmap field for there to be an #NM
> VM-exit at all.)
>
> Fixes: ccf9844e5d99c ("kvm, vmx: Really fix lazy FPU on nested guest")
> Reported-by: Abhiroop Dabral <adabral at paloaltonetworks.com>
> Signed-off-by: Jim Mattson <jmattson at google.com>
> Reviewed-by: Peter Shier <pshier at google.com>
> Tested-by: Abhiroop Dabral <adabral at paloaltonetworks.com>
> Reviewed-by: Liran Alon <liran.alon at oracle.com>
> Signed-off-by: Paolo Bonzini <pbonzini at redhat.com>
> (cherry picked from commit 3c6e099fa15fdb6fb1892199ed8709012e1294f2)
> Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo at canonical.com>
Acked-by: Stefan Bader <stefan.bader at canonical.com>
> ---
> arch/x86/kvm/vmx.c | 8 --------
> 1 file changed, 8 deletions(-)
>
> diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
> index dd940ac9cf88..2773499f3578 100644
> --- a/arch/x86/kvm/vmx.c
> +++ b/arch/x86/kvm/vmx.c
> @@ -1215,11 +1215,6 @@ static inline bool is_page_fault(u32 intr_info)
> return is_exception_n(intr_info, PF_VECTOR);
> }
>
> -static inline bool is_no_device(u32 intr_info)
> -{
> - return is_exception_n(intr_info, NM_VECTOR);
> -}
> -
> static inline bool is_invalid_opcode(u32 intr_info)
> {
> return is_exception_n(intr_info, UD_VECTOR);
> @@ -8726,9 +8721,6 @@ static bool nested_vmx_exit_reflected(struct kvm_vcpu *vcpu, u32 exit_reason)
> return false;
> else if (is_page_fault(intr_info))
> return !vmx->vcpu.arch.apf.host_apf_reason && enable_ept;
> - else if (is_no_device(intr_info) &&
> - !(vmcs12->guest_cr0 & X86_CR0_TS))
> - return false;
> else if (is_debug(intr_info) &&
> vcpu->guest_debug &
> (KVM_GUESTDBG_SINGLESTEP | KVM_GUESTDBG_USE_HW_BP))
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20201204/9fba152d/attachment-0001.sig>
More information about the kernel-team
mailing list