On 7/10/26 22:16, Lorenzo Stoakes wrote: > This series performs a series of cleanups and improvements around how the > vma->vm_pgoff field is used. > > Folios belonging to file-backed mappings are simply indexed by the page > offset within the file they map (excepting pfnmap and driver mappings which > sometimes do things different). > > However, anonymous folios belonging to pure anonymous mappings are indexed > by their "virtual" page offset, which is equal to addr >> PAGE_SHIFT at the > time at which the VMA was first faulted in. > > The page offset of a VMA is stored in vma->vm_pgoff and indicates the page > offset of the start of the VMA range, whether it be file-backed or > anonymous. > > The work here both cleans up how we reference this field, as well as laying > the foundations for a future series which addresses the inconsistency of > CoW'd folios in MAP_PRIVATE-file backed mappings, which are indexed as if > they were file-backed but behave as if they were anonymous. > > This future series will make it such that all anonymous folios are indexed > by virtual page offset whether belonging to VMAs who satisfy > vma_is_anonymous() or MAP_PRIVATE-mapped file-backed mappings. > > This series: > > * Exposes vma_start_pgoff() and updates the kernel to use it consistently. > * Adds and uses the useful vma_end_pgoff() helper. > * Parameterises the file-backed mapping helpers vma_interval_tree_*() > by address_space rather than rb_root_cached. > * Renames: the misleadingly-named vma_interval_tree_*() helpers to > mapping_rmap_tree_*() to be consistent with the renamed > anon_rmap_tree_*(). > * Parameterises anon_rmap_tree_*() by anon_vma. > * Moves mm/interval_tree.c to the rmap section. > * Adds vmg_*() helpers for page offset. > * Clarifies the confusing vmg_adjust_set_range() function. > * Introduces linear_page_delta() to provide relative pgoff within a VMA. > * Replaces open-coded versions of linear_page_delta() and > linear_page_index() with invocations of these functions. > * Introduces and uses vma_assert_can_modify() to account for whether a VMA > can be modified (detached or write locked). > * Adds and uses vma_[add,sub]_pgoff() to adjust VMA page offset. > * Moves __install_special_mapping() to vma.c. > * Makes vma_set_range() static and internal to vma.c. > * Introduces and makes use of vma_set_pgoff(). > * Fixes incorrect vma.h header inclusion. > * Defaults VMA userland tests to 64-bit vma flags size. > * Updates VMA userland tests to give better output on failure. > * Various smaller cleanups. > * Updated the vma_set_pgoff() assert to account for MAP_PRIVATE /dev/zero > correctly. > > Signed-off-by: Lorenzo Stoakes <[email protected]>
I only skimmed over the set but should there be any changes required to DMA-buf, amdgpu or radeon driver feel free to add Acked-by: Christian König <[email protected]> and merge upstream through any branch you feel fit. Regards, Christian. > --- > v2: > * Rebased on mm-unstable. > * Updated tags (thanks to everyone and b4 trailers -F -u! ;) > * Updated 1/30 to include the vma_start_pgoff() helper in VMA userland tests, > which was previously causing a bisection hazard on the VMA userland tests. > * Updated 2/30 to reference the pfnmap vma->vm_pgoff PFN abomination as per > David. > * Updated 4/30 to include vma_end_pgoff() helper in VMA userland tests at the > appropriate point. > * Updated 8/30 from mapping_interval_tree_*() to mapping_rmap_tree_*() and add > commit to rename anon_vma_interval-tree_*() to anon_rmap_tree_*() as per > Pedro. > * Fixed issue in 8/30 where the internal helpers were still called > __vma_interval_tree_*() rather than __mapping_rmap_tree_*(). > * Updated 9/30 to separate out the rename and change of parameter type for > clarity as per Gregory. > * Updated 17/30 to put perf_mmap_aux() variables in reverse Christmas tree > order > as per Pedro. > * Updated 19/30 to remove incorrectly placed vma_start_pgoff() invocation as > per > Thomas/Gregory. > * Updated 20/30, 21/30 to put the vma_assert_can_modify() VMA userland test > stub > in the right place as per Pedro. > * Confined the vma_set_pgoff() assert to CONFIG_MMU, as the ever helpful > nommu of course violates all assumptions in this regard. > * Fixed issue in improved ASSERT_[TRUE, FALSE, EQ, NE] test runners with > re-evaluation of input expressions. > * Updated the vma_start_pgoff() comment further to discuss the MAP_PRIVATE > /dev/zero edge case. > * Update the vma_set_pgoff() assert to handle the mmap_region() newly > established file mapping case. > * Updated the linear_page_index() comment to explicitly defer to > vma_start_pgoff() to avoid duplicate information and future bitrot. > * Updated vma_shrink() to no longer accept the useless start parameter, as > it is invoked from relocate_vma_down() only, which has already expanded > the VMA to cover the range [new_start, old_end) thus always shrinks the > tail. > * Moved sanity checks from vma_set_pgoff() to new helper > assert_sane_pgoff() and documented it clearly. > * Fixed issue with nascent file-backed VMAs hitting vma_set_pgoff() assert > by checking for vma_is_anonymous(). > * Moved vma_set_anonymous() earlier so vma_set_pgoff() works with nascent > anonymous VMAs. > * Updated the VMA userland tests so CONFIG_MMU, CONFIG_PER_VMA_LOCK work > with IS_ENABLED(). > > v1: > https://patch.msgid.link/[email protected] > > To: Andrew Morton <[email protected]> > To: David Hildenbrand <[email protected]> > To: "Liam R. Howlett" <[email protected]> > To: Vlastimil Babka <[email protected]> > To: Mike Rapoport <[email protected]> > To: Suren Baghdasaryan <[email protected]> > To: Michal Hocko <[email protected]> > To: Rik van Riel <[email protected]> > To: Harry Yoo <[email protected]> > To: Jann Horn <[email protected]> > To: Lance Yang <[email protected]> > To: Pedro Falcato <[email protected]> > To: Russell King <[email protected]> > To: Dinh Nguyen <[email protected]> > To: Simon Schuster <[email protected]> > To: "James E.J. Bottomley" <[email protected]> > To: Helge Deller <[email protected]> > To: Alexander Viro <[email protected]> > To: Christian Brauner <[email protected]> > To: Jan Kara <[email protected]> > To: Dan Williams <[email protected]> > To: Matthew Wilcox <[email protected]> > To: Muchun Song <[email protected]> > To: Oscar Salvador <[email protected]> > To: Masami Hiramatsu <[email protected]> > To: Oleg Nesterov <[email protected]> > To: Peter Zijlstra <[email protected]> > To: Ingo Molnar <[email protected]> > To: Arnaldo Carvalho de Melo <[email protected]> > To: Namhyung Kim <[email protected]> > To: Mark Rutland <[email protected]> > To: Alexander Shishkin <[email protected]> > To: Jiri Olsa <[email protected]> > To: Ian Rogers <[email protected]> > To: Adrian Hunter <[email protected]> > To: James Clark <[email protected]> > To: Zi Yan <[email protected]> > To: Baolin Wang <[email protected]> > To: Nico Pache <[email protected]> > To: Ryan Roberts <[email protected]> > To: Dev Jain <[email protected]> > To: Barry Song <[email protected]> > To: Miaohe Lin <[email protected]> > To: Naoya Horiguchi <[email protected]> > To: Xu Xin <[email protected]> > To: Chengming Zhou <[email protected]> > To: SJ Park <[email protected]> > To: Matthew Brost <[email protected]> > To: Joshua Hahn <[email protected]> > To: Rakie Kim <[email protected]> > To: Byungchul Park <[email protected]> > To: Gregory Price <[email protected]> > To: Ying Huang <[email protected]> > To: Alistair Popple <[email protected]> > To: Hugh Dickins <[email protected]> > To: Peter Xu <[email protected]> > To: Kees Cook <[email protected]> > To: Marek Szyprowski <[email protected]> > To: Robin Murphy <[email protected]> > To: Andrey Konovalov <[email protected]> > To: Alexander Potapenko <[email protected]> > To: Dmitry Vyukov <[email protected]> > To: Steven Rostedt <[email protected]> > To: Mathieu Desnoyers <[email protected]> > To: Jarkko Sakkinen <[email protected]> > To: Dave Hansen <[email protected]> > To: Thomas Gleixner <[email protected]> > To: Borislav Petkov <[email protected]> > To: [email protected] > To: "H. Peter Anvin" <[email protected]> > To: Ian Abbott <[email protected]> > To: H Hartley Sweeten <[email protected]> > To: Lucas Stach <[email protected]> > To: Christian Gmeiner <[email protected]> > To: David Airlie <[email protected]> > To: Simona Vetter <[email protected]> > To: Patrik Jakobsson <[email protected]> > To: Maarten Lankhorst <[email protected]> > To: Maxime Ripard <[email protected]> > To: Thomas Zimmermann <[email protected]> > To: Rob Clark <[email protected]> > To: Dmitry Baryshkov <[email protected]> > To: Abhinav Kumar <[email protected]> > To: Jessica Zhang <[email protected]> > To: Sean Paul <[email protected]> > To: Marijn Suijten <[email protected]> > To: Tomi Valkeinen <[email protected]> > To: Thierry Reding <[email protected]> > To: Mikko Perttunen <[email protected]> > To: Jonathan Hunter <[email protected]> > To: Christian Koenig <[email protected]> > To: Huang Rui <[email protected]> > To: Matthew Auld <[email protected]> > To: Jason Gunthorpe <[email protected]> > To: Yishai Hadas <[email protected]> > To: Shameer Kolothum <[email protected]> > To: Kevin Tian <[email protected]> > To: Ankit Agrawal <[email protected]> > To: Alex Williamson <[email protected]> > To: Paolo Bonzini <[email protected]> > To: Shakeel Butt <[email protected]> > To: Usama Arif <[email protected]> > Cc: [email protected] > Cc: [email protected] > Cc: [email protected] > Cc: [email protected] > Cc: [email protected] > Cc: [email protected] > Cc: [email protected] > Cc: [email protected] > Cc: [email protected] > Cc: [email protected] > Cc: [email protected] > Cc: [email protected] > Cc: [email protected] > Cc: [email protected] > Cc: [email protected] > Cc: [email protected] > Cc: [email protected] > Cc: [email protected] > Cc: [email protected] > Cc: Russell King <[email protected]> > > --- > Lorenzo Stoakes (33): > mm: move vma_start_pgoff() into mm.h and clean up > mm: add kdoc comments for vma_start/last_pgoff() > tools/testing/vma: use vma_start_pgoff() in merge tests > mm: introduce and use vma_end_pgoff() > mm/rmap: update mm/interval_tree.c comments > mm/rmap: parameterise vma_interval_tree_*() by address_space > mm/rmap: elide unnecessary static inline's in interval_tree.c > mm/rmap: rename vma_interval_tree_*() to mapping_rmap_tree_*() > mm/rmap: parameterise anon_vma_interval_tree_*() by anon_vma > mm/rmap: rename anon_vma_interval_tree_*() params and use pgoff_t > mm/rmap: rename anon_vma_interval_tree_*() to anon_rmap_tree_*() > MAINTAINERS: Move mm/interval_tree.c to rmap section > mm/vma: introduce and use vmg_pages(), vmg_[start, end]_pgoff() > mm/vma: clean up anon_vma_compatible() > mm/vma: refactor vmg_adjust_set_range() for clarity > mm/vma: minor cleanup of expand_[upwards, downwards]() > mm: introduce and use linear_page_delta() > mm/vma: use vma_start_pgoff(), linear_page_index() in mm code > mm: prefer vma_[start,end]_pgoff() to vma->vm_pgoff in kernel/ > mm/vma: remove duplicative vma_pgoff_offset() helper > mm: use linear_page_[index, delta]() consistently > mm/vma: introduce vma_assert_can_modify() > mm/vma: add and use vma_[add/sub]_pgoff() > mm/vma: move __install_special_mapping() to vma.c > mm/vma: make vma_set_range() static, drop insert_vm_struct() decl > mm/vma: update vma_shrink() to not pass start, pgoff parameters > mm/vma: update vmg_adjust_set_range() to offset pgoff instead > mm/vma: slightly rework the anonymous check in __mmap_new_vma() > mm/vma: introduce and use vma_set_pgoff() > mm/vma: correct incorrect vma.h inclusion > mm/vma: use guard clauses in can_vma_merge_[before, after]() > tools/testing/vma: default VMA, mm flag bits to 64-bit > tools/testing/vma: output compared expression on ASSERT_[EQ, NE]() > > MAINTAINERS | 2 +- > arch/arm/mm/fault-armv.c | 4 +- > arch/arm/mm/flush.c | 2 +- > arch/nios2/mm/cacheflush.c | 2 +- > arch/parisc/kernel/cache.c | 2 +- > arch/x86/kernel/cpu/sgx/virt.c | 3 +- > drivers/gpu/drm/etnaviv/etnaviv_gem.c | 3 +- > drivers/gpu/drm/gma500/gem.c | 2 +- > drivers/gpu/drm/msm/msm_gem.c | 3 +- > drivers/gpu/drm/omapdrm/omap_gem.c | 5 +- > drivers/gpu/drm/tegra/gem.c | 3 +- > drivers/gpu/drm/ttm/ttm_bo_vm.c | 7 +- > drivers/vfio/pci/nvgrace-gpu/main.c | 3 +- > drivers/vfio/pci/vfio_pci_core.c | 3 +- > fs/dax.c | 2 +- > fs/hugetlbfs/inode.c | 15 +- > include/linux/huge_mm.h | 1 + > include/linux/hugetlb.h | 3 +- > include/linux/mm.h | 118 ++++++++++---- > include/linux/mmap_lock.h | 8 + > include/linux/pagemap.h | 35 +++- > kernel/dma/coherent.c | 7 +- > kernel/dma/direct.c | 6 +- > kernel/dma/mapping.c | 8 +- > kernel/dma/ops_helpers.c | 4 +- > kernel/events/core.c | 20 +-- > kernel/events/uprobes.c | 13 +- > kernel/kcov.c | 2 +- > kernel/trace/ring_buffer.c | 3 +- > mm/damon/vaddr.c | 5 +- > mm/debug.c | 2 +- > mm/filemap.c | 7 +- > mm/huge_memory.c | 2 +- > mm/hugetlb.c | 15 +- > mm/internal.h | 33 ++-- > mm/interval_tree.c | 111 ++++++++----- > mm/khugepaged.c | 7 +- > mm/ksm.c | 7 +- > mm/madvise.c | 6 +- > mm/mapping_dirty_helpers.c | 2 +- > mm/memory-failure.c | 10 +- > mm/memory.c | 33 ++-- > mm/mempolicy.c | 13 +- > mm/mmap.c | 41 +---- > mm/mmu_notifier.c | 2 +- > mm/mremap.c | 12 +- > mm/msync.c | 4 +- > mm/nommu.c | 22 +-- > mm/pagewalk.c | 4 +- > mm/rmap.c | 14 +- > mm/shmem.c | 9 +- > mm/userfaultfd.c | 4 +- > mm/util.c | 4 +- > mm/vma.c | 293 > ++++++++++++++++++++++------------ > mm/vma.h | 80 ++++++++-- > mm/vma_exec.c | 12 +- > mm/vma_init.c | 6 +- > mm/vma_internal.h | 4 +- > tools/testing/vma/Makefile | 2 +- > tools/testing/vma/include/dup.h | 41 ++++- > tools/testing/vma/include/stubs.h | 16 +- > tools/testing/vma/shared.c | 9 -- > tools/testing/vma/shared.h | 43 +++-- > tools/testing/vma/tests/merge.c | 40 ++--- > tools/testing/vma/vma_internal.h | 4 +- > virt/kvm/guest_memfd.c | 2 +- > 66 files changed, 751 insertions(+), 459 deletions(-) > --- > base-commit: 4a6c88e10a0791d9c3b0677ce984365815c2ab4f > change-id: 20260710-b4-pre-scalable-cow-24309015dee4 > > Cheers,
