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 B963D3E4506; Mon, 12 Oct 2026 18:32:36 +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=1791829958; cv=none; b=BWnqRMRggTLAJLi1KMSG3JyctcOUP3EbOi6YtgXSHVwmI5MXy3Bv3ITJ5Ock8/hAgm1DOs6wcii5+ki35hnqXafNHA/S2b6FnH/PEcGmY03owbUEZup+KZZXQamF6x1Ba5lghPvVES3haYVFMIwKmA0nUZx1bO1wKtbqXXknb/U= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791829958; c=relaxed/simple; bh=w0iecN0UZB9ExkzpFC+uMsR8e4pi8NKpQ6uqsdGNCEs=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=kShVzWTprF/iPYU2PVMyHISWycbRN3w+ClPwUUtBsIRY8t1YNxtb6Uu/QY/yH58NbYSLqsA95Z5x1GE5oeF/lgXg4IgFmilrG7trRE3nsMHIAn2WzUAubMouXdnY5Vv58jjdyswSRrsf1GDHFjADsVcpXm8YvgyW6V5q+zFP4Oc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=LJrxmNyf; 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="LJrxmNyf" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 320051F0089B; Mon, 12 Oct 2026 18:32:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1791829956; bh=MR3QSDnJDSPQxchGzKX8rD0iI2DqeBRHMbI1BZ7pOVs=; h=Date:Subject:To:Cc:References:From:In-Reply-To; b=LJrxmNyfv4doXTKsvMR8Iw9B51t5c5xFJDtYRKmU1dHUtf+9U90XD86OtNFb0w1Zj 6d0laWdCJCGOqGdcF/w/H7Kut9bsHxub56BAKK2evbqD1Htp8Y5RdUPMWan4gJgCy5 cWmt6/DIUTBPO30ptvLUTNgAPExQ3TR6z6mtRmDYcHDEaS7V+PXMJkXy84x5sGAAeD dZBmxs+SqaGZnr/oBLA9Yj04OzVM0x9cCZlzoPkp72RccEb0UoxksX/kkQlTpc+5U+ YmF88SRh4WZXNh2ZgsPVTykyA2nSPdEzfba5mQGgWRtjShzglmPaDCDbqeVrCZb2XD jE7Tz7jOtPk6A== Message-ID: Date: Mon, 12 Oct 2026 20:31:59 +0200 Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v5 25/38] mm: remove VMA_IO_BIT check in vma[_flags]_is_mm_managed() To: "Lorenzo Stoakes (ARM)" , Andrew Morton , "Liam R. Howlett" , Vlastimil Babka , Jann Horn , Pedro Falcato , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Jonathan Corbet , Greg Kroah-Hartman , Dennis Dalessandro , Jason Gunthorpe , Leon Romanovsky , Paul Moore , Stephen Smalley , Jaroslav Kysela , Takashi Iwai , Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Eduard Zingerman , Kumar Kartikeya Dwivedi , Zi Yan , Baolin Wang , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Usama Arif , Kiryl Shutsemau , Doug Gilbert , "James E.J. Bottomley" , "Martin K. Petersen" , Simona Vetter , Helge Deller , Sebastian Reichel , John Hubbard , Peter Xu , Masami Hiramatsu , Oleg Nesterov , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Rik van Riel , Harry Yoo , Juri Lelli , Vincent Guittot , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Will Deacon , "Aneesh Kumar K.V" , Nick Piggin , Arnd Bergmann , Muchun Song , Oscar Salvador , "Matthew Wilcox (Oracle)" , Jan Kara , Marc Zyngier , Oliver Upton , Catalin Marinas , Madhavan Srinivasan , Anup Patel , Paul Walmsley , Palmer Dabbelt , Albert Ou , Christian Borntraeger , Janosch Frank , Claudio Imbrenda , Alexander Gordeev , Gerald Schaefer , Heiko Carstens , Vasily Gorbik , "David S. Miller" , Andreas Larsson , Alexander Viro , Christian Brauner , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , Chris Li , Kairui Song , Kemeng Shi , Nhat Pham , Baoquan He , Youngjun Park , Johannes Weiner , Qi Zheng , Shakeel Butt , Axel Rasmussen , Yuanchu Xie , Wei Xu , Chengming Zhou , Michal Hocko , Miklos Szeredi , Xu Xin Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-usb@vger.kernel.org, linux-rdma@vger.kernel.org, selinux@vger.kernel.org, linux-sound@vger.kernel.org, bpf@vger.kernel.org, linux-scsi@vger.kernel.org, linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-trace-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-arch@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, fuse-devel@lists.linux.dev, Ihor Solodrai , Bert Karwatzki References: <20261009-b4-mmap-prepare-vma-flag-sanify-v5-0-923b70125b1e@kernel.org> <20261009-b4-mmap-prepare-vma-flag-sanify-v5-25-923b70125b1e@kernel.org> From: "David Hildenbrand (Arm)" Content-Language: en-US Autocrypt: addr=david@kernel.org; keydata= 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 qIws/H2t In-Reply-To: <20261009-b4-mmap-prepare-vma-flag-sanify-v5-25-923b70125b1e@kernel.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 10/9/26 20:04, Lorenzo Stoakes (ARM) wrote: > We have now made it such that every driver which sets VMA_IO_BIT marks it > as not mm-managed. Confusing given that mm-managed check tests VMA_IO_BIT. Maybe combining this with the next paragraph could make this easier to grasp "vma_flags_is_mm_managed() still checks for VMA_IO_BIT, and if set, treats it as non-mm-managed. This was previously required to handle driver that would set VMA_IO_BIT but none of the other flags that would indicate a VMA as non-mm-managed. We already established now that a driver that sets VMA_IO_BIT must set one of the other VMA flags that allow for identifying it as non-mm-managed. ... " > > However, vma_flags_is_mm_managed() currently treats VMA_IO_BIT as > disqualifying. This was a product of drivers previously marking a range as > not mm-managed by > setting VMA_IO_BIT alone. > > Fix this by removing the VMA_IO_BIT check in vma_flags_is_mm_managed(), > and update mmap_validate_vma_flags() to use vma_flags_is_mm_managed() > rather than open-coding the VMA_PFNMAP_BIT, VMA_MIXEDMAP_BIT check. > > This change means that vma[_flags]_can_merge() doesn't check VMA_IO_BIT any > longer (which is now redundant) as it calls vma_flags_is_mm_managed(). > > Now that the predicate means precisely VMA_PFNMAP_BIT or VMA_MIXEDMAP_BIT, > also use it at the other sites which open-code that pair, so the intent is > stated rather than the flags, with no functional change: > > zap_special_vma_range() only zaps mappings which are not mm-managed, as > drivers use it > to tear down ranges they established themselves. > > The mprotect() arch PFN modification check applies to mappings not managed > by core mm, which may map PFNs without struct pages. > > NUMA balancing skips VM_MIXEDMAP mappings having already excluded VM_IO > and VM_PFNMAP mappings via vma_migratable(), so it skips exactly the > mappings not managed by core mm - say so. > > Finally, update the VMA userland merge 'special' flag tests to no longer > assert that VMA_IO_BIT prevents merge as VMA_PFNMAP_BIT, VMA_MIXEDMAP_BIT > now suffices. > > Signed-off-by: Lorenzo Stoakes (ARM) > --- > include/linux/mm.h | 3 +-- > kernel/sched/fair.c | 2 +- > mm/memory.c | 7 ++++--- > mm/mprotect.c | 3 +-- > mm/vma.c | 2 +- > tools/testing/vma/include/dup.h | 3 +-- > tools/testing/vma/tests/merge.c | 10 ++-------- > 7 files changed, 11 insertions(+), 19 deletions(-) > > diff --git a/include/linux/mm.h b/include/linux/mm.h > index 6b5f06cd174a..3ddb463db895 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -1627,8 +1627,7 @@ static inline bool vma_is_shared_maywrite(const struct vm_area_struct *vma) > */ > static inline bool vma_flags_is_mm_managed(const vma_flags_t *flags) > { > - return !vma_flags_test_any(flags, VMA_PFNMAP_BIT, VMA_MIXEDMAP_BIT, > - VMA_IO_BIT); > + return !vma_flags_test_any(flags, VMA_PFNMAP_BIT, VMA_MIXEDMAP_BIT); > } > > /** > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index 8dff37059faf..a07a658cd99f 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -4212,7 +4212,7 @@ static void task_numa_work(struct callback_head *work) > > for (; vma; vma = vma_next(&vmi)) { > if (!vma_migratable(vma) || !vma_policy_mof(vma) || > - is_vm_hugetlb_page(vma) || (vma->vm_flags & VM_MIXEDMAP)) { > + is_vm_hugetlb_page(vma) || !vma_is_mm_managed(vma)) { > trace_sched_skip_vma_numa(mm, vma, NUMAB_SKIP_UNSUITABLE); > continue; > } > diff --git a/mm/memory.c b/mm/memory.c > index e5c1d1c35bc7..094983683f24 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -2343,19 +2343,20 @@ void zap_vma_range(struct vm_area_struct *vma, unsigned long address, > } > > /** > - * zap_special_vma_range - zap all page table entries in a special vma range > + * zap_special_vma_range - zap all page table entries in a VMA which is not > + * mm-managed > * @vma: the vma covering the range to zap > * @address: starting address of the range to zap > * @size: number of bytes to zap > * > * This function does nothing when the provided address range is not fully > - * contained in @vma, or when the @vma is not VM_PFNMAP or VM_MIXEDMAP. > + * contained in @vma, or when @vma is mm-managed. > */ > void zap_special_vma_range(struct vm_area_struct *vma, unsigned long address, > unsigned long size) > { > if (!range_in_vma(vma, address, address + size) || > - !(vma->vm_flags & (VM_PFNMAP | VM_MIXEDMAP))) > + vma_is_mm_managed(vma)) > return; > > zap_vma_range(vma, address, size); > diff --git a/mm/mprotect.c b/mm/mprotect.c > index 2888ee638d87..706c679d4281 100644 > --- a/mm/mprotect.c > +++ b/mm/mprotect.c > @@ -783,8 +783,7 @@ mprotect_fixup(struct vma_iterator *vmi, struct mmu_gather *tlb, > * uncommon case, so doesn't need to be very optimized. > */ > if (arch_has_pfn_modify_check() && > - vma_flags_test_any(&old_vma_flags, VMA_PFNMAP_BIT, > - VMA_MIXEDMAP_BIT) && > + !vma_flags_is_mm_managed(&old_vma_flags) && > !vma_flags_test_any_mask(&new_vma_flags, VMA_ACCESS_FLAGS)) { > pgprot_t new_pgprot = vm_get_page_prot(newflags); > > diff --git a/mm/vma.c b/mm/vma.c > index 51bdbe08bb02..cb8729b195ea 100644 > --- a/mm/vma.c > +++ b/mm/vma.c > @@ -2796,7 +2796,7 @@ static int mmap_validate_vma_flags(const vma_flags_t *flags) > return -EINVAL; > #endif > > - if (!vma_flags_test_any(flags, VMA_PFNMAP_BIT, VMA_MIXEDMAP_BIT)) { > + if (vma_flags_is_mm_managed(flags)) { Ah, there is the change. Acked-by: David Hildenbrand (Arm) -- Cheers, David