On Sun, Jul 2, 2023 at 5:50 PM Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> wrote: > > On Fri, 30 Jun 2023 14:19:51 -0700 Suren Baghdasaryan <surenb@xxxxxxxxxx> wrote: > > > When per-VMA locks were introduced in [1] several types of page faults > > would still fall back to mmap_lock to keep the patchset simple. Among them > > are swap and userfault pages. The main reason for skipping those cases was > > the fact that mmap_lock could be dropped while handling these faults and > > that required additional logic to be implemented. > > Implement the mechanism to allow per-VMA locks to be dropped for these > > cases. > > First, change handle_mm_fault to drop per-VMA locks when returning > > VM_FAULT_RETRY or VM_FAULT_COMPLETED to be consistent with the way > > mmap_lock is handled. Then change folio_lock_or_retry to accept vm_fault > > and return vm_fault_t which simplifies later patches. Finally allow swap > > and uffd page faults to be handled under per-VMA locks by dropping per-VMA > > and retrying, the same way it's done under mmap_lock. > > Naturally, once VMA lock is dropped that VMA should be assumed unstable > > and can't be used. > > Is there any measurable performance benefit from this? Good point. I haven't measured it but assume it will have the same effect as for other page fault cases handled under per-VMA locks (mmap_lock contention reduction). I'll try to create a test to measure the effects. Thanks, Suren.