Re: nVMX regression v3.13+, bisected

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




-----Paolo Bonzini <paolo.bonzini@xxxxxxxxx> a écrit : -----

>A : Stefan Bader <stefan.bader@xxxxxxxxxxxxx>, kvm@xxxxxxxxxxxxxxx
>De : Paolo Bonzini 
>Envoyé par : Paolo Bonzini 
>Date : 27/02/2014 11:51
>Cc : Anthoine Bourgeois <bourgeois@xxxxxxxxx>
>Objet : Re: nVMX regression v3.13+, bisected
>
>Il 26/02/2014 21:27, Stefan Bader ha scritto:
>> On 26.02.2014 21:25, Paolo Bonzini wrote:
>>> Il 26/02/2014 20:43, Stefan Bader ha scritto:
>>>> Hi,
>>>>
>>>> I was looking at a bug report[1] about a regression on nested VMX
>that started
>>>> with kernel v3.13 (same issue still existed with v3.14-rc4). The
>problem shows
>>>> up when running a v3.13 kernel in L0 and then trying to launch a
>L2 (L1 was
>>>> either a v3.2 kernel or v3.13, so seemed to have no immediate
>influence). L2 is
>>>> trying to boot a iso image and hangs before the isolinux boot
>loader displays
>>>> anything. A preinstalled hd image fails to boot, too.
>>>>
>>>> I bisected this and ended up on the following commit which, when
>reverted made
>>>> the launch work again:
>>>>
>>>> Author: Anthoine Bourgeois <bourgeois@xxxxxxxxx>
>>>> Date: Wed Nov 13 11:45:37 2013 +0100
>>>>
>>>> kvm, vmx: Fix lazy FPU on nested guest
>>>>
>>>> If a nested guest does a NM fault but its CR0 doesn't contain
>the TS
>>>> flag (because it was already cleared by the guest with L1
>aid) then we
>>>> have to activate FPU ourselves in L0 and then continue to L2.
>If TS flag
>>>> is set then we fallback on the previous behavior, forward the
>fault to
>>>> L1 if it asked for.
>>>>
>>>> Signed-off-by: Anthoine Bourgeois <bourgeois@xxxxxxxxx>
>>>> Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>
>>>>
>>>> The condition to exit to L0 seems to be according to what the
>description says.
>>>> Could it be that the handling in L0 is doing something wrong?
>>>
>>> Thanks, I'll look at it tomorrow or Friday.
>>>
>>> Paolo
>>>
>> Great thanks. And maybe it helps if I actually add the link to the
>bug report as
>> I had intended... :-P
>
>I don't have my usual test machine available, but here is a possible
>guess.
>nested_read_cr0 is the CR0 as read by L2, but here we want to look at
>the
>CR0 value reflecting L1's setup. This would suggest the following
>untested
>patch:
>
>diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
>index a06f101ef64b..0d90601a2681 100644
>--- a/arch/x86/kvm/vmx.c
>+++ b/arch/x86/kvm/vmx.c
>@@ -6688,7 +6688,7 @@ static bool nested_vmx_exit_handled(struct
>kvm_vcpu *vcpu)
> else if (is_page_fault(intr_info))
> return enable_ept;
> else if (is_no_device(intr_info) &&
>-	 !(nested_read_cr0(vmcs12) & X86_CR0_TS))
>+	 !(vmcs12->guest_cr0 & X86_CR0_TS))
> return 0;
> return vmcs12->exception_bitmap &
> (1u << (intr_info & INTR_INFO_VECTOR_MASK));
>

OK, so your patch works perfectly well with both of my test machines (a Ubuntu guest or
a ChorusOS guest).
I join the patch, can you signof it ?

Regards,
Anthoine

PS: Sorry for my bad Lotus Notes mailer behaviour :-/
1

Attachment: 0001-kvm-vmx-Fix-a-nested-cr0-read-on-NM-fault.patch
Description: Binary data


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux