From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3681E3A2572; Thu, 16 Jul 2026 09:34:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784194467; cv=none; b=DKaTClEH08MhH4MUFHfPIjwEVa532AD5fnl080KVOBK9oixVjOIfHs8VGHi6ssal9h7PXgSpDKVE5sd4wkd5oIu5sKQbJi7tRQOduUMNJZLchVaba4YlBMimpkn7dbeAcoMoXvHsWyrdEOnf7xj0+KE2GApcWXPvssY1a9FH63I= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784194467; c=relaxed/simple; bh=cOJQeoL/IfToCf5nKi/1WKxwcd+AJrDARDQzSahV+6s=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=DD2B/Jujy7NoyievNXMn+AqSuBHbbYIfLFMXzqAQHex65/gyabeV9EDShRRzN1yzb2M+W6NEZmnXd6z7/Cd+BtXmhOl8+HkIsfGJMNiPlPUoqs1ebmM/5HwSJ7LgEZmukf4Kks/8mb86q/WWP4zetbR+I5IdyLpISE6us9MSoj8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HaVMsfnC; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="HaVMsfnC" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9F5AD1F00A3A; Thu, 16 Jul 2026 09:34:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784194465; bh=lNYl98mYz28OLVONtUv3HHBbo78s/d/FScrptCSkJqg=; h=Date:From:To:Cc:Subject:References:In-Reply-To; b=HaVMsfnCFQZsO8TosGBgjIQcv/23XysFwaqQLFbTwajYekUfxV325I+lW1pF5U/pO 0Dfjj/iv0XjXf9UhDL6hNgQ+avTyoYTMX3syk2Dy0ERhQGYHVF3FA3nDn9sUdIbhfJ Mk0OIn7dJxoIKmUhZI12SmOVvm4Y/OF+VsOgVdX/wQ+8GX19Ib/HsiFgtZtxHVv6Pz DNrods1GvRI+Pf6ukfp85qGF3+zDzp0DDcL378JHf0SbOQEW9OANF0im2X+3GMcn6k /10UKMRNrM/8y2nVFByXLA3MOpPLS6A8iGNTe/uuwzVNln9TFQODIte1ksvKdZE7LI BvxtDp2Jg7H3w== Date: Thu, 16 Jul 2026 10:33:51 +0100 From: "Lorenzo Stoakes (ARM)" To: "Vlastimil Babka (SUSE)" Cc: Andrew Morton , David Hildenbrand , "Liam R. Howlett" , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Rik van Riel , Harry Yoo , Jann Horn , Lance Yang , Pedro Falcato , Russell King , Dinh Nguyen , Simon Schuster , "James E.J. Bottomley" , Helge Deller , Alexander Viro , Christian Brauner , Jan Kara , Dan Williams , Matthew Wilcox , Muchun Song , Oscar Salvador , Masami Hiramatsu , Oleg Nesterov , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Zi Yan , Baolin Wang , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Miaohe Lin , Naoya Horiguchi , Xu Xin , Chengming Zhou , SJ Park , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , Hugh Dickins , Peter Xu , Kees Cook , Marek Szyprowski , Robin Murphy , Andrey Konovalov , Alexander Potapenko , Dmitry Vyukov , Steven Rostedt , Mathieu Desnoyers , Jarkko Sakkinen , Dave Hansen , Thomas Gleixner , Borislav Petkov , x86@kernel.org, "H. Peter Anvin" , Ian Abbott , H Hartley Sweeten , Lucas Stach , Christian Gmeiner , David Airlie , Simona Vetter , Patrik Jakobsson , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Tomi Valkeinen , Thierry Reding , Mikko Perttunen , Jonathan Hunter , Christian Koenig , Huang Rui , Matthew Auld , Jason Gunthorpe , Yishai Hadas , Shameer Kolothum , Kevin Tian , Ankit Agrawal , Alex Williamson , Paolo Bonzini , Shakeel Butt , Usama Arif , 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 Subject: Re: [PATCH v2 23/33] mm/vma: add and use vma_[add/sub]_pgoff() Message-ID: References: <20260710-b4-pre-scalable-cow-v2-0-2a5aa403d977@kernel.org> <20260710-b4-pre-scalable-cow-v2-23-2a5aa403d977@kernel.org> Precedence: bulk X-Mailing-List: linux-tegra@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: On Wed, Jul 15, 2026 at 07:38:38PM +0200, Vlastimil Babka (SUSE) wrote: > On 7/10/26 22:17, Lorenzo Stoakes wrote: > > 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 > > Signed-off-by: Lorenzo Stoakes > > Reviewed-by: Vlastimil Babka (SUSE) Thanks! > > Nits: > > > --- > > 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 > > #include > > #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; > > Ah that takes care of the other case of ugliness I noticed earlier, good. Churn for good ;) > > > + 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); > > Hm isn't this also a case for using linear_page_delta(addr, new)? > (I guess in patch 21/33) > Would be like the hunk above. Ah, yeah :) I can always rearrange which commit does what on any respin. For now, Andrew - could you make a little edit here? - vma_add_pgoff(vma, (addr - new->vm_start) >> PAGE_SHIFT); + vma_add_pgoff(vma, linear_page_delta(new, addr)); Thanks! > > > } 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_, \ > > > Cheers, Lorenzo