]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm/userfaultfd: Change copy prototype in uffd_ops
authorLiam R. Howlett <Liam.Howlett@oracle.com>
Tue, 28 Oct 2025 16:42:48 +0000 (12:42 -0400)
committerLiam R. Howlett <Liam.Howlett@oracle.com>
Thu, 30 Oct 2025 16:47:35 +0000 (12:47 -0400)
Pass a boolean for write protection instead of flags to be decoded for
only the write protection check.

Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
include/linux/userfaultfd_k.h
mm/hugetlb.c
mm/shmem.c
mm/userfaultfd.c

index 83bb7a5397dacbf71967dcb110529a215968b460..899ca7fb65ff90038e90ebd2939ee262890fd527 100644 (file)
@@ -99,7 +99,7 @@ ssize_t uffd_failed_do_unlock(struct userfaultfd_ctx *ctx,
 
 struct vm_uffd_ops {
        int (*copy)(struct vm_area_struct *dst_vma, unsigned long dst_addr,
-                   unsigned long src_addr, uffd_flags_t flags,
+                   unsigned long src_addr, bool wp,
                    struct folio **foliop, unsigned long increment);
        int (*zeropage)(struct vm_area_struct *dst_vma, unsigned long dst_addr);
        int (*cont)(struct vm_area_struct *dst_vma, unsigned long dst_addr,
@@ -246,7 +246,7 @@ int mfill_atomic_pte_continue(struct vm_area_struct *dst_vma,
 
 int mfill_atomic_pte_copy(struct vm_area_struct *dst_vma,
                unsigned long dst_addr, unsigned long src_addr,
-               uffd_flags_t flags, struct folio **foliop,
+               bool wp, struct folio **foliop,
                unsigned long increment);
 
 int mfill_atomic_pte_zeropage(struct vm_area_struct *dst_vma,
index 55c0beb9107ad18666182191db82fa63876bc96f..4f736d7c4efd6511b6d89b264527867c435d3fe4 100644 (file)
@@ -5538,7 +5538,7 @@ static int hugetlb_mfill_pte_continue(struct vm_area_struct *dst_vma,
 
 static int hugetlb_mfill_atomic_pte_copy(struct vm_area_struct *dst_vma,
                unsigned long dst_addr, unsigned long src_addr,
-               uffd_flags_t flags, struct folio **foliop,
+               bool wp_enabled, struct folio **foliop,
                unsigned long increment);
 
 static const struct vm_uffd_ops hugetlb_uffd_ops = {
@@ -7160,11 +7160,10 @@ out_release_unlock:
  */
 static int hugetlb_mfill_atomic_pte_copy(struct vm_area_struct *dst_vma,
                unsigned long dst_addr, unsigned long src_addr,
-               uffd_flags_t flags, struct folio **foliop,
+               bool wp_enabled, struct folio **foliop,
                unsigned long increment)
 {
        struct mm_struct *dst_mm = dst_vma->vm_mm;
-       bool wp_enabled = (flags & MFILL_ATOMIC_WP);
        struct hstate *h = hstate_vma(dst_vma);
        struct address_space *mapping = dst_vma->vm_file->f_mapping;
        pgoff_t idx = vma_hugecache_offset(h, dst_vma, dst_addr);
index 2a51fb8719e8a35a22324d882f9c8db3f977c1b5..c049d2c2594625e236e7fbde33b1fe9a66d4c066 100644 (file)
@@ -3236,7 +3236,7 @@ static int shmem_mfill_atomic_pte_zeropage(struct vm_area_struct *dst_vma,
 
 static int shmem_mfill_atomic_pte_copy(struct vm_area_struct *dst_vma,
                unsigned long dst_addr, unsigned long src_addr,
-               uffd_flags_t flags, struct folio **foliop,
+               bool wp, struct folio **foliop,
                unsigned long increment)
 {
        struct inode *inode = file_inode(dst_vma->vm_file);
index 3a7ada8288174b6fe82ef861937545bfbc101e1e..5d9385bd35f24b6f872d59457c6a9423f28cd858 100644 (file)
@@ -271,7 +271,7 @@ inline int uffd_atomic_pte_copy(struct folio *folio, unsigned long src_addr)
 
 int mfill_atomic_pte_copy(struct vm_area_struct *dst_vma,
                unsigned long dst_addr, unsigned long src_addr,
-               uffd_flags_t flags, struct folio **foliop,
+               bool wp, struct folio **foliop,
                unsigned long increment)
 {
        int ret;
@@ -312,7 +312,7 @@ int mfill_atomic_pte_copy(struct vm_area_struct *dst_vma,
                goto out_release;
 
        ret = mfill_atomic_install_pte(dst_pmd, dst_vma, dst_addr,
-                                      &folio->page, true, flags & MFILL_ATOMIC_WP);
+                                      &folio->page, true, wp);
        if (ret)
                goto out_release;
 out:
@@ -703,7 +703,8 @@ retry:
                        err = uffd_ops->cont(dst_vma, dst_addr, flags,
                                             increment);
                } else if (uffd_flags_mode_is(flags, MFILL_ATOMIC_COPY)) {
-                       err = uffd_ops->copy(dst_vma, dst_addr, src_addr, flags,
+                       err = uffd_ops->copy(dst_vma, dst_addr, src_addr,
+                                            flags & MFILL_ATOMIC_WP,
                                             &folio, increment);
                        /*
                         * The normal page fault path for a shmem will invoke