[PATCH 00/20] mm/vma: convert vm_flags_t to vma_flags_t in vma code
Lorenzo Stoakes (Oracle)
ljs at kernel.org
Fri Mar 13 06:15:58 AEDT 2026
This series converts a lot of the existing use of the legacy vm_flags_t
data type to the new vma_flags_t type which replaces it.
In order to do so it adds a number of additional helpers:
* vma_flags_empty() - Determines whether a vma_flags_t value has no bits
set.
* vma_flags_and() - Performs a bitwise AND between two vma_flags_t values.
* vma_flags_diff_pair() - Determines which flags are not shared between a
pair of VMA flags (typically non-constant values)
* append_vma_flags() - Similar to mk_vma_flags(), but allows a vma_flags_t
value to be specified (typically a constant value) which will be copied
and appended to to create a new vma_flags_t value, with additional flags
specified to append to it.
* vma_flags_same() - Determines if a vma_flags_t value is exactly equal to
a set of VMA flags.
* vma_flags_same_mask() - Determines if a vma_flags_t value is eactly equal
to another vma_flags_t value (typically constant).
* vma_flags_same_pair() - Determines if a pair of vma_flags_t values are
exactly equal to one another (typically both non-constant).
* vma_flags_to_legacy() - Converts a vma_flags_t value to a vm_flags_t
value, used to enable more iterative introduction of the use of
vma_flags_t.
* legacy_to_vma_flags() - Converts a vm_flags_t value to a vma_flags-t
value, for the same purpose.
* vma_test() - Tests whether a VMA's flags contain s specific singular VMA
flag.
* vma_test_any() - Tests whether a VMA's flags contain any of a set of VMA
flags.
* vma_test_any_mask() - Tests whether a VMA's flags contain any of the
flags specified in another, typically constant, vma_flags_t value.
* vma_clear_flags() - Clears a specific set of VMA flags from a vma_flags_t
value.
* vma_clear_flags_mask() - Clears those flag set in a vma_flags_t value
(typically constant) from a (typically not constant) vma_flags_t value.
The series mostly focuses on the the VMA specific code, especially that
contained in mm/vma.c and mm/vma.h.
It updates both brk() and mmap() logic to utils vma_flags_t values as much
as is practiaclly possible at this point, changing surrounding logic to be
able to do so.
It also updates the vma_modify_xxx() functions where they interact with VMA
flags directly to use vm_flags_t values where possible.
There is extensive testing added in the VMA userland tests to assert that
all of these new VMA flag functions work correctly.
Lorenzo Stoakes (Oracle) (20):
mm/vma: add vma_flags_empty(), vma_flags_and(), vma_flags_diff_pair()
tools/testing/vma: add unit tests flag empty, diff_pair, and[_mask]
mm/vma: add further vma_flags_t unions
tools/testing/vma: convert bulk of test code to vma_flags_t
mm/vma: use new VMA flags for sticky flags logic
tools/testing/vma: fix VMA flag tests
mm/vma: add append_vma_flags() helper
tools/testing/vma: add simple test for append_vma_flags()
mm: unexport vm_brk_flags() and eliminate vm_flags parameter
mm/vma: introduce vma_flags_same[_mask/_pair]()
mm/vma: introduce [vma_flags,legacy]_to_[legacy,vma_flags]() helpers
tools/testing/vma: test that legacy flag helpers work correctly
mm: convert do_brk_flags() to use vma_flags_t
mm/vma: introduce vma_test[_any[_mask]](), and make inlining
consistent
tools/testing/vma: update VMA flag tests to test vma_test[_any_mask]()
mm/vma: introduce vma_clear_flags[_mask]()
tools/testing/vma: update VMA tests to test vma_clear_flags[_mask]()
mm/vma: convert as much as we can in mm/vma.c to vma_flags_t
mm/vma: convert vma_modify_flags[_uffd]() to use vma_flags_t
mm/vma: convert __mmap_region() to use vma_flags_t
arch/arc/include/asm/page.h | 2 +-
arch/arm/include/asm/page.h | 2 +-
arch/arm64/include/asm/page.h | 3 +-
arch/hexagon/include/asm/page.h | 2 +-
arch/loongarch/include/asm/page.h | 2 +-
arch/mips/include/asm/page.h | 2 +-
arch/nios2/include/asm/page.h | 2 +-
arch/powerpc/include/asm/page.h | 4 +-
arch/powerpc/include/asm/page_32.h | 2 +-
arch/powerpc/include/asm/page_64.h | 12 +-
arch/riscv/include/asm/page.h | 2 +-
arch/s390/include/asm/page.h | 2 +-
arch/x86/include/asm/page_types.h | 2 +-
arch/x86/um/asm/vm-flags.h | 4 +-
fs/binfmt_elf.c | 3 +-
include/linux/ksm.h | 10 +-
include/linux/mm.h | 282 ++++++++++++++++++++------
include/linux/mm_types.h | 52 ++++-
include/linux/mman.h | 49 -----
include/linux/userfaultfd_k.h | 3 +
mm/internal.h | 3 +
mm/ksm.c | 43 ++--
mm/madvise.c | 10 +-
mm/mlock.c | 42 ++--
mm/mmap.c | 19 +-
mm/mprotect.c | 53 +++--
mm/mremap.c | 6 +-
mm/mseal.c | 10 +-
mm/userfaultfd.c | 21 +-
mm/vma.c | 216 ++++++++++++--------
mm/vma.h | 86 ++++++--
mm/vma_exec.c | 5 +-
security/selinux/hooks.c | 4 +-
tools/include/linux/bitmap.h | 13 ++
tools/lib/bitmap.c | 10 +
tools/testing/vma/include/custom.h | 19 --
tools/testing/vma/include/dup.h | 262 +++++++++++++++++-------
tools/testing/vma/include/stubs.h | 11 +-
tools/testing/vma/shared.c | 8 +-
tools/testing/vma/shared.h | 22 +-
tools/testing/vma/tests/merge.c | 311 +++++++++++++++--------------
tools/testing/vma/tests/mmap.c | 18 +-
tools/testing/vma/tests/vma.c | 303 +++++++++++++++++++++++++---
43 files changed, 1307 insertions(+), 630 deletions(-)
--
2.53.0
More information about the Linuxppc-dev
mailing list