From: Mike Rapoport <rppt@kernel.org>
To: Peter Xu <peterx@redhat.com>
Cc: linux-mm@kvack.org, Andrea Arcangeli <aarcange@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
Axel Rasmussen <axelrasmussen@google.com>,
Baolin Wang <baolin.wang@linux.alibaba.com>,
David Hildenbrand <david@redhat.com>,
Hugh Dickins <hughd@google.com>,
James Houghton <jthoughton@google.com>,
"Liam R. Howlett" <Liam.Howlett@oracle.com>,
Lorenzo Stoakes <lorenzo.stoakes@oracle.com>,
Michal Hocko <mhocko@suse.com>,
Nikita Kalyazin <kalyazin@amazon.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Sean Christopherson <seanjc@google.com>,
Shuah Khan <shuah@kernel.org>,
Suren Baghdasaryan <surenb@google.com>,
Vlastimil Babka <vbabka@suse.cz>,
linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
linux-kselftest@vger.kernel.org,
"David Hildenbrand (Red Hat)" <david@kernel.org>
Subject: Re: [PATCH v2 3/5] mm: introduce VM_FAULT_UFFD_MINOR fault reason
Date: Sun, 30 Nov 2025 13:05:04 +0200 [thread overview]
Message-ID: <aSwk4IGY7zdb0cwd@kernel.org> (raw)
In-Reply-To: <aShb8J18BaRrsA-u@x1.local>
On Thu, Nov 27, 2025 at 09:10:56AM -0500, Peter Xu wrote:
> On Thu, Nov 27, 2025 at 01:18:10PM +0200, Mike Rapoport wrote:
> > On Tue, Nov 25, 2025 at 02:21:16PM -0500, Peter Xu wrote:
> > > Hi, Mike,
> > >
> > > On Tue, Nov 25, 2025 at 08:38:38PM +0200, Mike Rapoport wrote:
> > > > From: "Mike Rapoport (Microsoft)" <rppt@kernel.org>
> > > >
> > > > When a VMA is registered with userfaulfd in minor mode, its ->fault()
> > > > method should check if a folio exists in the page cache and if yes
> > > > ->fault() should call handle_userfault(VM_UFFD_MISSING).
> > >
> > > s/MISSING/MINOR/
> >
> > Thanks, fixed.
> >
> > > > new VM_FAULT_UFFD_MINOR there instead.
> > >
> > > Personally I'd keep the fault path as simple as possible, because that's
> > > the more frequently used path (rather than when userfaultfd is armed). I
> > > also see it slightly a pity that even with flags introduced, it only solves
> > > the MINOR problem, not MISSING.
> >
> > With David's suggestion the likely path remains unchanged.
>
> It is not about the likely, it's about introducing flags into core path
> that makes the core path harder to follow, when it's not strictly required.
ret = vma->vm_ops->fault(vmf);
if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE | VM_FAULT_RETRY |
VM_FAULT_DONE_COW | VM_FAULT_UFFD_MINOR))) {
if (ret & VM_FAULT_UFFD_MINOR)
return handle_userfault(vmf, VM_UFFD_MINOR);
return ret;
}
isn't hard to follow and it's cleaner than adding EXPORT_SYMBOL that is not
strictly required.
> Meanwhile, personally I'm also not sure if we should have "unlikely" here..
> My gut feeling is in reality we will only have two major use cases:
>
> (a) when userfaultfd minor isn't in the picture
>
> (b) when userfaultfd minor registered and actively being used (e.g. in a
> postcopy process)
>
> Then without likely, IIUC the hardware should optimize path selected hence
> both a+b performs almost equally well.
unlikely() adds a branch that hardware will predict correctly if
UFFD_MINOR is actively used.
But even misspredicted branch is nothing compared to putting a task on a
wait queue and waiting for userspace to react to the fault notification
before handle_userfault() returns the control to the fault handler.
> Just to mention, if we want, I think we have at least one more option to do
> the same thing, but without even introducing a new flag to ->fault()
> retval.
>
> That is, when we have get_folio() around, we can essentially do two faults
> in sequence, one lighter then the real one, only for minor vmas, something
> like (I didn't think deeper, so only a rough idea shown):
>
> __do_fault():
> if (uffd_minor(vma)) {
> ...
> folio = vma->get_folio(...);
> if (folio)
> return handle_userfault(vmf, VM_UFFD_MINOR);
> // fallthrough, which imply a cache miss
> }
> ret = vma->vm_ops->fault(vmf);
That's something to consider for the future, especially if we'd be able to
pull out MISSING handling as well from ->fault() handlers.
> Thanks,
> --
> Peter Xu
--
Sincerely yours,
Mike.
next prev parent reply other threads:[~2025-11-30 11:05 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-25 18:38 [PATCH v2 0/5] mm, kvm: add guest_memfd support for uffd minor faults Mike Rapoport
2025-11-25 18:38 ` [PATCH v2 1/5] userfaultfd: move vma_can_userfault out of line Mike Rapoport
2025-11-26 15:05 ` Liam R. Howlett
2025-11-25 18:38 ` [PATCH v2 2/5] userfaultfd, shmem: use a VMA callback to handle UFFDIO_CONTINUE Mike Rapoport
2025-11-26 10:21 ` David Hildenbrand (Red Hat)
2025-11-26 15:11 ` Liam R. Howlett
2025-11-25 18:38 ` [PATCH v2 3/5] mm: introduce VM_FAULT_UFFD_MINOR fault reason Mike Rapoport
2025-11-25 19:21 ` Peter Xu
2025-11-27 11:18 ` Mike Rapoport
2025-11-27 14:10 ` Peter Xu
2025-11-30 11:05 ` Mike Rapoport [this message]
2025-11-26 10:19 ` David Hildenbrand (Red Hat)
2025-11-26 12:47 ` kernel test robot
2025-11-26 15:19 ` Liam R. Howlett
2025-11-26 16:49 ` Nikita Kalyazin
2025-11-28 1:48 ` kernel test robot
2025-11-28 3:07 ` kernel test robot
2025-11-25 18:38 ` [PATCH v2 4/5] guest_memfd: add support for userfaultfd minor mode Mike Rapoport
2025-11-26 10:25 ` David Hildenbrand (Red Hat)
2025-11-26 15:22 ` Liam R. Howlett
2025-11-26 16:21 ` kernel test robot
2025-11-26 16:49 ` Nikita Kalyazin
2025-11-27 10:36 ` Mike Rapoport
2025-11-27 11:19 ` Nikita Kalyazin
2025-11-27 19:04 ` Mike Rapoport
2025-11-28 12:15 ` Nikita Kalyazin
2025-11-27 11:27 ` David Hildenbrand (Red Hat)
2025-11-28 3:27 ` kernel test robot
2025-11-25 18:38 ` [PATCH v2 5/5] KVM: selftests: test userfaultfd minor for guest_memfd Mike Rapoport
2025-11-26 15:23 ` Liam R. Howlett
2025-11-26 16:49 ` Nikita Kalyazin
2025-11-27 10:39 ` Mike Rapoport
-- strict thread matches above, loose matches on Subject: below --
2025-11-26 4:24 [PATCH v2 3/5] mm: introduce VM_FAULT_UFFD_MINOR fault reason kernel test robot
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=aSwk4IGY7zdb0cwd@kernel.org \
--to=rppt@kernel.org \
--cc=Liam.Howlett@oracle.com \
--cc=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=axelrasmussen@google.com \
--cc=baolin.wang@linux.alibaba.com \
--cc=david@kernel.org \
--cc=david@redhat.com \
--cc=hughd@google.com \
--cc=jthoughton@google.com \
--cc=kalyazin@amazon.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=mhocko@suse.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=seanjc@google.com \
--cc=shuah@kernel.org \
--cc=surenb@google.com \
--cc=vbabka@suse.cz \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.