Re: PROBLEM: Regression of MMU causing guest VM application errors

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

 



On 12/17/19 6:11 PM, Sean Christopherson wrote:
On Wed, Nov 27, 2019 at 07:24:09AM -0800, Sean Christopherson wrote:
On Wed, Nov 20, 2019 at 11:28:43AM -0800, Sean Christopherson wrote:
On Wed, Nov 20, 2019 at 02:04:38PM -0500, Derek Yerger wrote:
Debug patch attached.  Hopefully it finds something, it took me an
embarassing number of attempts to get correct, I kept screwing up checking
a bit number versus checking a bit mask...
<0001-thread_info-Add-a-debug-hook-to-detect-FPU-changes-w.patch>
Should this still be tested despite Wanpeng Li’s comments that the issue may
have been fixed in a 5.3 release candidate?
Yes.

The actual bug fix, commit e751732486eb3 (KVM: X86: Fix fpu state crash in
kvm guest), is present in v5.2.7.

Unless there's a subtlety I'm missing, commit d9a710e5fc4941 (KVM: X86:
Dynamically allocate user_fpu) is purely an optimization and should not
have a functional impact.
Any update on this?  Syzkaller also appears to be hitting this[*], but it
hasn't been able to generate a reproducer.

[*] https://syzkaller.appspot.com/bug?extid=00be5da1d75f1cc95f6b
I have the kernel built and ready to test. I need the guest VM in a functioning state this week, so I can't test yet. I will post results as soon as they're available.

---

Any chance the below change fixes your issue?  It's a bug fix for AVX
corruption during signal delivery[*].  It doesn't seem like the same thing
you are seeing, but it's worth trying.

[*] https://lkml.kernel.org/r/20191127124243.u74osvlkhcmsskng@xxxxxxxxxxxxx/

  arch/x86/include/asm/fpu/internal.h | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/include/asm/fpu/internal.h b/arch/x86/include/asm/fpu/internal.h
index 4c95c365058aa..44c48e34d7994 100644
--- a/arch/x86/include/asm/fpu/internal.h
+++ b/arch/x86/include/asm/fpu/internal.h
@@ -509,7 +509,7 @@ static inline void __fpu_invalidate_fpregs_state(struct fpu *fpu)
static inline int fpregs_state_valid(struct fpu *fpu, unsigned int cpu)
  {
-	return fpu == this_cpu_read_stable(fpu_fpregs_owner_ctx) && cpu == fpu->last_cpu;
+	return fpu == this_cpu_read(fpu_fpregs_owner_ctx) && cpu == fpu->last_cpu;
  }




[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