From: Alex Williamson <alex.williamson@redhat.com>
To: Andrew Jones <ajones@ventanamicro.com>
Cc: Yan Zhao <yan.y.zhao@intel.com>,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
kevin.tian@intel.com, jgg@nvidia.com, yishaih@nvidia.com,
shameerali.kolothum.thodi@huawei.com,
Peter Xu <peterx@redhat.com>
Subject: Re: [PATCH] vfio/pci: take mmap write lock for io_remap_pfn_range
Date: Wed, 22 May 2024 11:50:06 -0600 [thread overview]
Message-ID: <20240522115006.7746f8c8.alex.williamson@redhat.com> (raw)
In-Reply-To: <20240522-b1ef260c9d6944362c14c246@orel>
Hey Drew,
On Wed, 22 May 2024 18:56:29 +0200
Andrew Jones <ajones@ventanamicro.com> wrote:
> On Mon, May 08, 2023 at 08:58:42PM GMT, Yan Zhao wrote:
> > In VFIO type1, vaddr_get_pfns() will try fault in MMIO PFNs after
> > pin_user_pages_remote() returns -EFAULT.
> >
> > follow_fault_pfn
> > fixup_user_fault
> > handle_mm_fault
> > handle_mm_fault
> > do_fault
> > do_shared_fault
> > do_fault
> > __do_fault
> > vfio_pci_mmap_fault
> > io_remap_pfn_range
> > remap_pfn_range
> > track_pfn_remap
> > vm_flags_set ==> mmap_assert_write_locked(vma->vm_mm)
> > remap_pfn_range_notrack
> > vm_flags_set ==> mmap_assert_write_locked(vma->vm_mm)
> >
> > As io_remap_pfn_range() will call vm_flags_set() to update vm_flags [1],
> > holding of mmap write lock is required.
> > So, update vfio_pci_mmap_fault() to drop mmap read lock and take mmap
> > write lock.
> >
> > [1] https://lkml.kernel.org/r/20230126193752.297968-3-surenb@google.com
> > commit bc292ab00f6c ("mm: introduce vma->vm_flags wrapper functions")
> > commit 1c71222e5f23
> > ("mm: replace vma->vm_flags direct modifications with modifier calls")
> >
>
> With linux-next I started noticing traces similar to the above without
> lockdep, since it has ba168b52bf8e ("mm: use rwsem assertion macros for
> mmap_lock"). Were there any follow ups to this? Sorry if my quick
> searching missed it.
We've been working on it in the background, but we're not there yet. I
have a branch[1] that converts to an address space on the vfio device,
making unmap_mapping_range() available to easily zap mappings to the
BARs without all the ugly vma tracking, but that still leaves us with
the problem that the remap_pfn_range() shouldn't be called from the
fault handler resulting in this lockdep warning. We can switch to
vmf_insert_pfn() in the fault handler, but that's a noticeable
performance penalty.
The angle I've been working recently is to try taking advantage of
huge_fault support because we do have vmf_insert_pfn_{pmd,pud}, but
these don't currently support pfnmap pfns. I've been working with
Peter Xu as this aligns with some other work of his. It's working and
resolves the performance issue, especially with a little alignment
tweaking in userspace to take advantage of pud mappings.
I'm not sure if there are any outstanding blockers on Peter's side, but
this seems like a good route from the vfio side. If we're seeing this
now without lockdep, we might need to bite the bullet and take the hit
with vmf_insert_pfn() while the pmd/pud path learn about pfnmaps.
Thanks,
Alex
[1]https://github.com/awilliam/linux-vfio/commits/vfio-address-space/
next prev parent reply other threads:[~2024-05-22 17:50 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-08 12:58 Yan Zhao
2023-05-08 16:48 ` Jason Gunthorpe
2023-05-08 20:57 ` Alex Williamson
2023-05-10 20:41 ` Jason Gunthorpe
2023-05-11 6:56 ` Yan Zhao
2023-05-11 7:38 ` Cédric Le Goater
2023-05-11 7:32 ` Cédric Le Goater
2023-05-11 16:07 ` Alex Williamson
2023-05-11 17:47 ` Jason Gunthorpe
2023-05-12 8:02 ` Yan Zhao
2024-05-22 16:56 ` Andrew Jones
2024-05-22 17:50 ` Alex Williamson [this message]
2024-05-22 18:30 ` Jason Gunthorpe
2024-05-22 19:43 ` Alex Williamson
2024-05-22 21:21 ` Peter Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240522115006.7746f8c8.alex.williamson@redhat.com \
--to=alex.williamson@redhat.com \
--cc=ajones@ventanamicro.com \
--cc=jgg@nvidia.com \
--cc=kevin.tian@intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=peterx@redhat.com \
--cc=shameerali.kolothum.thodi@huawei.com \
--cc=yan.y.zhao@intel.com \
--cc=yishaih@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®