From: "Mike Rapoport (Microsoft)" <[email protected]>

vma_can_userfault() has grown pretty big and it's not called on
performance critical path.

Move it out of line.

No functional changes.

Signed-off-by: Mike Rapoport (Microsoft) <[email protected]>
---
 include/linux/userfaultfd_k.h | 36 ++---------------------------------
 mm/userfaultfd.c              | 34 +++++++++++++++++++++++++++++++++
 2 files changed, 36 insertions(+), 34 deletions(-)

diff --git a/include/linux/userfaultfd_k.h b/include/linux/userfaultfd_k.h
index c0e716aec26a..e4f43e7b063f 100644
--- a/include/linux/userfaultfd_k.h
+++ b/include/linux/userfaultfd_k.h
@@ -208,40 +208,8 @@ static inline bool userfaultfd_armed(struct vm_area_struct 
*vma)
        return vma->vm_flags & __VM_UFFD_FLAGS;
 }
 
-static inline bool vma_can_userfault(struct vm_area_struct *vma,
-                                    vm_flags_t vm_flags,
-                                    bool wp_async)
-{
-       vm_flags &= __VM_UFFD_FLAGS;
-
-       if (vma->vm_flags & VM_DROPPABLE)
-               return false;
-
-       if ((vm_flags & VM_UFFD_MINOR) &&
-           (!is_vm_hugetlb_page(vma) && !vma_is_shmem(vma)))
-               return false;
-
-       /*
-        * If wp async enabled, and WP is the only mode enabled, allow any
-        * memory type.
-        */
-       if (wp_async && (vm_flags == VM_UFFD_WP))
-               return true;
-
-#ifndef CONFIG_PTE_MARKER_UFFD_WP
-       /*
-        * If user requested uffd-wp but not enabled pte markers for
-        * uffd-wp, then shmem & hugetlbfs are not supported but only
-        * anonymous.
-        */
-       if ((vm_flags & VM_UFFD_WP) && !vma_is_anonymous(vma))
-               return false;
-#endif
-
-       /* By default, allow any of anon|shmem|hugetlb */
-       return vma_is_anonymous(vma) || is_vm_hugetlb_page(vma) ||
-           vma_is_shmem(vma);
-}
+bool vma_can_userfault(struct vm_area_struct *vma, vm_flags_t vm_flags,
+                      bool wp_async);
 
 static inline bool vma_has_uffd_without_event_remap(struct vm_area_struct *vma)
 {
diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c
index af61b95c89e4..8dc964389b0d 100644
--- a/mm/userfaultfd.c
+++ b/mm/userfaultfd.c
@@ -1977,6 +1977,40 @@ ssize_t move_pages(struct userfaultfd_ctx *ctx, unsigned 
long dst_start,
        return moved ? moved : err;
 }
 
+bool vma_can_userfault(struct vm_area_struct *vma, vm_flags_t vm_flags,
+                      bool wp_async)
+{
+       vm_flags &= __VM_UFFD_FLAGS;
+
+       if (vma->vm_flags & VM_DROPPABLE)
+               return false;
+
+       if ((vm_flags & VM_UFFD_MINOR) &&
+           (!is_vm_hugetlb_page(vma) && !vma_is_shmem(vma)))
+               return false;
+
+       /*
+        * If wp async enabled, and WP is the only mode enabled, allow any
+        * memory type.
+        */
+       if (wp_async && (vm_flags == VM_UFFD_WP))
+               return true;
+
+#ifndef CONFIG_PTE_MARKER_UFFD_WP
+       /*
+        * If user requested uffd-wp but not enabled pte markers for
+        * uffd-wp, then shmem & hugetlbfs are not supported but only
+        * anonymous.
+        */
+       if ((vm_flags & VM_UFFD_WP) && !vma_is_anonymous(vma))
+               return false;
+#endif
+
+       /* By default, allow any of anon|shmem|hugetlb */
+       return vma_is_anonymous(vma) || is_vm_hugetlb_page(vma) ||
+           vma_is_shmem(vma);
+}
+
 static void userfaultfd_set_vm_flags(struct vm_area_struct *vma,
                                     vm_flags_t vm_flags)
 {
-- 
2.50.1


Reply via email to