From: Mike Rapoport <rppt@kernel.org>
To: "Liam R. Howlett" <Liam.Howlett@oracle.com>,
Peter Xu <peterx@redhat.com>,
David Hildenbrand <david@redhat.com>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
Muchun Song <muchun.song@linux.dev>,
Nikita Kalyazin <kalyazin@amazon.com>,
Vlastimil Babka <vbabka@suse.cz>,
Axel Rasmussen <axelrasmussen@google.com>,
Andrew Morton <akpm@linux-foundation.org>,
James Houghton <jthoughton@google.com>,
Lorenzo Stoakes <lorenzo.stoakes@oracle.com>,
Hugh Dickins <hughd@google.com>, Michal Hocko <mhocko@suse.com>,
Ujwal Kundur <ujwal.kundur@gmail.com>,
Oscar Salvador <osalvador@suse.de>,
Suren Baghdasaryan <surenb@google.com>,
Andrea Arcangeli <aarcange@redhat.com>
Subject: Re: [PATCH v4 0/4] mm/userfaultfd: modulize memory types
Date: Mon, 3 Nov 2025 18:11:26 +0200 [thread overview]
Message-ID: <aQjULib7JriWnVTq@kernel.org> (raw)
In-Reply-To: <nnxhd7zxjza6m4w4lr5qyev2krbkp4yfcgcwq6nkaqrqt6bzpb@iklep2xxp5gv>
Hi Liam,
On Thu, Oct 30, 2025 at 01:13:24PM -0400, Liam R. Howlett wrote:
> * Peter Xu <peterx@redhat.com> [251021 12:28]:
>
> ...
>
> > Can you send some patches and show us the code, help everyone to support
> > guest-memfd minor fault, please?
>
> Patches are here:
>
> https://git.infradead.org/?p=users/jedix/linux-maple.git;a=shortlog;h=refs/heads/modularized_mem
It's really cool you picked up the gauntlet and invested this effort into
refactoring of uffd!
I agree that userfault code begs for cleanups after the sh^W stuff has been
piling over and over, but ...
> This is actually modularized memory types. That means there is no
> hugetlb.h or shmem.h included in mm/userfaultfd.c code.
>
> uffd_flag_t has been removed. This was turning into a middleware and
> it is not necessary. Neither is supported_ioctls.
>
> hugetlb now uses the same functions as every other memory type,
> including anon memory.
>
> Any memory type can change functionality without adding instructions or
> flags or anything to some other code.
>
> This code passes uffd-unit-test and uffd-wp-mremap (skipped the swap
> tests).
>
> guest-memfd can implement whatever it needs to (or use others
> implementations), like shmem_uffd_ops here:
>
> static const struct vm_uffd_ops shmem_uffd_ops = {
> .copy = shmem_mfill_atomic_pte_copy,
> .zeropage = shmem_mfill_atomic_pte_zeropage,
> .cont = shmem_mfill_atomic_pte_continue,
> .poison = mfill_atomic_pte_poison,
> .writeprotect = uffd_writeprotect,
> .is_dst_valid = shmem_is_dst_valid,
> .increment = mfill_size,
> .failed_do_unlock = uffd_failed_do_unlock,
> .page_shift = uffd_page_shift,
> .complete_register = uffd_complete_register,
> };
... I don't think it's the right level of abstraction to add as uffd_ops to
vmap_ops.
As I see it, we have two levels where things are different: hugetlb vs
others at the very core of mfill_atomic() and then how different pte-based
types implement a single page operations, i.e copy/zeropage/continue.
So to separate hugetlb code from userfault we need something like
->get_parent_pagetable()
->pagesize()
->mfill_atomic_page()
and apparently something like your complete_register() and maybe
is_dst_valid().
But to provide hooks for shmem, anon and potentially guest_memfd() we
should be looking at callbacks to get a folio to populate a PTE, either for
copy or continue, and Peter's ->minor_get_folio() seems to me the right
level of abstraction to expose at vm_uffd_ops.
I believe we can extract ->get_folio() and ->put_folio() from
shmem_mfill_atomic_pte() and call them from mfill_atomic_pte_copy().
> Where guest-memfd needs to write the one function:
> guest_memfd_pte_continue(), from what I understand.
>
> Obviously some of the shmem_ functions would need to be added to a
> header, or such.
>
> And most of that can come from shmem_mfill_atomic_pte_continue(), from
> what I understand. This is about 40 lines of code, but may require
> exposing some shmem functions to keep the code that compact.
This seems to me an overkill to implement MFILL_ATOMIC_CONTINUE for
guest_memfd().
I think it should be able to register a callback to provide a singe folio
at a given file offset if that folio is in the guest_memfd's page cache.
No reason for guest_memfd to start re-implementing locking, acquiring of
PMD and updating the page table, even if it only needs to call functions
from userfaultfd
> So we don't need to expose getting a folio to a module, or decode any
> special flags or whatever. We just call the function that needs to be
> called on the vma that is found.
Agree about exposing flags to a module and about limiting API to functions
only.
> Thanks,
> Liam
>
--
Sincerely yours,
Mike.
next prev parent reply other threads:[~2025-11-03 16:11 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-14 23:14 [PATCH v4 0/4] mm/userfaultfd: modulize memory types Peter Xu
2025-10-14 23:14 ` [PATCH v4 1/4] mm: Introduce vm_uffd_ops API Peter Xu
2025-10-20 14:18 ` David Hildenbrand
2025-10-14 23:14 ` [PATCH v4 2/4] mm/shmem: Support " Peter Xu
2025-10-20 14:18 ` David Hildenbrand
2025-10-14 23:15 ` [PATCH v4 3/4] mm/hugetlb: " Peter Xu
2025-10-20 14:19 ` David Hildenbrand
2025-10-14 23:15 ` [PATCH v4 4/4] mm: Apply vm_uffd_ops API to core mm Peter Xu
2025-10-20 13:34 ` [PATCH v4 0/4] mm/userfaultfd: modulize memory types David Hildenbrand
2025-10-20 14:12 ` Peter Xu
2025-10-21 15:51 ` Liam R. Howlett
2025-10-21 16:28 ` Peter Xu
2025-10-30 17:13 ` Liam R. Howlett
2025-10-30 18:00 ` Nikita Kalyazin
2025-10-30 19:07 ` Peter Xu
2025-10-30 19:55 ` Peter Xu
2025-10-30 20:23 ` Lorenzo Stoakes
2025-10-30 21:13 ` Peter Xu
2025-10-30 21:27 ` Peter
2025-11-03 20:01 ` David Hildenbrand (Red Hat)
2025-11-03 20:46 ` Peter Xu
2025-11-03 21:27 ` David Hildenbrand (Red Hat)
2025-11-03 22:49 ` Peter Xu
2025-11-04 7:10 ` Lorenzo Stoakes
2025-11-04 14:18 ` David Hildenbrand (Red Hat)
2025-11-04 7:21 ` Mike Rapoport
2025-11-04 12:23 ` David Hildenbrand (Red Hat)
2025-11-06 16:32 ` Liam R. Howlett
2025-11-09 7:11 ` Mike Rapoport
2025-11-10 16:34 ` Liam R. Howlett
2025-11-11 10:05 ` Mike Rapoport
2025-10-30 20:52 ` Liam R. Howlett
2025-10-30 21:33 ` Peter Xu
2025-10-30 20:24 ` Liam R. Howlett
2025-10-30 21:26 ` Peter Xu
2025-11-03 16:11 ` Mike Rapoport [this message]
2025-11-03 18:43 ` Liam R. Howlett
2025-11-05 21:23 ` David Hildenbrand
2025-11-06 16:16 ` Liam R. Howlett
2025-11-07 10:16 ` David Hildenbrand (Red Hat)
2025-11-07 16:55 ` Liam R. Howlett
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=aQjULib7JriWnVTq@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=david@redhat.com \
--cc=hughd@google.com \
--cc=jthoughton@google.com \
--cc=kalyazin@amazon.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=mhocko@suse.com \
--cc=muchun.song@linux.dev \
--cc=osalvador@suse.de \
--cc=peterx@redhat.com \
--cc=surenb@google.com \
--cc=ujwal.kundur@gmail.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.