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,

Reply via email to