Re: [PATCH v6 04/15] userfaultfd: test uffd VMA flags through the vma_flags_t API
From: Lorenzo Stoakes
Date: Wed Jun 03 2026 - 09:00:43 EST
On Fri, May 29, 2026 at 06:26:33PM +0100, Kiryl Shutsemau (Meta) wrote:
> The uffd VMA-flag helpers read vma->vm_flags directly. Now that
> config-gated per-mode masks exist, switch them to the vma_flags_t
> accessor vma_test_any_mask(), which is the going-forward API and keeps a
> single place (the VMA_UFFD_* masks) that knows which modes are available
> on the current build.
>
> No functional change: vma_flags_t is in union with vm_flags, so the same
> bits are read, and the masks fold to the same code the open-coded
> vm_flags tests produced -- verified identical on gcc and clang, 32- and
> 64-bit.
>
> Suggested-by: Lorenzo Stoakes <ljs@xxxxxxxxxx>
> Signed-off-by: Kiryl Shutsemau <kas@xxxxxxxxxx>
Thanks, LGTM so:
Reviewed-by: Lorenzo Stoakes <ljs@xxxxxxxxxx>
> Assisted-by: Claude:claude-opus-4-8
> ---
> include/linux/userfaultfd_k.h | 14 ++++++++------
> 1 file changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/include/linux/userfaultfd_k.h b/include/linux/userfaultfd_k.h
> index 658740df2978..c4f2cc6dfcf0 100644
> --- a/include/linux/userfaultfd_k.h
> +++ b/include/linux/userfaultfd_k.h
> @@ -178,7 +178,8 @@ static inline bool is_mergeable_vm_userfaultfd_ctx(struct vm_area_struct *vma,
> */
> static inline bool uffd_disable_huge_pmd_share(struct vm_area_struct *vma)
> {
> - return vma->vm_flags & (VM_UFFD_WP | VM_UFFD_MINOR);
> + return vma_test_any_mask(vma,
> + mk_vma_flags_from_masks(VMA_UFFD_WP, VMA_UFFD_MINOR));
> }
>
> /*
> @@ -190,22 +191,23 @@ static inline bool uffd_disable_huge_pmd_share(struct vm_area_struct *vma)
> */
> static inline bool uffd_disable_fault_around(struct vm_area_struct *vma)
> {
> - return vma->vm_flags & (VM_UFFD_WP | VM_UFFD_MINOR);
> + return vma_test_any_mask(vma,
> + mk_vma_flags_from_masks(VMA_UFFD_WP, VMA_UFFD_MINOR));
> }
>
> static inline bool userfaultfd_missing(struct vm_area_struct *vma)
> {
> - return vma->vm_flags & VM_UFFD_MISSING;
> + return vma_test_any_mask(vma, VMA_UFFD_MISSING);
> }
>
> static inline bool userfaultfd_wp(struct vm_area_struct *vma)
> {
> - return vma->vm_flags & VM_UFFD_WP;
> + return vma_test_any_mask(vma, VMA_UFFD_WP);
> }
>
> static inline bool userfaultfd_minor(struct vm_area_struct *vma)
> {
> - return vma->vm_flags & VM_UFFD_MINOR;
> + return vma_test_any_mask(vma, VMA_UFFD_MINOR);
> }
>
> static inline bool userfaultfd_pte_wp(struct vm_area_struct *vma,
> @@ -222,7 +224,7 @@ static inline bool userfaultfd_huge_pmd_wp(struct vm_area_struct *vma,
>
> static inline bool userfaultfd_armed(struct vm_area_struct *vma)
> {
> - return vma->vm_flags & __VM_UFFD_FLAGS;
> + return vma_test_any_mask(vma, __VMA_UFFD_FLAGS);
> }
>
> static inline bool vma_has_uffd_without_event_remap(struct vm_area_struct *vma)
> --
> 2.54.0
>