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 6C051405C4F for ; Fri, 10 Jul 2026 22:46:51 +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=1783723613; cv=none; b=Q9bDPUzBgv4U16MTJ7EnkepEGp1mnkaV7B8+4/V/9IRYuCbK5ar19Scevhfhr2uo5nX3r7W1o/DQHSnYC/ATzH6U8JczWmObbsGaMnu/RAgi4TbBxN/JZP3Thig3W92IMr9qZ7eExv2t2sa8syYCA24EkOCZv7FA0N5DOG+ixao= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783723613; c=relaxed/simple; bh=ZX6M0f174tXZ/fQR3cTt2Jtrnkp9HfrAxUVbO9SvwkA=; h=Date:To:From:Subject:Message-Id; b=nr5/TyK7eBjCaZR2jCzbsRwxyFmP/ngmDKwa8PrCC7VtP38sI5ht6LW69ZElwK6NzfHlOFxoxARcNDTnmq/lqrEwULtdjQspMVVw/IAiCr3sehqHsdBsxtu1i+fFwkqjv9pB6EWIVuH76zuDjmccB7D9sCyIGnCS8KfEGVbFFuo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux-foundation.org header.i=@linux-foundation.org header.b=vKsTAaY+; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux-foundation.org header.i=@linux-foundation.org header.b="vKsTAaY+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 36C871F000E9; Fri, 10 Jul 2026 22:46:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux-foundation.org; s=korg; t=1783723611; bh=HPFGzWokolom76189FnGXJFMT4G/NXnn9/HiA2cLudk=; h=Date:To:From:Subject; b=vKsTAaY+f7JgQEKZp7CUA3JvO5/g9CcJ0bUMkbgovi2hoUw4e1Sm4QjVL9FwIctCP oiFue8i1hxyXj3dyQYO30hf6dGenlnVQpXcFzGrfhskw8phfgEzxxTAIsN779HWsoV XWJRkb196iAZLFdkU43rAKW4O1TcFTyNG/wfUpQs= Date: Fri, 10 Jul 2026 15:46:50 -0700 To: mm-commits@vger.kernel.org,ljs@kernel.org,akpm@linux-foundation.org From: Andrew Morton Subject: + mm-prefer-vma__pgoff-to-vma-vm_pgoff-in-kernel.patch added to mm-new branch Message-Id: <20260710224651.36C871F000E9@smtp.kernel.org> Precedence: bulk X-Mailing-List: mm-commits@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: The patch titled Subject: mm: prefer vma_[start,end]_pgoff() to vma->vm_pgoff in kernel/ has been added to the -mm mm-new branch. Its filename is mm-prefer-vma__pgoff-to-vma-vm_pgoff-in-kernel.patch This patch will shortly appear at https://git.kernel.org/pub/scm/linux/kernel/git/akpm/25-new.git/tree/patches/mm-prefer-vma__pgoff-to-vma-vm_pgoff-in-kernel.patch This patch will later appear in the mm-new branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm Note, mm-new is a provisional staging ground for work-in-progress patches, and acceptance into mm-new is a notification for others take notice and to finish up reviews. Please do not hesitate to respond to review feedback and post updated versions to replace or incrementally fixup patches in mm-new. The mm-new branch of mm.git is not included in linux-next If a few days of testing in mm-new is successful, the patch will me moved into mm.git's mm-unstable branch, which is included in linux-next Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next via various branches at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm and is updated there most days ------------------------------------------------------ From: Lorenzo Stoakes Subject: mm: prefer vma_[start,end]_pgoff() to vma->vm_pgoff in kernel/ Date: Fri, 10 Jul 2026 21:17:00 +0100 Be consistent in using vma_start_pgoff() and vma_end_pgoff(), which clearly indicates which part of the VMA the page offset refers to and aids greppability. This is part of a broader series laying the ground to provide a virtual page offset for MAP_PRIVATE-file backed anon folios. No functional change intended. Link: https://lore.kernel.org/20260710-b4-pre-scalable-cow-v2-19-2a5aa403d977@kernel.org Signed-off-by: Lorenzo Stoakes Acked-by: Marek Szyprowski # for kernel/dma Reviewed-by: Gregory Price Acked-by: Pedro Falcato Cc: Ackerley Tng Cc: David Hildenbrand (Arm) Cc: Kai Huang Cc: SJ Park Cc: Thomas Zimmermann Cc: Vlastimil Babka (SUSE) Signed-off-by: Andrew Morton --- 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 | 11 +++++++---- kernel/kcov.c | 2 +- kernel/trace/ring_buffer.c | 3 ++- 8 files changed, 36 insertions(+), 25 deletions(-) --- a/kernel/dma/coherent.c~mm-prefer-vma__pgoff-to-vma-vm_pgoff-in-kernel +++ a/kernel/dma/coherent.c @@ -236,14 +236,15 @@ static int __dma_mmap_from_coherent(stru { if (mem && vaddr >= mem->virt_base && vaddr + size <= (mem->virt_base + ((dma_addr_t)mem->size << PAGE_SHIFT))) { - unsigned long off = vma->vm_pgoff; + const pgoff_t pgoff_start = vma_start_pgoff(vma); + const pgoff_t pgoff_end = vma_end_pgoff(vma); int start = (vaddr - mem->virt_base) >> PAGE_SHIFT; unsigned long user_count = vma_pages(vma); int count = PAGE_ALIGN(size) >> PAGE_SHIFT; *ret = -ENXIO; - if (off < count && user_count <= count - off) { - unsigned long pfn = mem->pfn_base + start + off; + if (pgoff_start < count && pgoff_end <= count) { + unsigned long pfn = mem->pfn_base + start + pgoff_start; *ret = remap_pfn_range(vma, vma->vm_start, pfn, user_count << PAGE_SHIFT, vma->vm_page_prot); --- a/kernel/dma/direct.c~mm-prefer-vma__pgoff-to-vma-vm_pgoff-in-kernel +++ a/kernel/dma/direct.c @@ -534,6 +534,8 @@ int dma_direct_mmap(struct device *dev, unsigned long user_count = vma_pages(vma); unsigned long count = PAGE_ALIGN(size) >> PAGE_SHIFT; unsigned long pfn = PHYS_PFN(dma_to_phys(dev, dma_addr)); + const pgoff_t pgoff_start = vma_start_pgoff(vma); + const pgoff_t pgoff_end = vma_end_pgoff(vma); int ret = -ENXIO; vma->vm_page_prot = dma_pgprot(dev, vma->vm_page_prot, attrs); @@ -545,9 +547,9 @@ int dma_direct_mmap(struct device *dev, if (dma_mmap_from_global_coherent(vma, cpu_addr, size, &ret)) return ret; - if (vma->vm_pgoff >= count || user_count > count - vma->vm_pgoff) + if (pgoff_start >= count || pgoff_end > count) return -ENXIO; - return remap_pfn_range(vma, vma->vm_start, pfn + vma->vm_pgoff, + return remap_pfn_range(vma, vma->vm_start, pfn + pgoff_start, user_count << PAGE_SHIFT, vma->vm_page_prot); } --- a/kernel/dma/mapping.c~mm-prefer-vma__pgoff-to-vma-vm_pgoff-in-kernel +++ a/kernel/dma/mapping.c @@ -761,12 +761,14 @@ EXPORT_SYMBOL_GPL(dma_free_pages); int dma_mmap_pages(struct device *dev, struct vm_area_struct *vma, size_t size, struct page *page) { - unsigned long count = PAGE_ALIGN(size) >> PAGE_SHIFT; + const pgoff_t pgoff_start = vma_start_pgoff(vma); + const pgoff_t pgoff_end = vma_end_pgoff(vma); + const unsigned long count = PAGE_ALIGN(size) >> PAGE_SHIFT; - if (vma->vm_pgoff >= count || vma_pages(vma) > count - vma->vm_pgoff) + if (pgoff_start >= count || pgoff_end > count) return -ENXIO; return remap_pfn_range(vma, vma->vm_start, - page_to_pfn(page) + vma->vm_pgoff, + page_to_pfn(page) + pgoff_start, vma_pages(vma) << PAGE_SHIFT, vma->vm_page_prot); } EXPORT_SYMBOL_GPL(dma_mmap_pages); --- a/kernel/dma/ops_helpers.c~mm-prefer-vma__pgoff-to-vma-vm_pgoff-in-kernel +++ a/kernel/dma/ops_helpers.c @@ -39,7 +39,7 @@ int dma_common_mmap(struct device *dev, #ifdef CONFIG_MMU unsigned long user_count = vma_pages(vma); unsigned long count = PAGE_ALIGN(size) >> PAGE_SHIFT; - unsigned long off = vma->vm_pgoff; + unsigned long off = vma_start_pgoff(vma); struct page *page = dma_common_vaddr_to_page(cpu_addr); int ret = -ENXIO; @@ -52,7 +52,7 @@ int dma_common_mmap(struct device *dev, return -ENXIO; return remap_pfn_range(vma, vma->vm_start, - page_to_pfn(page) + vma->vm_pgoff, + page_to_pfn(page) + vma_start_pgoff(vma), user_count << PAGE_SHIFT, vma->vm_page_prot); #else return -ENXIO; --- a/kernel/events/core.c~mm-prefer-vma__pgoff-to-vma-vm_pgoff-in-kernel +++ a/kernel/events/core.c @@ -6998,7 +6998,7 @@ static void perf_mmap_open(struct vm_are refcount_inc(&event->mmap_count); refcount_inc(&event->rb->mmap_count); - if (vma->vm_pgoff) + if (vma_start_pgoff(vma)) refcount_inc(&event->rb->aux_mmap_count); if (mapped) @@ -7032,7 +7032,7 @@ static void perf_mmap_close(struct vm_ar * The AUX buffer is strictly a sub-buffer, serialize using aux_mutex * to avoid complications. */ - if (rb_has_aux(rb) && vma->vm_pgoff == rb->aux_pgoff && + if (rb_has_aux(rb) && vma_start_pgoff(vma) == rb->aux_pgoff && refcount_dec_and_mutex_lock(&rb->aux_mmap_count, &rb->aux_mutex)) { /* * Stop all AUX events that are writing to this buffer, @@ -7190,7 +7190,8 @@ static int map_range(struct perf_buffer */ for (pagenum = 0; pagenum < nr_pages; pagenum++) { unsigned long va = vma->vm_start + PAGE_SIZE * pagenum; - struct page *page = perf_mmap_to_page(rb, vma->vm_pgoff + pagenum); + struct page *page = perf_mmap_to_page(rb, + vma_start_pgoff(vma) + pagenum); if (page == NULL) { err = -EINVAL; @@ -7344,6 +7345,7 @@ static int perf_mmap_rb(struct vm_area_s static int perf_mmap_aux(struct vm_area_struct *vma, struct perf_event *event, unsigned long nr_pages) { + const pgoff_t pgoff_start = vma_start_pgoff(vma); long extra = 0, user_extra = nr_pages; u64 aux_offset, aux_size; struct perf_buffer *rb; @@ -7366,11 +7368,11 @@ static int perf_mmap_aux(struct vm_area_ if (aux_offset < perf_data_size(rb) + PAGE_SIZE) return -EINVAL; - if (aux_offset != vma->vm_pgoff << PAGE_SHIFT) + if (aux_offset != pgoff_start << PAGE_SHIFT) return -EINVAL; /* already mapped with a different offset */ - if (rb_has_aux(rb) && rb->aux_pgoff != vma->vm_pgoff) + if (rb_has_aux(rb) && rb->aux_pgoff != pgoff_start) return -EINVAL; if (aux_size != nr_pages * PAGE_SIZE) @@ -7400,7 +7402,7 @@ static int perf_mmap_aux(struct vm_area_ if (vma->vm_flags & VM_WRITE) rb_flags |= RING_BUFFER_WRITABLE; - ret = rb_alloc_aux(rb, event, vma->vm_pgoff, nr_pages, + ret = rb_alloc_aux(rb, event, pgoff_start, nr_pages, event->attr.aux_watermark, rb_flags); if (ret) { refcount_dec(&rb->mmap_count); @@ -7457,7 +7459,7 @@ static int perf_mmap(struct file *file, if (event->state <= PERF_EVENT_STATE_REVOKED) return -ENODEV; - if (vma->vm_pgoff == 0) + if (!vma_start_pgoff(vma)) ret = perf_mmap_rb(vma, event, nr_pages); else ret = perf_mmap_aux(vma, event, nr_pages); @@ -9884,7 +9886,7 @@ static bool perf_addr_filter_vma_adjust( struct perf_addr_filter_range *fr) { unsigned long vma_size = vma->vm_end - vma->vm_start; - unsigned long off = vma->vm_pgoff << PAGE_SHIFT; + unsigned long off = vma_start_pgoff(vma) << PAGE_SHIFT; struct file *file = vma->vm_file; if (!perf_addr_filter_match(filter, file, off, vma_size)) @@ -9974,7 +9976,7 @@ void perf_event_mmap(struct vm_area_stru /* .tid */ .start = vma->vm_start, .len = vma->vm_end - vma->vm_start, - .pgoff = (u64)vma->vm_pgoff << PAGE_SHIFT, + .pgoff = (u64)vma_start_pgoff(vma) << PAGE_SHIFT, }, /* .maj (attr_mmap2 only) */ /* .min (attr_mmap2 only) */ --- a/kernel/events/uprobes.c~mm-prefer-vma__pgoff-to-vma-vm_pgoff-in-kernel +++ a/kernel/events/uprobes.c @@ -144,12 +144,14 @@ static bool valid_vma(struct vm_area_str static unsigned long offset_to_vaddr(struct vm_area_struct *vma, loff_t offset) { - return vma->vm_start + offset - ((loff_t)vma->vm_pgoff << PAGE_SHIFT); + return vma->vm_start + offset - + ((loff_t)vma_start_pgoff(vma) << PAGE_SHIFT); } static loff_t vaddr_to_offset(struct vm_area_struct *vma, unsigned long vaddr) { - return ((loff_t)vma->vm_pgoff << PAGE_SHIFT) + (vaddr - vma->vm_start); + return ((loff_t)vma_start_pgoff(vma) << PAGE_SHIFT) + + (vaddr - vma->vm_start); } /** @@ -1482,7 +1484,7 @@ static int unapply_uprobe(struct uprobe file_inode(vma->vm_file) != uprobe->inode) continue; - offset = (loff_t)vma->vm_pgoff << PAGE_SHIFT; + offset = (loff_t)vma_start_pgoff(vma) << PAGE_SHIFT; if (uprobe->offset < offset || uprobe->offset >= offset + vma->vm_end - vma->vm_start) continue; @@ -2453,7 +2455,8 @@ static struct uprobe *find_active_uprobe if (!vm_file) return NULL; - offset = (loff_t)(vma->vm_pgoff << PAGE_SHIFT) + (bp_vaddr - vma->vm_start); + offset = (loff_t)(vma_start_pgoff(vma) << PAGE_SHIFT) + + (bp_vaddr - vma->vm_start); uprobe = find_uprobe_rcu(vm_file->f_inode, offset); if (!uprobe) return NULL; --- a/kernel/kcov.c~mm-prefer-vma__pgoff-to-vma-vm_pgoff-in-kernel +++ a/kernel/kcov.c @@ -512,7 +512,7 @@ static int kcov_mmap(struct file *filep, spin_lock_irqsave(&kcov->lock, flags); size = kcov->size * sizeof(unsigned long); - if (kcov->area == NULL || vma->vm_pgoff != 0 || + if (kcov->area == NULL || vma_start_pgoff(vma) || vma->vm_end - vma->vm_start != size) { res = -EINVAL; goto exit; --- a/kernel/trace/ring_buffer.c~mm-prefer-vma__pgoff-to-vma-vm_pgoff-in-kernel +++ a/kernel/trace/ring_buffer.c @@ -7613,7 +7613,8 @@ static int __rb_inc_dec_mapped(struct ri static int __rb_map_vma(struct ring_buffer_per_cpu *cpu_buffer, struct vm_area_struct *vma) { - unsigned long nr_subbufs, nr_pages, nr_vma_pages, pgoff = vma->vm_pgoff; + unsigned long nr_subbufs, nr_pages, nr_vma_pages; + pgoff_t pgoff = vma_start_pgoff(vma); unsigned int subbuf_pages, subbuf_order; struct page **pages __free(kfree) = NULL; int p = 0, s = 0; _ Patches currently in -mm which might be from ljs@kernel.org are mm-move-alloc-tag-to-mm.patch mm-ptdump-always-stabilise-against-page-table-freeing-using-init_mm.patch mm-vmalloc-acquire-init_mm-read-lock-on-huge-vmap-promotion.patch revert-arm64-enable-vmalloc-huge-with-ptdump.patch mm-move-vma_start_pgoff-into-mmh-and-clean-up.patch mm-add-kdoc-comments-for-vma_start-last_pgoff.patch tools-testing-vma-use-vma_start_pgoff-in-merge-tests.patch mm-introduce-and-use-vma_end_pgoff.patch mm-rmap-update-mm-interval_treec-comments.patch mm-rmap-parameterise-vma_interval_tree_-by-address_space.patch mm-rmap-elide-unnecessary-static-inlines-in-interval_treec.patch mm-rmap-rename-vma_interval_tree_-to-mapping_rmap_tree_.patch mm-rmap-parameterise-anon_vma_interval_tree_-by-anon_vma.patch mm-rmap-rename-anon_vma_interval_tree_-params-and-use-pgoff_t.patch mm-rmap-rename-anon_vma_interval_tree_-to-anon_rmap_tree_.patch maintainers-move-mm-interval_treec-to-rmap-section.patch mm-vma-introduce-and-use-vmg_pages-vmg__pgoff.patch mm-vma-clean-up-anon_vma_compatible.patch mm-vma-refactor-vmg_adjust_set_range-for-clarity.patch mm-vma-minor-cleanup-of-expand_.patch mm-introduce-and-use-linear_page_delta.patch mm-vma-use-vma_start_pgoff-linear_page_index-in-mm-code.patch mm-prefer-vma__pgoff-to-vma-vm_pgoff-in-kernel.patch mm-vma-remove-duplicative-vma_pgoff_offset-helper.patch mm-use-linear_page_-consistently.patch mm-vma-introduce-vma_assert_can_modify.patch mm-vma-add-and-use-vma__pgoff.patch mm-vma-move-__install_special_mapping-to-vmac.patch mm-vma-make-vma_set_range-static-drop-insert_vm_struct-decl.patch mm-vma-update-vma_shrink-to-not-pass-start-pgoff-parameters.patch mm-vma-update-vmg_adjust_set_range-to-offset-pgoff-instead.patch mm-vma-slightly-rework-the-anonymous-check-in-__mmap_new_vma.patch mm-vma-introduce-and-use-vma_set_pgoff.patch mm-vma-correct-incorrect-vmah-inclusion.patch mm-vma-use-guard-clauses-in-can_vma_merge_.patch tools-testing-vma-default-vma-mm-flag-bits-to-64-bit.patch tools-testing-vma-output-compared-expression-on-assert_.patch