From: Lorenzo Stoakes <ljs@kernel.org>
To: Andrew Morton <akpm@linux-foundation.org>,
David Hildenbrand <david@kernel.org>,
"Liam R. Howlett" <liam@infradead.org>,
Vlastimil Babka <vbabka@kernel.org>,
Mike Rapoport <rppt@kernel.org>,
Suren Baghdasaryan <surenb@google.com>,
Michal Hocko <mhocko@suse.com>, Rik van Riel <riel@surriel.com>,
Harry Yoo <harry@kernel.org>, Jann Horn <jannh@google.com>,
Lance Yang <lance.yang@linux.dev>,
Pedro Falcato <pfalcato@suse.de>,
Russell King <linux@armlinux.org.uk>,
Dinh Nguyen <dinguyen@kernel.org>,
Simon Schuster <schuster.simon@siemens-energy.com>,
"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
Helge Deller <deller@gmx.de>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Christian Brauner <brauner@kernel.org>, Jan Kara <jack@suse.cz>,
Dan Williams <djbw@kernel.org>,
Matthew Wilcox <willy@infradead.org>,
Muchun Song <muchun.song@linux.dev>,
Oscar Salvador <osalvador@suse.de>,
Masami Hiramatsu <mhiramat@kernel.org>,
Oleg Nesterov <oleg@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Namhyung Kim <namhyung@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@kernel.org>, Ian Rogers <irogers@google.com>,
Adrian Hunter <adrian.hunter@intel.com>,
James Clark <james.clark@linaro.org>, Zi Yan <ziy@nvidia.com>,
Baolin Wang <baolin.wang@linux.alibaba.com>,
Nico Pache <npache@redhat.com>,
Ryan Roberts <ryan.roberts@arm.com>, Dev Jain <dev.jain@arm.com>,
Barry Song <baohua@kernel.org>,
Miaohe Lin <linmiaohe@huawei.com>,
Naoya Horiguchi <nao.horiguchi@gmail.com>,
Xu Xin <xu.xin16@zte.com.cn>,
Chengming Zhou <chengming.zhou@linux.dev>,
SJ Park <sj@kernel.org>, Matthew Brost <matthew.brost@intel.com>,
Joshua Hahn <joshua.hahnjy@gmail.com>,
Rakie Kim <rakie.kim@sk.com>, Byungchul Park <byungchul@sk.com>,
Gregory Price <gourry@gourry.net>,
Ying Huang <ying.huang@linux.alibaba.com>,
Alistair Popple <apopple@nvidia.com>,
Hugh Dickins <hughd@google.com>, Peter Xu <peterx@redhat.com>,
Kees Cook <kees@kernel.org>,
Marek Szyprowski <m.szyprowski@samsung.com>,
Robin Murphy <robin.murphy@arm.com>,
Andrey Konovalov <andreyknvl@gmail.com>,
Alexander Potapenko <glider@google.com>,
Dmitry Vyukov <dvyukov@google.com>,
Steven Rostedt <rostedt@goodmis.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Jarkko Sakkinen <jarkko@kernel.org>,
Dave Hansen <dave.hansen@linux.intel.com>,
Thomas Gleixner <tglx@kernel.org>,
Borislav Petkov <bp@alien8.de>,
x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
Ian Abbott <abbotti@mev.co.uk>,
H Hartley Sweeten <hsweeten@visionengravers.com>,
Lucas Stach <l.stach@pengutronix.de>,
Christian Gmeiner <christian.gmeiner@gmail.com>,
David Airlie <airlied@gmail.com>,
Simona Vetter <simona@ffwll.ch>,
Patrik Jakobsson <patrik.r.jakobsson@gmail.com>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
Rob Clark <robin.clark@oss.qualcomm.com>,
Dmitry Baryshkov <lumag@kernel.org>,
Abhinav Kumar <abhinav.kumar@linux.dev>,
Jessica Zhang <jesszhan0024@gmail.com>,
Sean Paul <sean@poorly.run>,
Marijn Suijten <marijn.suijten@somainline.org>,
Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>,
Thierry Reding <thierry.reding@kernel.org>,
Mikko Perttunen <mperttunen@nvidia.com>,
Jonathan Hunter <jonathanh@nvidia.com>,
Christian Koenig <christian.koenig@amd.com>,
Huang Rui <ray.huang@amd.com>,
Matthew Auld <matthew.auld@intel.com>,
Jason Gunthorpe <jgg@ziepe.ca>,
Yishai Hadas <yishaih@nvidia.com>,
Shameer Kolothum <skolothumtho@nvidia.com>,
Kevin Tian <kevin.tian@intel.com>,
Ankit Agrawal <ankita@nvidia.com>,
Alex Williamson <alex@shazbot.org>,
Paolo Bonzini <pbonzini@redhat.com>,
Shakeel Butt <shakeel.butt@linux.dev>,
Usama Arif <usama.arif@linux.dev>
Cc: Lorenzo Stoakes <ljs@kernel.org>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-parisc@vger.kernel.org, linux-fsdevel@vger.kernel.org,
nvdimm@lists.linux.dev, linux-perf-users@vger.kernel.org,
linux-trace-kernel@vger.kernel.org, damon@lists.linux.dev,
iommu@lists.linux.dev, kasan-dev@googlegroups.com,
linux-sgx@vger.kernel.org, etnaviv@lists.freedesktop.org,
dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org,
freedreno@lists.freedesktop.org, linux-tegra@vger.kernel.org,
kvm@vger.kernel.org,
Russell King <linux+etnaviv@armlinux.org.uk>
Subject: [PATCH v2 23/33] mm/vma: add and use vma_[add/sub]_pgoff()
Date: Fri, 10 Jul 2026 21:17:04 +0100 [thread overview]
Message-ID: <20260710-b4-pre-scalable-cow-v2-23-2a5aa403d977@kernel.org> (raw)
In-Reply-To: <20260710-b4-pre-scalable-cow-v2-0-2a5aa403d977@kernel.org>
Add helpers for adding or subtracting to a VMA's page offset, exposed
internally for VMA users within mm in mm/vma.h.
This is to lay the foundations for tracking anonymous page offset for
MAP_PRIVATE file-backed mappings, where adding and subtracting from this
value must be reflected in both the file and anonymous offsets.
These are used on VMA split and downward stack expansion.
No functional change intended.
Reviewed-by: Pedro Falcato <pfalcato@suse.de>
Signed-off-by: Lorenzo Stoakes <ljs@kernel.org>
---
mm/nommu.c | 6 ++++--
mm/vma.c | 6 +++---
mm/vma.h | 12 ++++++++++++
3 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/mm/nommu.c b/mm/nommu.c
index c0a0869cd0d6..2a0136f6081d 100644
--- a/mm/nommu.c
+++ b/mm/nommu.c
@@ -41,6 +41,7 @@
#include <asm/tlbflush.h>
#include <asm/mmu_context.h>
#include "internal.h"
+#include "vma.h"
unsigned long highest_memmap_pfn;
int heap_stack_gap = 0;
@@ -1361,7 +1362,8 @@ static int split_vma(struct vma_iterator *vmi, struct vm_area_struct *vma,
region->vm_top = region->vm_end = new->vm_end = addr;
} else {
region->vm_start = new->vm_start = addr;
- region->vm_pgoff = new->vm_pgoff += npages;
+ vma_add_pgoff(new, npages);
+ region->vm_pgoff = vma_start_pgoff(new);
}
vma_iter_config(vmi, new->vm_start, new->vm_end);
@@ -1378,7 +1380,7 @@ static int split_vma(struct vma_iterator *vmi, struct vm_area_struct *vma,
delete_nommu_region(vma->vm_region);
if (new_below) {
vma->vm_region->vm_start = vma->vm_start = addr;
- vma->vm_pgoff += npages;
+ vma_add_pgoff(vma, npages);
vma->vm_region->vm_pgoff = vma_start_pgoff(vma);
} else {
vma->vm_region->vm_end = vma->vm_end = addr;
diff --git a/mm/vma.c b/mm/vma.c
index 7aa0149f076c..bdd99ba56b4d 100644
--- a/mm/vma.c
+++ b/mm/vma.c
@@ -517,7 +517,7 @@ __split_vma(struct vma_iterator *vmi, struct vm_area_struct *vma,
new->vm_end = addr;
} else {
new->vm_start = addr;
- new->vm_pgoff += linear_page_delta(vma, addr);
+ vma_add_pgoff(new, linear_page_delta(vma, addr));
}
err = -ENOMEM;
@@ -556,7 +556,7 @@ __split_vma(struct vma_iterator *vmi, struct vm_area_struct *vma,
if (new_below) {
vma->vm_start = addr;
- vma->vm_pgoff += (addr - new->vm_start) >> PAGE_SHIFT;
+ vma_add_pgoff(vma, (addr - new->vm_start) >> PAGE_SHIFT);
} else {
vma->vm_end = addr;
}
@@ -3305,7 +3305,7 @@ int expand_downwards(struct vm_area_struct *vma, unsigned long address)
vm_stat_account(mm, vma->vm_flags, grow);
anon_rmap_tree_pre_update_vma(vma);
vma->vm_start = address;
- vma->vm_pgoff -= grow;
+ vma_sub_pgoff(vma, grow);
/* Overwrite old entry in mtree. */
vma_iter_store_overwrite(&vmi, vma);
anon_rmap_tree_post_update_vma(vma);
diff --git a/mm/vma.h b/mm/vma.h
index 2342516ce00e..47fe35e5307e 100644
--- a/mm/vma.h
+++ b/mm/vma.h
@@ -247,6 +247,18 @@ static inline pgoff_t vmg_end_pgoff(const struct vma_merge_struct *vmg)
return vmg_start_pgoff(vmg) + vmg_pages(vmg);
}
+static inline void vma_add_pgoff(struct vm_area_struct *vma, pgoff_t delta)
+{
+ vma_assert_can_modify(vma);
+ vma->vm_pgoff += delta;
+}
+
+static inline void vma_sub_pgoff(struct vm_area_struct *vma, pgoff_t delta)
+{
+ vma_assert_can_modify(vma);
+ vma->vm_pgoff -= delta;
+}
+
#define VMG_STATE(name, mm_, vmi_, start_, end_, vma_flags_, pgoff_) \
struct vma_merge_struct name = { \
.mm = mm_, \
--
2.55.0
next prev parent reply other threads:[~2026-07-10 20:26 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-10 20:16 [PATCH v2 00/33] mm: make VMA page offset handling more consistent Lorenzo Stoakes
2026-07-10 20:16 ` [PATCH v2 01/33] mm: move vma_start_pgoff() into mm.h and clean up Lorenzo Stoakes
2026-07-10 20:16 ` [PATCH v2 02/33] mm: add kdoc comments for vma_start/last_pgoff() Lorenzo Stoakes
2026-07-10 20:16 ` [PATCH v2 03/33] tools/testing/vma: use vma_start_pgoff() in merge tests Lorenzo Stoakes
2026-07-10 20:16 ` [PATCH v2 04/33] mm: introduce and use vma_end_pgoff() Lorenzo Stoakes
2026-07-10 20:16 ` [PATCH v2 05/33] mm/rmap: update mm/interval_tree.c comments Lorenzo Stoakes
2026-07-10 20:16 ` [PATCH v2 06/33] mm/rmap: parameterise vma_interval_tree_*() by address_space Lorenzo Stoakes
2026-07-10 20:16 ` [PATCH v2 07/33] mm/rmap: elide unnecessary static inline's in interval_tree.c Lorenzo Stoakes
2026-07-10 20:16 ` [PATCH v2 08/33] mm/rmap: rename vma_interval_tree_*() to mapping_rmap_tree_*() Lorenzo Stoakes
2026-07-10 20:16 ` [PATCH v2 09/33] mm/rmap: parameterise anon_vma_interval_tree_*() by anon_vma Lorenzo Stoakes
2026-07-10 21:12 ` Gregory Price
2026-07-10 20:16 ` [PATCH v2 10/33] mm/rmap: rename anon_vma_interval_tree_*() params and use pgoff_t Lorenzo Stoakes
2026-07-10 21:14 ` Gregory Price
2026-07-10 20:16 ` [PATCH v2 11/33] mm/rmap: rename anon_vma_interval_tree_*() to anon_rmap_tree_*() Lorenzo Stoakes
2026-07-10 21:16 ` Gregory Price
2026-07-10 20:16 ` [PATCH v2 12/33] MAINTAINERS: Move mm/interval_tree.c to rmap section Lorenzo Stoakes
2026-07-10 20:16 ` [PATCH v2 13/33] mm/vma: introduce and use vmg_pages(), vmg_[start, end]_pgoff() Lorenzo Stoakes
2026-07-10 20:16 ` [PATCH v2 14/33] mm/vma: clean up anon_vma_compatible() Lorenzo Stoakes
2026-07-10 20:16 ` [PATCH v2 15/33] mm/vma: refactor vmg_adjust_set_range() for clarity Lorenzo Stoakes
2026-07-10 20:16 ` [PATCH v2 16/33] mm/vma: minor cleanup of expand_[upwards, downwards]() Lorenzo Stoakes
2026-07-10 20:16 ` [PATCH v2 17/33] mm: introduce and use linear_page_delta() Lorenzo Stoakes
2026-07-10 20:16 ` [PATCH v2 18/33] mm/vma: use vma_start_pgoff(), linear_page_index() in mm code Lorenzo Stoakes
2026-07-10 20:17 ` [PATCH v2 19/33] mm: prefer vma_[start,end]_pgoff() to vma->vm_pgoff in kernel/ Lorenzo Stoakes
2026-07-10 20:17 ` [PATCH v2 20/33] mm/vma: remove duplicative vma_pgoff_offset() helper Lorenzo Stoakes
2026-07-10 20:17 ` [PATCH v2 21/33] mm: use linear_page_[index, delta]() consistently Lorenzo Stoakes
2026-07-10 20:17 ` [PATCH v2 22/33] mm/vma: introduce vma_assert_can_modify() Lorenzo Stoakes
2026-07-10 21:24 ` Gregory Price
2026-07-10 20:17 ` Lorenzo Stoakes [this message]
2026-07-10 21:17 ` [PATCH v2 23/33] mm/vma: add and use vma_[add/sub]_pgoff() Gregory Price
2026-07-10 20:17 ` [PATCH v2 24/33] mm/vma: move __install_special_mapping() to vma.c Lorenzo Stoakes
2026-07-10 20:17 ` [PATCH v2 25/33] mm/vma: make vma_set_range() static, drop insert_vm_struct() decl Lorenzo Stoakes
2026-07-10 20:17 ` [PATCH v2 26/33] mm/vma: update vma_shrink() to not pass start, pgoff parameters Lorenzo Stoakes
2026-07-10 21:20 ` Gregory Price
2026-07-10 20:17 ` [PATCH v2 27/33] mm/vma: update vmg_adjust_set_range() to offset pgoff instead Lorenzo Stoakes
2026-07-10 20:17 ` [PATCH v2 28/33] mm/vma: slightly rework the anonymous check in __mmap_new_vma() Lorenzo Stoakes
2026-07-10 21:39 ` Gregory Price
2026-07-10 20:17 ` [PATCH v2 29/33] mm/vma: introduce and use vma_set_pgoff() Lorenzo Stoakes
2026-07-10 21:26 ` Gregory Price
2026-07-10 20:17 ` [PATCH v2 30/33] mm/vma: correct incorrect vma.h inclusion Lorenzo Stoakes
2026-07-10 20:17 ` [PATCH v2 31/33] mm/vma: use guard clauses in can_vma_merge_[before, after]() Lorenzo Stoakes
2026-07-10 20:17 ` [PATCH v2 32/33] tools/testing/vma: default VMA, mm flag bits to 64-bit Lorenzo Stoakes
2026-07-10 20:17 ` [PATCH v2 33/33] tools/testing/vma: output compared expression on ASSERT_[EQ, NE]() Lorenzo Stoakes
2026-07-10 22:45 ` [PATCH v2 00/33] mm: make VMA page offset handling more consistent Andrew Morton
2026-07-11 6:29 ` Lorenzo Stoakes
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260710-b4-pre-scalable-cow-v2-23-2a5aa403d977@kernel.org \
--to=ljs@kernel.org \
--cc=James.Bottomley@HansenPartnership.com \
--cc=abbotti@mev.co.uk \
--cc=abhinav.kumar@linux.dev \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=airlied@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=alex@shazbot.org \
--cc=alexander.shishkin@linux.intel.com \
--cc=andreyknvl@gmail.com \
--cc=ankita@nvidia.com \
--cc=apopple@nvidia.com \
--cc=baohua@kernel.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=bp@alien8.de \
--cc=brauner@kernel.org \
--cc=byungchul@sk.com \
--cc=chengming.zhou@linux.dev \
--cc=christian.gmeiner@gmail.com \
--cc=christian.koenig@amd.com \
--cc=damon@lists.linux.dev \
--cc=dave.hansen@linux.intel.com \
--cc=david@kernel.org \
--cc=deller@gmx.de \
--cc=dev.jain@arm.com \
--cc=dinguyen@kernel.org \
--cc=djbw@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=dvyukov@google.com \
--cc=etnaviv@lists.freedesktop.org \
--cc=freedreno@lists.freedesktop.org \
--cc=glider@google.com \
--cc=gourry@gourry.net \
--cc=harry@kernel.org \
--cc=hpa@zytor.com \
--cc=hsweeten@visionengravers.com \
--cc=hughd@google.com \
--cc=iommu@lists.linux.dev \
--cc=irogers@google.com \
--cc=jack@suse.cz \
--cc=james.clark@linaro.org \
--cc=jannh@google.com \
--cc=jarkko@kernel.org \
--cc=jesszhan0024@gmail.com \
--cc=jgg@ziepe.ca \
--cc=jolsa@kernel.org \
--cc=jonathanh@nvidia.com \
--cc=joshua.hahnjy@gmail.com \
--cc=kasan-dev@googlegroups.com \
--cc=kees@kernel.org \
--cc=kevin.tian@intel.com \
--cc=kvm@vger.kernel.org \
--cc=l.stach@pengutronix.de \
--cc=lance.yang@linux.dev \
--cc=liam@infradead.org \
--cc=linmiaohe@huawei.com \
--cc=linux+etnaviv@armlinux.org.uk \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-parisc@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=linux-sgx@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=lumag@kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=marijn.suijten@somainline.org \
--cc=mark.rutland@arm.com \
--cc=mathieu.desnoyers@efficios.com \
--cc=matthew.auld@intel.com \
--cc=matthew.brost@intel.com \
--cc=mhiramat@kernel.org \
--cc=mhocko@suse.com \
--cc=mingo@redhat.com \
--cc=mperttunen@nvidia.com \
--cc=mripard@kernel.org \
--cc=muchun.song@linux.dev \
--cc=namhyung@kernel.org \
--cc=nao.horiguchi@gmail.com \
--cc=npache@redhat.com \
--cc=nvdimm@lists.linux.dev \
--cc=oleg@redhat.com \
--cc=osalvador@suse.de \
--cc=patrik.r.jakobsson@gmail.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=peterz@infradead.org \
--cc=pfalcato@suse.de \
--cc=rakie.kim@sk.com \
--cc=ray.huang@amd.com \
--cc=riel@surriel.com \
--cc=robin.clark@oss.qualcomm.com \
--cc=robin.murphy@arm.com \
--cc=rostedt@goodmis.org \
--cc=rppt@kernel.org \
--cc=ryan.roberts@arm.com \
--cc=schuster.simon@siemens-energy.com \
--cc=sean@poorly.run \
--cc=shakeel.butt@linux.dev \
--cc=simona@ffwll.ch \
--cc=sj@kernel.org \
--cc=skolothumtho@nvidia.com \
--cc=surenb@google.com \
--cc=tglx@kernel.org \
--cc=thierry.reding@kernel.org \
--cc=tomi.valkeinen@ideasonboard.com \
--cc=tzimmermann@suse.de \
--cc=usama.arif@linux.dev \
--cc=vbabka@kernel.org \
--cc=viro@zeniv.linux.org.uk \
--cc=willy@infradead.org \
--cc=x86@kernel.org \
--cc=xu.xin16@zte.com.cn \
--cc=ying.huang@linux.alibaba.com \
--cc=yishaih@nvidia.com \
--cc=ziy@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox