Re: kvm_gfn_to_pfn_cache_refresh started getting a warning recently

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

 



On Tue, Apr 26, 2022, Paolo Bonzini wrote:
> On 4/26/22 18:45, Sean Christopherson wrote:
> > On Tue, Apr 26, 2022, Maxim Levitsky wrote:
> > > [  390.511995] BUG: sleeping function called from invalid context at include/linux/highmem-internal.h:161
> > > [  390.513681] in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 4439, name: CPU 0/KVM
> > 
> > This is my fault.  memremap() can sleep as well.  I'll work on a fix.
> 
> Indeed, "KVM: Fix race between mmu_notifier invalidation and pfncache
> refresh" hadn't gone through a full test cycle yet.

And I didn't run with PROVE_LOCKING :-(

I'm pretty sure there's an existing memory leak too.  If a refresh occurs, but
the pfn ends up being the same, KVM will keep references to both the "old" and the
"new", but only release one when the cache is destroyed.

The refcounting bug begs the question of why KVM even keeps a reference.  This code
really should look exactly like the page fault path, i.e. should drop the reference
to the pfn once the pfn has been installed into the cache and obtained protection
via the mmu_notifier.



[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