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 8E3F43D6478; Thu, 16 Jul 2026 09:28:10 +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=1784194092; cv=none; b=BYVO7HtOBRpDoxM6yJxhMCdNR8p5JejIql1WY6aEyf26BD29j/eu9rhYOJOoLw0zbVZHTWNkrJGQTQjao0FqzD/MkmIlzTsCOmt2rgLTq5grCzrzziKJBzJSCSfAuZh+xgcUEOqm/mXrYl4HeYX/RS4HDGUhB77hCTAINBtT4Vs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784194092; c=relaxed/simple; bh=ORKxPTxix4lMEKj1bUrWfEqvJYIw8xAlZEE0O3Fe/zU=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=tdaXSO6VUPnirSQivwAV5baCV9JIXNKNShPXkZeJYtNvzmNYyd+aJsAjDxqfPa8dzN9qAON/jFA77Kpgoz1IJKtB52USv0be8nLNh/CjcE3soNkp9bP/8ikEQJZmEZPaOK6MjMoA/ZE6Fx0gCUUO95BuflxMv0jYO91zdqwQUdQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Ouynuz9X; 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="Ouynuz9X" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 385B31F000E9; Thu, 16 Jul 2026 09:27:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784194089; bh=/0foZKhiUwL8omqMEdPagooKRvaN2Pu32mvklzzR96U=; h=Date:From:To:Cc:Subject:References:In-Reply-To; b=Ouynuz9X0lV2DAJDCejClm81hBPwIvqmcFzLkXPpDvO8UAzJ88Y5GFYWUGewLjfo4 HKvUXozG50KbI7M8oj9PZqHoNdM3EWsTOc5AoySLbeypeJa24AUH4AxU81qOxHVvw0 LWvKYpCHYG972J1MXh+h9WLhUWEBriCZ3WTWAqSriYpYKn4bXicTywz8/GNCucKdn8 R6LKviBKKQBuclZEJxtnFDDX5dD5VKnTRgP5qx8f/ILSXiidqRmj+frtMf0NdUMKLi 5KUn6IrqcfVxM9r76RXMPOnT1CywejJXY9d/xN41f7ojz71LUqX+G/Fq0sdzs/NK2v CrhSCYImgSEMA== Date: Thu, 16 Jul 2026 10:27:33 +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 18/33] mm/vma: use vma_start_pgoff(), linear_page_index() in mm code Message-ID: References: <20260710-b4-pre-scalable-cow-v2-0-2a5aa403d977@kernel.org> <20260710-b4-pre-scalable-cow-v2-18-2a5aa403d977@kernel.org> Precedence: bulk X-Mailing-List: iommu@lists.linux.dev 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 05:23:09PM +0200, Vlastimil Babka (SUSE) wrote: > On 7/10/26 22:16, Lorenzo Stoakes wrote: > > There are many instances in which linear_page_index() (as well as > > linear_page_delta()) is open-coded, which is confusing and inconsistent. > > > > Additionally, vma->vm_pgoff doesn't necessarily make it clear that this is > > the page offset of the start of the VMA range. > > > > Doing so also aids greppability. > > > > So use vma_start_pgoff() in favour of directly accessing vma->vm_pgoff, and > > linear_page_index() where we can. > > > > This also lays the ground for future changes which will add an anonymous > > page offset in order to be able to index MAP_PRIVATE-file backed anon > > folios in terms of their virtual page offset. > > > > No functional change intended. > > > > Reviewed-by: Gregory Price > > Reviewed-by: SJ Park > > Reviewed-by: Pedro Falcato > > Signed-off-by: Lorenzo Stoakes > > Reviewed-by: Vlastimil Babka (SUSE) Thanks! > > Nit: > > > diff --git a/mm/damon/vaddr.c b/mm/damon/vaddr.c > > index 2058db9c01d5..d10b8042adb5 100644 > > --- a/mm/damon/vaddr.c > > +++ b/mm/damon/vaddr.c > > @@ -10,6 +10,7 @@ > > #include > > #include > > #include > > +#include > > #include > > #include > > > > @@ -623,8 +624,8 @@ static void damos_va_migrate_dests_add(struct folio *folio, > > } > > > > order = folio_order(folio); > > - ilx = vma->vm_pgoff >> order; > > - ilx += (addr - vma->vm_start) >> (PAGE_SHIFT + order); > > + ilx = vma_start_pgoff(vma) >> order; > > + ilx += linear_page_delta(vma, addr) >> order; > > Could these be combined to linear_page_index(vma, addr) >> order? So this is: (x >> order) + (y >> order) And linear_page_index(vma, addr) >> order is: (x + y) >> order Consider: order = 1, x = 0b11, y = 0b01 (x >> order) + (y >> order) = (0b11 >> 1 ) + (0b01 >> 1 ) = 0b1 + 0 = 1 (x + y ) >> order = (0b11 + 0b01) >> 1 = (0b100 ) >> 1 = 2 They are not equivalent - the carry bit changes the result. > > > > > for (i = 0; i < dests->nr_dests; i++) > > weight_total += dests->weight_arr[i]; > > > diff --git a/mm/filemap.c b/mm/filemap.c > > index b39111abdc4b..1dbb4c6f824e 100644 > > --- a/mm/filemap.c > > +++ b/mm/filemap.c > > @@ -3411,8 +3411,8 @@ static struct file *do_sync_mmap_readahead(struct vm_fault *vmf) > > * of memory. > > */ > > struct vm_area_struct *vma = vmf->vma; > > - unsigned long start = vma->vm_pgoff; > > - unsigned long end = start + vma_pages(vma); > > + const unsigned long start = vma_start_pgoff(vma); > > + const unsigned long end = vma_end_pgoff(vma); > > unsigned long ra_end; > > > > ra->order = exec_folio_order(); > > @@ -3930,7 +3930,8 @@ vm_fault_t filemap_map_pages(struct vm_fault *vmf, > > goto out; > > } > > > > - addr = vma->vm_start + ((start_pgoff - vma->vm_pgoff) << PAGE_SHIFT); > > + addr = vma->vm_start + > > + ((start_pgoff - vma_start_pgoff(vma)) << PAGE_SHIFT); > > This could be linear_page_index(vma, start_pgoff) << > > > vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd, addr, &vmf->ptl); > > if (!vmf->pte) { > > folio_unlock(folio); > > > --- a/mm/mempolicy.c > > +++ b/mm/mempolicy.c > > @@ -2049,8 +2049,8 @@ struct mempolicy *get_vma_policy(struct vm_area_struct *vma, > > pol = get_task_policy(current); > > if (pol->mode == MPOL_INTERLEAVE || > > pol->mode == MPOL_WEIGHTED_INTERLEAVE) { > > - *ilx += vma->vm_pgoff >> order; > > - *ilx += (addr - vma->vm_start) >> (PAGE_SHIFT + order); > > + *ilx += vma_start_pgoff(vma) >> order; > > + *ilx += linear_page_delta(vma, addr) >> order; > > Also? See above. > > > } > > return pol; > > } > > > --- a/mm/nommu.c > > +++ b/mm/nommu.c > > @@ -975,7 +975,7 @@ static int do_mmap_private(struct vm_area_struct *vma, > > /* read the contents of a file into the copy */ > > loff_t fpos; > > > > - fpos = vma->vm_pgoff; > > + fpos = vma_start_pgoff(vma); > > fpos <<= PAGE_SHIFT; > > > > ret = kernel_read(vma->vm_file, base, len, &fpos); > > @@ -1378,7 +1378,8 @@ 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_region->vm_pgoff = vma->vm_pgoff += npages; > > yuck, good to remove that ugly construct > it's not the only occurence in this function > oh well Yup at least improved it here :) > > > + vma->vm_pgoff += npages; > > + vma->vm_region->vm_pgoff = vma_start_pgoff(vma); > > } else { > > vma->vm_region->vm_end = vma->vm_end = addr; > > vma->vm_region->vm_top = addr; Cheers, Lorenzo