* Mike Rapoport <[email protected]> [251125 13:39]: > 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. > > Reviewed-by: David Hildenbrand (Red Hat) <[email protected]> > Signed-off-by: Mike Rapoport (Microsoft) <[email protected]>
Reviewed-by: Liam R. Howlett <[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 >

