From nobody Sat Jul 4 20:54:49 2026 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 9025E39768D; Mon, 29 Jun 2026 19:25:59 +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=1782761160; cv=none; b=CMPisVt5p2eWN4M2a7+SvXgX+l1YWGPdz3XkUw9ggCPEaFJuxx6bLMDIUaQFPyu7u27m+/521H3KRnsUC3TtX3hp1MLz9ORxwgfn6fb3VRY95PCH7Apyd18lE1tSe2hTv6Apyli/sJXE6qxNA2Yo5dNk4CKVRcgIeHClcAbpNf4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782761160; c=relaxed/simple; bh=GY6m5fP4sLgG6B3JbF6swqfYDY/rcWo/g/BthIHQJKM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nz2uf8O76+2HzMgdtLOg3awsgHAE+SSuU7rhD4G6qU9bEnDkE80MU+Ms79PomliFx6vpRFbCNLl8iVgZ+xvVNZ30yqAdNqFlPoTB4vNogFGsjPb+zHulXL1OXkmEnHz7kc3oLa+yJ7Wd8d5MS/a4oeINxfaq1ZVbz5v8JD5YKII= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=a5KeyFTe; 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="a5KeyFTe" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 564721F000E9; Mon, 29 Jun 2026 19:25:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782761159; bh=RyicGxsSOzJTaoBcRQGH27oUytYBKCYLUF6jDOpzH7I=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=a5KeyFTeJjh7TJORUpSdmde4WrAK8BTgTPTho1LlZNtgrXh/Yqn9mD6/L1E9zfs8r e8za/mcjsoGeYfC+55PxZM0hLi0ZRJB+0Gbcm0U2F6Fn97SZIJM1N8XKGpsR2xQKrI yYMjTnXxd/YQ9zzdgYLIPjHCFJPa2KKvIAraY8mhyi19FlYp5ghqePfdzpdkTUseC1 had3a1qZv4Z9B8qbb5LsCMcPsRJ2m5HWJRYLpaEMWR5rYHXsAk6QucmLYIa0UzO6lQ Pqa24H5c5iEEZidrzYUke9zV+idmE8KbclhOGbVFF/6WTC2VNdnFmcT1ViYuCVE/mn cARBGEsTONhTA== From: Lorenzo Stoakes To: Andrew Morton Cc: Thomas Bogendoerfer , Madhavan Srinivasan , Michael Ellerman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Lucas Stach , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Rob Clark , Dmitry Baryshkov , Lyude Paul , Danilo Krummrich , Tomi Valkeinen , Sandy Huang , =?UTF-8?q?Heiko=20St=C3=BCbner?= , Andy Yan , Thierry Reding , Mikko Perttunen , Jonathan Hunter , Gerd Hoffmann , Dmitry Osipenko , Zack Rusin , Matthew Brost , Thomas Hellstrom , Oleksandr Andrushchenko , Helge Deller , Benjamin LaHaise , Alexander Viro , Christian Brauner , Muchun Song , Oscar Salvador , David Hildenbrand , Zi Yan , Baolin Wang , "Liam R . Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Hugh Dickins , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Jann Horn , Pedro Falcato , Kees Cook , Jaroslav Kysela , Takashi Iwai , linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, dri-devel@lists.freedesktop.org, etnaviv@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, intel-gfx@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-rockchip@lists.infradead.org, linux-tegra@vger.kernel.org, virtualization@lists.linux.dev, intel-xe@lists.freedesktop.org, xen-devel@lists.xenproject.org, linux-fbdev@vger.kernel.org, linux-aio@kvack.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-sound@vger.kernel.org Subject: [PATCH 01/13] mm: introduce vma_flags_can_grow() and vma_can_grow() Date: Mon, 29 Jun 2026 20:25:24 +0100 Message-ID: X-Mailer: git-send-email 2.54.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" These test whether the VMA has stack sematics, i.e. is able to grow upwards or downwards depending on the architecture. In order to account for arches which do not support upward-growing stacks, introduce VMA_GROWSUP whose definition depends on the architecture supporting it, and use vma_flags_test_single_mask() in vma_flags_can_grow() to account for this. Update the VMA userland tests to reflect the changes No functional change intended. Signed-off-by: Lorenzo Stoakes Reviewed-by: Lance Yang Reviewed-by: Zi Yan --- include/linux/mm.h | 21 ++++++++++++++++++--- tools/testing/vma/include/dup.h | 4 ++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 868b2334bff3..cf7df1569052 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -472,6 +472,7 @@ enum { #define VM_SAO INIT_VM_FLAG(SAO) #elif defined(CONFIG_PARISC) #define VM_GROWSUP INIT_VM_FLAG(GROWSUP) +#define VMA_GROWSUP mk_vma_flags(VMA_GROWSUP_BIT) #elif defined(CONFIG_SPARC64) #define VM_SPARC_ADI INIT_VM_FLAG(SPARC_ADI) #define VM_ARCH_CLEAR INIT_VM_FLAG(ARCH_CLEAR) @@ -483,6 +484,7 @@ enum { #endif #ifndef VM_GROWSUP #define VM_GROWSUP VM_NONE +#define VMA_GROWSUP EMPTY_VMA_FLAGS #endif #ifdef CONFIG_ARM64_MTE #define VM_MTE INIT_VM_FLAG(MTE) @@ -1563,11 +1565,24 @@ static inline bool vma_is_initial_stack(const struc= t vm_area_struct *vma) vma->vm_end >=3D vma->vm_mm->start_stack; } =20 -static inline bool vma_is_temporary_stack(const struct vm_area_struct *vma) +static inline bool vma_flags_can_grow(const vma_flags_t *flags) { - int maybe_stack =3D vma->vm_flags & (VM_GROWSDOWN | VM_GROWSUP); + if (vma_flags_test_single_mask(flags, VMA_GROWSUP)) + return true; + if (vma_flags_test(flags, VMA_GROWSDOWN_BIT)) + return true; + + return false; +} =20 - if (!maybe_stack) +static inline bool vma_can_grow(const struct vm_area_struct *vma) +{ + return vma_flags_can_grow(&vma->flags); +} + +static inline bool vma_is_temporary_stack(const struct vm_area_struct *vma) +{ + if (!vma_can_grow(vma)) return false; =20 if ((vma->vm_flags & VM_STACK_INCOMPLETE_SETUP) =3D=3D diff --git a/tools/testing/vma/include/dup.h b/tools/testing/vma/include/du= p.h index 5d7d0afd7765..6f5bcd7fbcd8 100644 --- a/tools/testing/vma/include/dup.h +++ b/tools/testing/vma/include/dup.h @@ -245,8 +245,10 @@ enum { #define VM_STACK INIT_VM_FLAG(STACK) #ifdef CONFIG_STACK_GROWS_UP #define VM_STACK_EARLY INIT_VM_FLAG(STACK_EARLY) +#define VMA_STACK_EARLY mk_vma_flags(VMA_STACK_EARLY_BIT) #else #define VM_STACK_EARLY VM_NONE +#define VMA_STACK_EARLY EMPTY_VMA_FLAGS #endif #ifdef CONFIG_ARCH_HAS_PKEYS #define VM_PKEY_SHIFT ((__force int)VMA_HIGH_ARCH_0_BIT) @@ -315,6 +317,8 @@ enum { =20 /* Bits set in the VMA until the stack is in its final location */ #define VM_STACK_INCOMPLETE_SETUP (VM_RAND_READ | VM_SEQ_READ | VM_STACK_E= ARLY) +#define VMA_STACK_INCOMPLETE_SETUP append_vma_flags( \ + VMA_STACK_EARLY, VMA_RAND_READ_BIT, VMA_SEQ_READ_BIT) =20 #define TASK_EXEC_BIT ((current->personality & READ_IMPLIES_EXEC) ? \ VM_EXEC_BIT : VM_READ_BIT) --=20 2.54.0 From nobody Sat Jul 4 20:54:49 2026 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 AD66D330D22; Mon, 29 Jun 2026 19:26:02 +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=1782761166; cv=none; b=knAAPfW18vcFbZvxGk30f9L7tNfuBrgNKgJ2Ik0W3V1dTIyrdYd41YsKUTg0E5F14FqtYVentnJpV6IWRpDcKnN/6nDSEfUa/no5ERCRZAO4fs+agNgfeUZ7UlcLAiiIJ8x5pgHCtMB+jpXzP5qk+SDk7X1agzPOFy1mZdjmUVI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782761166; c=relaxed/simple; bh=kOe4butnuICcRhrbVBjpIyPi3q4VG22ZeVJ//x+QPcA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PKur1/0PnnLFAy9bzDtoPNnZHV9T5xcQAdoa45zbYiEcbMboRI4BE1F59syLZwG+sqeCF+y0Bynm7OQcHMGE6YNfUuDK/dgINSZbDQZkC097F1DJEVkaB1DqSE9hueQ3Gqg5khEWU092qczr/YK1L6sbWzGCDaqgKe+2Vv5YUuc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Xn2W281C; 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="Xn2W281C" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 66B611F000E9; Mon, 29 Jun 2026 19:26:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782761162; bh=hH/rPaekHLgbpt/Rcs07Sgujq4DNQh0ei37arWSQh9c=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Xn2W281CCRAHZ/QZgRW+cIy33YfYIvNHKV8o8zZB0nI86VtmAhO1z4jD6Uf5tOk4L GASbZNkEg29TVowXa8LCPK4wsCaJMHCFEIoJi5H397T80SL6vkFL4EVjGuCD2KhN2g A6G9WAsaokKKxmjV/iXKt9XEQn/6JNjf5PLLVbanPksaxyCr8sBuZO/hjqPOmbfPF9 49CTgbbu6Ws+Ux4r9TzLw8tWZO0RQaNDAx6kKnaPgSqdYSQrC3CQat/8a6/pDdUebc w5ozJPiv10Gidv6BHC7z1Aylk2VlyHL1V0DIs2Y31pELX1+74WmF0jGxT4AuwByu0/ 2RC7A9BQRSjQg== From: Lorenzo Stoakes To: Andrew Morton Cc: Thomas Bogendoerfer , Madhavan Srinivasan , Michael Ellerman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Lucas Stach , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Rob Clark , Dmitry Baryshkov , Lyude Paul , Danilo Krummrich , Tomi Valkeinen , Sandy Huang , =?UTF-8?q?Heiko=20St=C3=BCbner?= , Andy Yan , Thierry Reding , Mikko Perttunen , Jonathan Hunter , Gerd Hoffmann , Dmitry Osipenko , Zack Rusin , Matthew Brost , Thomas Hellstrom , Oleksandr Andrushchenko , Helge Deller , Benjamin LaHaise , Alexander Viro , Christian Brauner , Muchun Song , Oscar Salvador , David Hildenbrand , Zi Yan , Baolin Wang , "Liam R . Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Hugh Dickins , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Jann Horn , Pedro Falcato , Kees Cook , Jaroslav Kysela , Takashi Iwai , linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, dri-devel@lists.freedesktop.org, etnaviv@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, intel-gfx@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-rockchip@lists.infradead.org, linux-tegra@vger.kernel.org, virtualization@lists.linux.dev, intel-xe@lists.freedesktop.org, xen-devel@lists.xenproject.org, linux-fbdev@vger.kernel.org, linux-aio@kvack.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-sound@vger.kernel.org Subject: [PATCH 02/13] mm/vma: update do_mmap() to use vma_flags_t Date: Mon, 29 Jun 2026 20:25:25 +0100 Message-ID: X-Mailer: git-send-email 2.54.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The core do_mmap() function accepts a vm_flags_t parameter which it then manipulates before passing to mmap_region() to do the heavy lifting of the memory mapping. Update do_mmap() to instead accept a vma_flags_t parameter, and adjust all the logic within do_mmap() to manipulate this instead. This is as part of the ongoing effort to convert VMA flags from a system word size to a bitmap type which allows us to unrestrict the number of VMA flags, as well as gain control over how VMA flag manipulation occurs. We do not cascade these changes to all functions which accept vm_flags_t, but rather use vma_flags_to_legacy() where necessary, specifically deferring converting calc_vm_prot_bits(), calc_vm_flag_bits() and __get_unmapped_area() to vma_flags_t. Also utilise the new vma_flags_can_grow() predicate which correctly handles the case of architectures without upward growing stacks. As part of this change, introduce VMA_SHADOW_STACK so we can correctly handle the case of the shadow stack not being defined. No functional change intended. Signed-off-by: Lorenzo Stoakes Reviewed-by: Lance Yang --- arch/mips/kernel/vdso.c | 4 +-- fs/aio.c | 2 +- include/linux/memfd.h | 6 ++-- include/linux/mm.h | 6 ++-- ipc/shm.c | 3 +- mm/memfd.c | 15 ++++----- mm/mmap.c | 67 ++++++++++++++++++++++++----------------- mm/nommu.c | 3 +- mm/util.c | 10 +++--- mm/vma.c | 7 ++--- mm/vma.h | 2 +- 11 files changed, 69 insertions(+), 56 deletions(-) diff --git a/arch/mips/kernel/vdso.c b/arch/mips/kernel/vdso.c index bd1fc17d3975..94873775fc0f 100644 --- a/arch/mips/kernel/vdso.c +++ b/arch/mips/kernel/vdso.c @@ -91,8 +91,8 @@ int arch_setup_additional_pages(struct linux_binprm *bprm= , int uses_interp) =20 /* Map delay slot emulation page */ base =3D do_mmap(NULL, STACK_TOP, PAGE_SIZE, PROT_READ | PROT_EXEC, - MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, 0, 0, &unused, - NULL); + MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, + EMPTY_VMA_FLAGS, 0, &unused, NULL); if (IS_ERR_VALUE(base)) { ret =3D base; goto out; diff --git a/fs/aio.c b/fs/aio.c index f57fa21a2503..3de586da197b 100644 --- a/fs/aio.c +++ b/fs/aio.c @@ -604,7 +604,7 @@ static int aio_setup_ring(struct kioctx *ctx, unsigned = int nr_events) =20 ctx->mmap_base =3D do_mmap(ctx->aio_ring_file, 0, ctx->mmap_size, PROT_READ | PROT_WRITE, - MAP_SHARED, 0, 0, &unused, NULL); + MAP_SHARED, EMPTY_VMA_FLAGS, 0, &unused, NULL); mmap_write_unlock(mm); if (IS_ERR((void *)ctx->mmap_base)) { ctx->mmap_size =3D 0; diff --git a/include/linux/memfd.h b/include/linux/memfd.h index b4fda09dab9f..c159e40e3f34 100644 --- a/include/linux/memfd.h +++ b/include/linux/memfd.h @@ -14,9 +14,9 @@ struct folio *memfd_alloc_folio(struct file *memfd, pgoff= _t idx); * to sealing, or 0 otherwise. * * We also update VMA flags if appropriate by manipulating the VMA flags p= ointed - * to by vm_flags_ptr. + * to by vma_flags_ptr. */ -int memfd_check_seals_mmap(struct file *file, vm_flags_t *vm_flags_ptr); +int memfd_check_seals_mmap(struct file *file, vma_flags_t *vma_flags_ptr); struct file *memfd_alloc_file(const char *name, unsigned int flags); int memfd_get_seals(struct file *file); int memfd_add_seals(struct file *file, unsigned int seals); @@ -30,7 +30,7 @@ static inline struct folio *memfd_alloc_folio(struct file= *memfd, pgoff_t idx) return ERR_PTR(-EINVAL); } static inline int memfd_check_seals_mmap(struct file *file, - vm_flags_t *vm_flags_ptr) + vma_flags_t *vma_flags_ptr) { return 0; } diff --git a/include/linux/mm.h b/include/linux/mm.h index cf7df1569052..cc2a87755adb 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -463,9 +463,11 @@ enum { #if defined(CONFIG_X86_USER_SHADOW_STACK) || defined(CONFIG_ARM64_GCS) || \ defined(CONFIG_RISCV_USER_CFI) #define VM_SHADOW_STACK INIT_VM_FLAG(SHADOW_STACK) +#define VMA_SHADOW_STACK mk_vma_flags(VMA_SHADOW_STACK_BIT) #define VMA_STARTGAP_FLAGS mk_vma_flags(VMA_GROWSDOWN_BIT, VMA_SHADOW_STAC= K_BIT) #else #define VM_SHADOW_STACK VM_NONE +#define VMA_SHADOW_STACK EMPTY_VMA_FLAGS #define VMA_STARTGAP_FLAGS mk_vma_flags(VMA_GROWSDOWN_BIT) #endif #if defined(CONFIG_PPC64) @@ -4167,9 +4169,9 @@ get_unmapped_area(struct file *file, unsigned long ad= dr, unsigned long len, return __get_unmapped_area(file, addr, len, pgoff, flags, 0); } =20 -extern unsigned long do_mmap(struct file *file, unsigned long addr, +unsigned long do_mmap(struct file *file, unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, - vm_flags_t vm_flags, unsigned long pgoff, unsigned long *populate, + vma_flags_t vma_flags, unsigned long pgoff, unsigned long *populate, struct list_head *uf); extern int do_vmi_munmap(struct vma_iterator *vmi, struct mm_struct *mm, unsigned long start, size_t len, struct list_head *uf, diff --git a/ipc/shm.c b/ipc/shm.c index b3e8a58e177d..bb1a721a3e74 100644 --- a/ipc/shm.c +++ b/ipc/shm.c @@ -1661,7 +1661,8 @@ long do_shmat(int shmid, char __user *shmaddr, int sh= mflg, goto invalid; } =20 - addr =3D do_mmap(file, addr, size, prot, flags, 0, 0, &populate, NULL); + addr =3D do_mmap(file, addr, size, prot, flags, EMPTY_VMA_FLAGS, 0, + &populate, NULL); *raddr =3D addr; err =3D 0; if (IS_ERR_VALUE(addr)) diff --git a/mm/memfd.c b/mm/memfd.c index abe13b291ddc..a4c9c1358862 100644 --- a/mm/memfd.c +++ b/mm/memfd.c @@ -369,39 +369,36 @@ static inline bool is_write_sealed(unsigned int seals) return seals & (F_SEAL_WRITE | F_SEAL_FUTURE_WRITE); } =20 -static int check_write_seal(vm_flags_t *vm_flags_ptr) +static int check_write_seal(vma_flags_t *vma_flags_ptr) { - vm_flags_t vm_flags =3D *vm_flags_ptr; - vm_flags_t mask =3D vm_flags & (VM_SHARED | VM_WRITE); - /* If a private mapping then writability is irrelevant. */ - if (!(mask & VM_SHARED)) + if (!vma_flags_test(vma_flags_ptr, VMA_SHARED_BIT)) return 0; =20 /* * New PROT_WRITE and MAP_SHARED mmaps are not allowed when * write seals are active. */ - if (mask & VM_WRITE) + if (vma_flags_test(vma_flags_ptr, VMA_WRITE_BIT)) return -EPERM; =20 /* * This is a read-only mapping, disallow mprotect() from making a * write-sealed mapping writable in future. */ - *vm_flags_ptr &=3D ~VM_MAYWRITE; + vma_flags_clear(vma_flags_ptr, VMA_MAYWRITE_BIT); =20 return 0; } =20 -int memfd_check_seals_mmap(struct file *file, vm_flags_t *vm_flags_ptr) +int memfd_check_seals_mmap(struct file *file, vma_flags_t *vma_flags_ptr) { int err =3D 0; unsigned int *seals_ptr =3D memfd_file_seals_ptr(file); unsigned int seals =3D seals_ptr ? *seals_ptr : 0; =20 if (is_write_sealed(seals)) - err =3D check_write_seal(vm_flags_ptr); + err =3D check_write_seal(vma_flags_ptr); =20 return err; } diff --git a/mm/mmap.c b/mm/mmap.c index 46174e706bbe..547352183214 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -280,7 +280,7 @@ static inline bool file_mmap_ok(struct file *file, stru= ct inode *inode, * do_mmap() - Perform a userland memory mapping into the current process * address space of length @len with protection bits @prot, mmap flags @fl= ags * (from which VMA flags will be inferred), and any additional VMA flags to - * apply @vm_flags. If this is a file-backed mapping then the file is spec= ified + * apply @vma_flags. If this is a file-backed mapping then the file is spe= cified * in @file and page offset into the file via @pgoff. * * This function does not perform security checks on the file and assumes,= if @@ -320,7 +320,8 @@ static inline bool file_mmap_ok(struct file *file, stru= ct inode *inode, * (2) for details. * @flags: Flags specifying how the mapping should be performed, see mmap = (2) * for details. - * @vm_flags: VMA flags which should be set by default, or 0 otherwise. + * @vma_flags: VMA flags which should be set by default, or EMPTY_VMA_FLAGS + * otherwise. * @pgoff: Page offset into the @file if file-backed, should be 0 otherwis= e. * @populate: A pointer to a value which will be set to 0 if no population= of * the range is required, or the number of bytes to populate if it is. Mus= t be @@ -335,7 +336,7 @@ static inline bool file_mmap_ok(struct file *file, stru= ct inode *inode, */ unsigned long do_mmap(struct file *file, unsigned long addr, unsigned long len, unsigned long prot, - unsigned long flags, vm_flags_t vm_flags, + unsigned long flags, vma_flags_t vma_flags, unsigned long pgoff, unsigned long *populate, struct list_head *uf) { @@ -399,13 +400,19 @@ unsigned long do_mmap(struct file *file, unsigned lon= g addr, * to. we assume access permissions have been handled by the open * of the memory object, so we don't do any here. */ - vm_flags |=3D calc_vm_prot_bits(prot, pkey) | calc_vm_flag_bits(file, fla= gs) | - mm->def_flags | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC; + vma_flags_set_mask(&vma_flags, + legacy_to_vma_flags(calc_vm_prot_bits(prot, pkey))); + vma_flags_set_mask(&vma_flags, + legacy_to_vma_flags(calc_vm_flag_bits(file, flags))); + vma_flags_set_mask(&vma_flags, mm->def_vma_flags); + vma_flags_set(&vma_flags, VMA_MAYREAD_BIT, VMA_MAYWRITE_BIT, + VMA_MAYEXEC_BIT); =20 /* Obtain the address to map to. we verify (or select) it and ensure * that it represents a valid section of the address space. */ - addr =3D __get_unmapped_area(file, addr, len, pgoff, flags, vm_flags); + addr =3D __get_unmapped_area(file, addr, len, pgoff, flags, + vma_flags_to_legacy(vma_flags)); if (IS_ERR_VALUE(addr)) return addr; =20 @@ -418,7 +425,7 @@ unsigned long do_mmap(struct file *file, unsigned long = addr, if (!can_do_mlock()) return -EPERM; =20 - if (!mlock_future_ok(mm, vm_flags & VM_LOCKED, len)) + if (!mlock_future_ok(mm, vma_flags_test(&vma_flags, VMA_LOCKED_BIT), len)) return -EAGAIN; =20 if (file) { @@ -461,22 +468,23 @@ unsigned long do_mmap(struct file *file, unsigned lon= g addr, if (IS_APPEND(inode) && (file->f_mode & FMODE_WRITE)) return -EACCES; =20 - vm_flags |=3D VM_SHARED | VM_MAYSHARE; + vma_flags_set(&vma_flags, VMA_SHARED_BIT, VMA_MAYSHARE_BIT); if (!(file->f_mode & FMODE_WRITE)) - vm_flags &=3D ~(VM_MAYWRITE | VM_SHARED); + vma_flags_clear(&vma_flags, VMA_MAYWRITE_BIT, + VMA_SHARED_BIT); fallthrough; case MAP_PRIVATE: if (!(file->f_mode & FMODE_READ)) return -EACCES; if (path_noexec(&file->f_path)) { - if (vm_flags & VM_EXEC) + if (vma_flags_test(&vma_flags, VMA_EXEC_BIT)) return -EPERM; - vm_flags &=3D ~VM_MAYEXEC; + vma_flags_clear(&vma_flags, VMA_MAYEXEC_BIT); } =20 if (!can_mmap_file(file)) return -ENODEV; - if (vm_flags & (VM_GROWSDOWN|VM_GROWSUP)) + if (vma_flags_can_grow(&vma_flags)) return -EINVAL; break; =20 @@ -488,23 +496,27 @@ unsigned long do_mmap(struct file *file, unsigned lon= g addr, * Check to see if we are violating any seals and update VMA * flags if necessary to avoid future seal violations. */ - err =3D memfd_check_seals_mmap(file, &vm_flags); + err =3D memfd_check_seals_mmap(file, &vma_flags); if (err) return (unsigned long)err; } else { switch (flags & MAP_TYPE) { case MAP_SHARED: - if (vm_flags & (VM_GROWSDOWN|VM_GROWSUP)) + if (vma_flags_can_grow(&vma_flags)) return -EINVAL; /* * Ignore pgoff. */ pgoff =3D 0; - vm_flags |=3D VM_SHARED | VM_MAYSHARE; + vma_flags_set(&vma_flags, VMA_SHARED_BIT, VMA_MAYSHARE_BIT); break; - case MAP_DROPPABLE: - if (VM_DROPPABLE =3D=3D VM_NONE) + case MAP_DROPPABLE: { + vma_flags_t droppable =3D VMA_DROPPABLE; + + if (vma_flags_empty(&droppable)) return -EOPNOTSUPP; + vma_flags_set_mask(&vma_flags, droppable); + /* * A locked or stack area makes no sense to be droppable. * @@ -515,23 +527,24 @@ unsigned long do_mmap(struct file *file, unsigned lon= g addr, */ if (flags & (MAP_LOCKED | MAP_HUGETLB)) return -EINVAL; - if (vm_flags & (VM_GROWSDOWN | VM_GROWSUP)) + if (vma_flags_can_grow(&vma_flags)) return -EINVAL; =20 - vm_flags |=3D VM_DROPPABLE; - /* * If the pages can be dropped, then it doesn't make * sense to reserve them. */ - vm_flags |=3D VM_NORESERVE; + vma_flags_set(&vma_flags, VMA_NORESERVE_BIT); =20 /* * Likewise, they're volatile enough that they * shouldn't survive forks or coredumps. */ - vm_flags |=3D VM_WIPEONFORK | VM_DONTDUMP; + vma_flags_set(&vma_flags, VMA_WIPEONFORK_BIT, + VMA_DONTDUMP_BIT); + fallthrough; + } case MAP_PRIVATE: /* * Set pgoff according to addr for anon_vma. @@ -550,16 +563,16 @@ unsigned long do_mmap(struct file *file, unsigned lon= g addr, if (flags & MAP_NORESERVE) { /* We honor MAP_NORESERVE if allowed to overcommit */ if (sysctl_overcommit_memory !=3D OVERCOMMIT_NEVER) - vm_flags |=3D VM_NORESERVE; + vma_flags_set(&vma_flags, VMA_NORESERVE_BIT); =20 /* hugetlb applies strict overcommit unless MAP_NORESERVE */ if (file && is_file_hugepages(file)) - vm_flags |=3D VM_NORESERVE; + vma_flags_set(&vma_flags, VMA_NORESERVE_BIT); } =20 - addr =3D mmap_region(file, addr, len, vm_flags, pgoff, uf); + addr =3D mmap_region(file, addr, len, vma_flags, pgoff, uf); if (!IS_ERR_VALUE(addr) && - ((vm_flags & VM_LOCKED) || + (vma_flags_test(&vma_flags, VMA_LOCKED_BIT) || (flags & (MAP_POPULATE | MAP_NONBLOCK)) =3D=3D MAP_POPULATE)) *populate =3D len; return addr; @@ -1191,7 +1204,7 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, star= t, unsigned long, size, } =20 ret =3D do_mmap(vma->vm_file, start, size, - prot, flags, 0, pgoff, &populate, NULL); + prot, flags, EMPTY_VMA_FLAGS, pgoff, &populate, NULL); out: mmap_write_unlock(mm); fput(file); diff --git a/mm/nommu.c b/mm/nommu.c index 4fef6fbbd6e9..47dc8bdd18e7 100644 --- a/mm/nommu.c +++ b/mm/nommu.c @@ -1014,11 +1014,12 @@ unsigned long do_mmap(struct file *file, unsigned long len, unsigned long prot, unsigned long flags, - vm_flags_t vm_flags, + vma_flags_t vma_flags, unsigned long pgoff, unsigned long *populate, struct list_head *uf) { + vm_flags_t vm_flags =3D vma_flags_to_legacy(vma_flags); struct vm_area_struct *vma; struct vm_region *region; struct rb_node *rb; diff --git a/mm/util.c b/mm/util.c index 61e6d32b2c16..befb16c6ea0e 100644 --- a/mm/util.c +++ b/mm/util.c @@ -578,8 +578,8 @@ unsigned long vm_mmap_pgoff(struct file *file, unsigned= long addr, if (!ret) { if (mmap_write_lock_killable(mm)) return -EINTR; - ret =3D do_mmap(file, addr, len, prot, flag, 0, pgoff, &populate, - &uf); + ret =3D do_mmap(file, addr, len, prot, flag, EMPTY_VMA_FLAGS, pgoff, + &populate, &uf); mmap_write_unlock(mm); userfaultfd_unmap_complete(mm, &uf); if (populate) @@ -627,20 +627,20 @@ EXPORT_SYMBOL(vm_mmap); unsigned long vm_mmap_shadow_stack(unsigned long addr, unsigned long len, unsigned long flags) { + vma_flags_t vma_flags =3D VMA_SHADOW_STACK; struct mm_struct *mm =3D current->mm; unsigned long ret, unused; - vm_flags_t vm_flags =3D VM_SHADOW_STACK; =20 flags |=3D MAP_ANONYMOUS | MAP_PRIVATE; if (addr) flags |=3D MAP_FIXED_NOREPLACE; =20 if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)) - vm_flags |=3D VM_NOHUGEPAGE; + vma_flags_set(&vma_flags, VMA_NOHUGEPAGE_BIT); =20 mmap_write_lock(mm); ret =3D do_mmap(NULL, addr, len, PROT_READ | PROT_WRITE, flags, - vm_flags, 0, &unused, NULL); + vma_flags, 0, &unused, NULL); mmap_write_unlock(mm); =20 return ret; diff --git a/mm/vma.c b/mm/vma.c index 7201199fc668..3d1ae3cae45f 100644 --- a/mm/vma.c +++ b/mm/vma.c @@ -2881,7 +2881,7 @@ static unsigned long __mmap_region(struct file *file,= unsigned long addr, * file to be mapped, otherwise NULL. * @addr: The page-aligned address at which to perform the mapping. * @len: The page-aligned, non-zero, length of the mapping. - * @vm_flags: The VMA flags which should be applied to the mapping. + * @vma_flags: The VMA flags which should be applied to the mapping. * @pgoff: If @file is specified, the page offset into the file, if not th= en * the virtual page offset in memory of the anonymous mapping. * @uf: Optionally, a pointer to a list head used for tracking userfaultfd= unmap @@ -2891,12 +2891,11 @@ static unsigned long __mmap_region(struct file *fil= e, unsigned long addr, * been performed. */ unsigned long mmap_region(struct file *file, unsigned long addr, - unsigned long len, vm_flags_t vm_flags, + unsigned long len, vma_flags_t vma_flags, unsigned long pgoff, struct list_head *uf) { unsigned long ret; bool writable_file_mapping =3D false; - const vma_flags_t vma_flags =3D legacy_to_vma_flags(vm_flags); =20 mmap_assert_write_locked(current->mm); =20 @@ -2905,7 +2904,7 @@ unsigned long mmap_region(struct file *file, unsigned= long addr, return -EACCES; =20 /* Allow architectures to sanity-check the vm_flags. */ - if (!arch_validate_flags(vm_flags)) + if (!arch_validate_flags(vma_flags_to_legacy(vma_flags))) return -EINVAL; =20 /* Map writable and ensure this isn't a sealed memfd. */ diff --git a/mm/vma.h b/mm/vma.h index f4f885615a92..bcf0c2773449 100644 --- a/mm/vma.h +++ b/mm/vma.h @@ -498,7 +498,7 @@ int mm_take_all_locks(struct mm_struct *mm); void mm_drop_all_locks(struct mm_struct *mm); =20 unsigned long mmap_region(struct file *file, unsigned long addr, - unsigned long len, vm_flags_t vm_flags, unsigned long pgoff, + unsigned long len, vma_flags_t vma_flags, unsigned long pgoff, struct list_head *uf); =20 int do_brk_flags(struct vma_iterator *vmi, struct vm_area_struct *brkvma, --=20 2.54.0 From nobody Sat Jul 4 20:54:49 2026 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 9444A3AA1B5; Mon, 29 Jun 2026 19:26:05 +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=1782761167; cv=none; b=CYqBPiiMnC7/UMTm72y+fmjGMfaLLqSXGVKJrgMb0gcO4wXU33TgrQwMfkA+eifzi1fHTj0lxngC9BiEgDY0ljKx9GIMqE4Ciydvd/iH/LQ/mGNtQa4NYJlYxLa3kdW04NG4CPCcSBu85GLQxbB3n7jEDqRAQ+/UMxNppaWlmS4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782761167; c=relaxed/simple; bh=HG7+dtxNhMpzYMqzxB0J1grmrRsF9aeW5rg2V6eIyfg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bU/nX8MTJXw09fOOa2pfcievdb/BjfJsY1J6ie4dJzvgKi61Ogp0eirf3GY1PfLj8wlMBf55ZgSpTM9KFCb7r0GDLGZ5OLjsl6bGPQ0eLvqiznqNtqCCc2xq0OpQgN/1YPcIzLklA06DbE0/Mw0n88uomBdRqvGge1VIoI1Niuc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mh42CEnV; 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="mh42CEnV" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5EB941F00A3A; Mon, 29 Jun 2026 19:26:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782761165; bh=MaO3ayQRsy4eLXJAr5Gtftk/d6G7w4vRnYQhd7ERP88=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=mh42CEnVAN4v5nNg2E2/FA5haGMowMalAtIhiu+jbLMz622FqQ/mkU+OD8A8R+yDp aKYJaUUgJ3tLX8cfrvsmlfZK49qR6WEvGGkeQVA64WyFjSC1BsdkpQ0ktF0R74pkvC mSSIA94MxJ06qZ+pMsoJll3Jsje3muSqIB9/In1/WqYQgCP0+YuPVyG8eVcQbvvNkT XJrCQmi5s5QyHIrhwBlICQZohXF426NyGqUWSgXGrkaMRD9dbErFFKyaoBkMJ1D/QV VeE4pk4MUcm2iFemV68BZLTTbFYfaHPCaDovkn6E5AV34oefv6H0Y/5nizqKm8EYK/ k5bPckliCXy3Q== From: Lorenzo Stoakes To: Andrew Morton Cc: Thomas Bogendoerfer , Madhavan Srinivasan , Michael Ellerman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Lucas Stach , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Rob Clark , Dmitry Baryshkov , Lyude Paul , Danilo Krummrich , Tomi Valkeinen , Sandy Huang , =?UTF-8?q?Heiko=20St=C3=BCbner?= , Andy Yan , Thierry Reding , Mikko Perttunen , Jonathan Hunter , Gerd Hoffmann , Dmitry Osipenko , Zack Rusin , Matthew Brost , Thomas Hellstrom , Oleksandr Andrushchenko , Helge Deller , Benjamin LaHaise , Alexander Viro , Christian Brauner , Muchun Song , Oscar Salvador , David Hildenbrand , Zi Yan , Baolin Wang , "Liam R . Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Hugh Dickins , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Jann Horn , Pedro Falcato , Kees Cook , Jaroslav Kysela , Takashi Iwai , linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, dri-devel@lists.freedesktop.org, etnaviv@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, intel-gfx@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-rockchip@lists.infradead.org, linux-tegra@vger.kernel.org, virtualization@lists.linux.dev, intel-xe@lists.freedesktop.org, xen-devel@lists.xenproject.org, linux-fbdev@vger.kernel.org, linux-aio@kvack.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-sound@vger.kernel.org Subject: [PATCH 03/13] mm: convert __get_unmapped_area() to use vma_flags_t Date: Mon, 29 Jun 2026 20:25:26 +0100 Message-ID: X-Mailer: git-send-email 2.54.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Update __get_unmapped_area() to be parameterised by vma_flags_t rather than vm_flags_t as part of the effort to move VMA flags from a system word to a bitmap. We cascade the changes up to arch_get_unmapped_area_topdown() and arch_get_unmapped_area(), where, for now, we use vma_flags_to_legacy() in order to propagate the VMA flags. No functional change intended. Signed-off-by: Lorenzo Stoakes Reviewed-by: Lance Yang --- fs/hugetlbfs/inode.c | 3 ++- include/linux/huge_mm.h | 10 +++++----- include/linux/mm.h | 6 ++++-- include/linux/sched/mm.h | 12 ++++++------ mm/huge_memory.c | 21 ++++++++++++--------- mm/mmap.c | 27 ++++++++++++++------------- 6 files changed, 43 insertions(+), 36 deletions(-) diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index 894d02e73302..fe7d5a5d60bd 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c @@ -184,7 +184,8 @@ hugetlb_get_unmapped_area(struct file *file, unsigned l= ong addr, if (addr) addr0 =3D ALIGN(addr, huge_page_size(h)); =20 - return mm_get_unmapped_area_vmflags(file, addr0, len, pgoff, flags, 0); + return mm_get_unmapped_area_vmaflags(file, addr0, len, pgoff, flags, + EMPTY_VMA_FLAGS); } =20 /* diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h index 653b81d08fe7..ae84a714907f 100644 --- a/include/linux/huge_mm.h +++ b/include/linux/huge_mm.h @@ -391,9 +391,9 @@ static inline bool thp_disabled_by_hw(void) =20 unsigned long thp_get_unmapped_area(struct file *filp, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags); -unsigned long thp_get_unmapped_area_vmflags(struct file *filp, unsigned lo= ng addr, +unsigned long thp_get_unmapped_area_vmaflags(struct file *filp, unsigned l= ong addr, unsigned long len, unsigned long pgoff, unsigned long flags, - vm_flags_t vm_flags); + vma_flags_t vma_flags); =20 enum split_type { SPLIT_TYPE_UNIFORM, @@ -615,9 +615,9 @@ static inline unsigned long thp_vma_allowable_orders(st= ruct vm_area_struct *vma, #define thp_get_unmapped_area NULL =20 static inline unsigned long -thp_get_unmapped_area_vmflags(struct file *filp, unsigned long addr, - unsigned long len, unsigned long pgoff, - unsigned long flags, vm_flags_t vm_flags) +thp_get_unmapped_area_vmaflags(struct file *filp, unsigned long addr, + unsigned long len, unsigned long pgoff, + unsigned long flags, vma_flags_t vma_flags) { return 0; } diff --git a/include/linux/mm.h b/include/linux/mm.h index cc2a87755adb..474b3698f565 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -4160,13 +4160,15 @@ unsigned long randomize_page(unsigned long start, u= nsigned long range); =20 unsigned long __get_unmapped_area(struct file *file, unsigned long addr, unsigned long l= en, - unsigned long pgoff, unsigned long flags, vm_flags_t vm_flags); + unsigned long pgoff, unsigned long flags, + vma_flags_t vma_flags); =20 static inline unsigned long get_unmapped_area(struct file *file, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags) { - return __get_unmapped_area(file, addr, len, pgoff, flags, 0); + return __get_unmapped_area(file, addr, len, pgoff, flags, + EMPTY_VMA_FLAGS); } =20 unsigned long do_mmap(struct file *file, unsigned long addr, diff --git a/include/linux/sched/mm.h b/include/linux/sched/mm.h index 95d0040df584..b301ec90740a 100644 --- a/include/linux/sched/mm.h +++ b/include/linux/sched/mm.h @@ -193,12 +193,12 @@ unsigned long mm_get_unmapped_area(struct file *filp,= unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags); =20 -unsigned long mm_get_unmapped_area_vmflags(struct file *filp, - unsigned long addr, - unsigned long len, - unsigned long pgoff, - unsigned long flags, - vm_flags_t vm_flags); +unsigned long mm_get_unmapped_area_vmaflags(struct file *filp, + unsigned long addr, + unsigned long len, + unsigned long pgoff, + unsigned long flags, + vma_flags_t vma_flags); =20 unsigned long generic_get_unmapped_area(struct file *filp, unsigned long addr, diff --git a/mm/huge_memory.c b/mm/huge_memory.c index e94f56487225..d6c5f51ee399 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -1196,7 +1196,7 @@ static inline bool is_transparent_hugepage(const stru= ct folio *folio) static unsigned long __thp_get_unmapped_area(struct file *filp, unsigned long addr, unsigned long len, loff_t off, unsigned long flags, unsigned long size, - vm_flags_t vm_flags) + vma_flags_t vma_flags) { loff_t off_end =3D off + len; loff_t off_align =3D round_up(off, size); @@ -1212,8 +1212,9 @@ static unsigned long __thp_get_unmapped_area(struct f= ile *filp, if (len_pad < len || (off + len_pad) < off) return 0; =20 - ret =3D mm_get_unmapped_area_vmflags(filp, addr, len_pad, - off >> PAGE_SHIFT, flags, vm_flags); + ret =3D mm_get_unmapped_area_vmaflags(filp, addr, len_pad, + off >> PAGE_SHIFT, flags, + vma_flags); =20 /* * The failure might be due to length padding. The caller will retry @@ -1238,25 +1239,27 @@ static unsigned long __thp_get_unmapped_area(struct= file *filp, return ret; } =20 -unsigned long thp_get_unmapped_area_vmflags(struct file *filp, unsigned lo= ng addr, +unsigned long thp_get_unmapped_area_vmaflags(struct file *filp, unsigned l= ong addr, unsigned long len, unsigned long pgoff, unsigned long flags, - vm_flags_t vm_flags) + vma_flags_t vma_flags) { unsigned long ret; loff_t off =3D (loff_t)pgoff << PAGE_SHIFT; =20 - ret =3D __thp_get_unmapped_area(filp, addr, len, off, flags, PMD_SIZE, vm= _flags); + ret =3D __thp_get_unmapped_area(filp, addr, len, off, flags, PMD_SIZE, + vma_flags); if (ret) return ret; =20 - return mm_get_unmapped_area_vmflags(filp, addr, len, pgoff, flags, - vm_flags); + return mm_get_unmapped_area_vmaflags(filp, addr, len, pgoff, flags, + vma_flags); } =20 unsigned long thp_get_unmapped_area(struct file *filp, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags) { - return thp_get_unmapped_area_vmflags(filp, addr, len, pgoff, flags, 0); + return thp_get_unmapped_area_vmaflags(filp, addr, len, pgoff, flags, + EMPTY_VMA_FLAGS); } EXPORT_SYMBOL_GPL(thp_get_unmapped_area); =20 diff --git a/mm/mmap.c b/mm/mmap.c index 547352183214..461ce510e12a 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -411,8 +411,7 @@ unsigned long do_mmap(struct file *file, unsigned long = addr, /* Obtain the address to map to. we verify (or select) it and ensure * that it represents a valid section of the address space. */ - addr =3D __get_unmapped_area(file, addr, len, pgoff, flags, - vma_flags_to_legacy(vma_flags)); + addr =3D __get_unmapped_area(file, addr, len, pgoff, flags, vma_flags); if (IS_ERR_VALUE(addr)) return addr; =20 @@ -812,19 +811,20 @@ arch_get_unmapped_area_topdown(struct file *filp, uns= igned long addr, } #endif =20 -unsigned long mm_get_unmapped_area_vmflags(struct file *filp, unsigned lon= g addr, - unsigned long len, unsigned long pgoff, - unsigned long flags, vm_flags_t vm_flags) +unsigned long mm_get_unmapped_area_vmaflags(struct file *filp, unsigned lo= ng addr, + unsigned long len, unsigned long pgoff, + unsigned long flags, vma_flags_t vma_flags) { if (mm_flags_test(MMF_TOPDOWN, current->mm)) return arch_get_unmapped_area_topdown(filp, addr, len, pgoff, - flags, vm_flags); - return arch_get_unmapped_area(filp, addr, len, pgoff, flags, vm_flags); + flags, vma_flags_to_legacy(vma_flags)); + return arch_get_unmapped_area(filp, addr, len, pgoff, flags, + vma_flags_to_legacy(vma_flags)); } =20 unsigned long __get_unmapped_area(struct file *file, unsigned long addr, unsigned long l= en, - unsigned long pgoff, unsigned long flags, vm_flags_t vm_flags) + unsigned long pgoff, unsigned long flags, vma_flags_t vma_flags) { unsigned long (*get_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long) @@ -859,11 +859,11 @@ __get_unmapped_area(struct file *file, unsigned long = addr, unsigned long len, && !addr /* no hint */ && IS_ALIGNED(len, PMD_SIZE)) { /* Ensures that larger anonymous mappings are THP aligned. */ - addr =3D thp_get_unmapped_area_vmflags(file, addr, len, - pgoff, flags, vm_flags); + addr =3D thp_get_unmapped_area_vmaflags(file, addr, len, + pgoff, flags, vma_flags); } else { - addr =3D mm_get_unmapped_area_vmflags(file, addr, len, - pgoff, flags, vm_flags); + addr =3D mm_get_unmapped_area_vmaflags(file, addr, len, + pgoff, flags, vma_flags); } if (IS_ERR_VALUE(addr)) return addr; @@ -881,7 +881,8 @@ unsigned long mm_get_unmapped_area(struct file *file, unsigned long addr, unsigned long = len, unsigned long pgoff, unsigned long flags) { - return mm_get_unmapped_area_vmflags(file, addr, len, pgoff, flags, 0); + return mm_get_unmapped_area_vmaflags(file, addr, len, pgoff, flags, + EMPTY_VMA_FLAGS); } EXPORT_SYMBOL(mm_get_unmapped_area); =20 --=20 2.54.0 From nobody Sat Jul 4 20:54:49 2026 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 2527E39EB7C; Mon, 29 Jun 2026 19:26:08 +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=1782761169; cv=none; b=X8tTrx1hDd9iPRKHkKzbpfFQrzRpL3S4T5tLa2LLoNahcrnkbfwVqM3Nl3nbFS+/M28D0bxc5JXQyrUgaXPn0Sm9b9VbI4Kl6aqMXRUWe0JUo3M4aLi+a0RE6p2kmtZi3IbsvHSm0RcKHuW8kKWHXyoNPGpl3AsihkVOXqAxBn4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782761169; c=relaxed/simple; bh=5Cr+5ea+2dRKG+1jIaUFmxMoFMQWRveuvRsHS3vCLfc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gN/wMM9kl619JiORhHIEUDtSginMsfb9MO0tJEb7VUlbsYNuNTP8c6IBnKi+bFgXqqxU7/ieOlzGVZZGybWCE2wki0H2E9FW/qdif2l2209PEWdcyYPGtOscK3PpEhGlUuG3Bn75N4ThVIGJBp+meZ2zlYvIji+jiTDZlBQx9xo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=BExgykrx; 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="BExgykrx" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3A2DC1F00A3E; Mon, 29 Jun 2026 19:26:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782761168; bh=hVd6ZuVqENj3zeMR4aL2t+2UMMhczNHM+gJ9snfAafg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=BExgykrxcgTd5RClbXfmFD5Hp/1Grb/Kjey3DiRaMUeFZgqydXxsDWyRIvpzoISG7 /Iilv3IrxTXNlJUqKZNyr5TyZZvKbnpj8BmRYrG9ZFdN0Nb0i0NyJk8Sl7npMKfdti 1DTOuDeaNgSBKxd+05qng9++fyrY+sD0P/+0C6uNIMSgwntxptodo0GGuiVJ2fa7Xh tcbnSkYetMr8IMTjqAFSQc8sq/Xc+KvUA6heTO4Lwayd0uEmx/7h0R2T9dkwHlc5h+ iCD7J6P0FnSJ3xPPyRVSFdOIImy48N18CmoYp7IbeVR4j1E/heYWHJ8ULXWfCEAyFn uHB+/Pwf3DOzg== From: Lorenzo Stoakes To: Andrew Morton Cc: Thomas Bogendoerfer , Madhavan Srinivasan , Michael Ellerman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Lucas Stach , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Rob Clark , Dmitry Baryshkov , Lyude Paul , Danilo Krummrich , Tomi Valkeinen , Sandy Huang , =?UTF-8?q?Heiko=20St=C3=BCbner?= , Andy Yan , Thierry Reding , Mikko Perttunen , Jonathan Hunter , Gerd Hoffmann , Dmitry Osipenko , Zack Rusin , Matthew Brost , Thomas Hellstrom , Oleksandr Andrushchenko , Helge Deller , Benjamin LaHaise , Alexander Viro , Christian Brauner , Muchun Song , Oscar Salvador , David Hildenbrand , Zi Yan , Baolin Wang , "Liam R . Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Hugh Dickins , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Jann Horn , Pedro Falcato , Kees Cook , Jaroslav Kysela , Takashi Iwai , linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, dri-devel@lists.freedesktop.org, etnaviv@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, intel-gfx@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-rockchip@lists.infradead.org, linux-tegra@vger.kernel.org, virtualization@lists.linux.dev, intel-xe@lists.freedesktop.org, xen-devel@lists.xenproject.org, linux-fbdev@vger.kernel.org, linux-aio@kvack.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-sound@vger.kernel.org Subject: [PATCH 04/13] mm: update generic_get_unmapped_area[_topdown]() to use vma_flags_t Date: Mon, 29 Jun 2026 20:25:27 +0100 Message-ID: X-Mailer: git-send-email 2.54.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" As part of the changes converting VMA flags from a system word size to a bitmap, extend this change to generic_get_unmapped_area() and generic_get_unmapped_area_topdown(), which also allows us to convert stack_guard_placement() as well. We retain arch_get_unmapped_area() and arch_get_unmapped_area_topdown() as-is for now, using legacy_to_vma_flags() as necessary to do so. No functional change intended. Signed-off-by: Lorenzo Stoakes Reviewed-by: Lance Yang --- arch/powerpc/mm/book3s64/slice.c | 6 ++++-- include/linux/sched/mm.h | 4 ++-- mm/mmap.c | 16 ++++++++-------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/arch/powerpc/mm/book3s64/slice.c b/arch/powerpc/mm/book3s64/sl= ice.c index 28bec5bc7879..82127e31dca6 100644 --- a/arch/powerpc/mm/book3s64/slice.c +++ b/arch/powerpc/mm/book3s64/slice.c @@ -659,7 +659,8 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned int psize; =20 if (radix_enabled()) - return generic_get_unmapped_area(filp, addr, len, pgoff, flags, vm_flags= ); + return generic_get_unmapped_area(filp, addr, len, pgoff, flags, + legacy_to_vma_flags(vm_flags)); =20 if (filp && is_file_hugepages(filp)) psize =3D file_to_psize(filp); @@ -679,7 +680,8 @@ unsigned long arch_get_unmapped_area_topdown(struct fil= e *filp, unsigned int psize; =20 if (radix_enabled()) - return generic_get_unmapped_area_topdown(filp, addr0, len, pgoff, flags,= vm_flags); + return generic_get_unmapped_area_topdown(filp, addr0, len, + pgoff, flags, legacy_to_vma_flags(vm_flags)); =20 if (filp && is_file_hugepages(filp)) psize =3D file_to_psize(filp); diff --git a/include/linux/sched/mm.h b/include/linux/sched/mm.h index b301ec90740a..c8720d8e2158 100644 --- a/include/linux/sched/mm.h +++ b/include/linux/sched/mm.h @@ -203,11 +203,11 @@ unsigned long mm_get_unmapped_area_vmaflags(struct fi= le *filp, unsigned long generic_get_unmapped_area(struct file *filp, unsigned long addr, unsigned long len, unsigned long pgoff, - unsigned long flags, vm_flags_t vm_flags); + unsigned long flags, vma_flags_t vma_flags); unsigned long generic_get_unmapped_area_topdown(struct file *filp, unsigned long addr, unsigned long len, unsigned long pgoff, - unsigned long flags, vm_flags_t vm_flags); + unsigned long flags, vma_flags_t vma_flags); #else static inline void arch_pick_mmap_layout(struct mm_struct *mm, const struct rlimit *rlim_stack) {} diff --git a/mm/mmap.c b/mm/mmap.c index 461ce510e12a..3ef603d5ff00 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -657,9 +657,9 @@ SYSCALL_DEFINE1(old_mmap, struct mmap_arg_struct __user= *, arg) * Determine if the allocation needs to ensure that there is no * existing mapping within it's guard gaps, for use as start_gap. */ -static inline unsigned long stack_guard_placement(vm_flags_t vm_flags) +static inline unsigned long stack_guard_placement(vma_flags_t vma_flags) { - if (vm_flags & VM_SHADOW_STACK) + if (vma_flags_test_single_mask(&vma_flags, VMA_SHADOW_STACK)) return PAGE_SIZE; =20 return 0; @@ -701,7 +701,7 @@ unsigned long vm_unmapped_area(struct vm_unmapped_area_= info *info) unsigned long generic_get_unmapped_area(struct file *filp, unsigned long addr, unsigned long len, unsigned long pgoff, - unsigned long flags, vm_flags_t vm_flags) + unsigned long flags, vma_flags_t vma_flags) { struct mm_struct *mm =3D current->mm; struct vm_area_struct *vma, *prev; @@ -726,7 +726,7 @@ generic_get_unmapped_area(struct file *filp, unsigned l= ong addr, info.length =3D len; info.low_limit =3D mm->mmap_base; info.high_limit =3D mmap_end; - info.start_gap =3D stack_guard_placement(vm_flags); + info.start_gap =3D stack_guard_placement(vma_flags); if (filp && is_file_hugepages(filp)) info.align_mask =3D huge_page_mask_align(filp); return vm_unmapped_area(&info); @@ -739,7 +739,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long= addr, unsigned long flags, vm_flags_t vm_flags) { return generic_get_unmapped_area(filp, addr, len, pgoff, flags, - vm_flags); + legacy_to_vma_flags(vm_flags)); } #endif =20 @@ -750,7 +750,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long= addr, unsigned long generic_get_unmapped_area_topdown(struct file *filp, unsigned long addr, unsigned long len, unsigned long pgoff, - unsigned long flags, vm_flags_t vm_flags) + unsigned long flags, vma_flags_t vma_flags) { struct vm_area_struct *vma, *prev; struct mm_struct *mm =3D current->mm; @@ -778,7 +778,7 @@ generic_get_unmapped_area_topdown(struct file *filp, un= signed long addr, info.length =3D len; info.low_limit =3D PAGE_SIZE; info.high_limit =3D arch_get_mmap_base(addr, mm->mmap_base); - info.start_gap =3D stack_guard_placement(vm_flags); + info.start_gap =3D stack_guard_placement(vma_flags); if (filp && is_file_hugepages(filp)) info.align_mask =3D huge_page_mask_align(filp); addr =3D vm_unmapped_area(&info); @@ -807,7 +807,7 @@ arch_get_unmapped_area_topdown(struct file *filp, unsig= ned long addr, unsigned long flags, vm_flags_t vm_flags) { return generic_get_unmapped_area_topdown(filp, addr, len, pgoff, flags, - vm_flags); + legacy_to_vma_flags(vm_flags)); } #endif =20 --=20 2.54.0 From nobody Sat Jul 4 20:54:49 2026 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 F0A893E6DE8; Mon, 29 Jun 2026 19:26: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=1782761174; cv=none; b=lbMvwjeec38lujPsixTWT7ss2IEtxBqf2NL6xUN3npbNUxo/0EC++MlQdvCsa8xjaecPCu70VvuGihoiYbEGjunyH5/5awy7C/LPdO/21aqTgJ2NxpgBCfkvedqlQVT1PMpGjohB/fh0s8G2igyh8taoo0MNsyQiktiGk6k5H4U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782761174; c=relaxed/simple; bh=UF1OOQvDUvuX4dW86sz1yvXkspF8i9HbP3IXUiHK/bE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mAGxQM5IfAmtFmX8X5nZ/FKvW+SYrztqdNkUt/1GKyzxRyK9w5B7A03BuyB6d2/EjoVOxOgDGoMZPbbetfiZuRrYQAGy58t4p9KwPsgnjZCbK42ofZhikW9q3rEuFoEKDJ2/Ol7oznZ6nCkxxGfDWw2ke0afRRMOEADj3gPtULQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=aLceiJFh; 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="aLceiJFh" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 144CE1F000E9; Mon, 29 Jun 2026 19:26:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782761170; bh=UckrPyyaq5eQ3/ESdKIiCBv0nseBWr37AnyJxZAhDyA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=aLceiJFh+snHgwJGHP/qCXPhR7qJ8YyjaxrTlyR7D0hm5wLyHQY+iiA2uneyDGmJj G1AZncsiLujD5kbc1tsdhnrkJC1E7rMCK1ujoj1v4UNRKHLZ2ORGgy2VUFnNGPcKDg qaMyPLULt4Sx9ASgeeO/9di4CBbN4HFxF8uEtPuukCrlTuIeaGOoXMhYYoTszUhLhD fvTqEJQb4R9AyFWNvK4MljxzMGQy1r1QEaCpWeY0/SsjhR5XfDBHn1Ges8h1q3P8fo GY2yfWatCDrMfqmDF8fuVGk9e/dRAHn2Nv/h2jGdVSYE3pZVge2XsX8pZGvzj03VY4 zsNjEpharm7Yw== From: Lorenzo Stoakes To: Andrew Morton Cc: Thomas Bogendoerfer , Madhavan Srinivasan , Michael Ellerman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Lucas Stach , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Rob Clark , Dmitry Baryshkov , Lyude Paul , Danilo Krummrich , Tomi Valkeinen , Sandy Huang , =?UTF-8?q?Heiko=20St=C3=BCbner?= , Andy Yan , Thierry Reding , Mikko Perttunen , Jonathan Hunter , Gerd Hoffmann , Dmitry Osipenko , Zack Rusin , Matthew Brost , Thomas Hellstrom , Oleksandr Andrushchenko , Helge Deller , Benjamin LaHaise , Alexander Viro , Christian Brauner , Muchun Song , Oscar Salvador , David Hildenbrand , Zi Yan , Baolin Wang , "Liam R . Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Hugh Dickins , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Jann Horn , Pedro Falcato , Kees Cook , Jaroslav Kysela , Takashi Iwai , linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, dri-devel@lists.freedesktop.org, etnaviv@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, intel-gfx@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-rockchip@lists.infradead.org, linux-tegra@vger.kernel.org, virtualization@lists.linux.dev, intel-xe@lists.freedesktop.org, xen-devel@lists.xenproject.org, linux-fbdev@vger.kernel.org, linux-aio@kvack.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-sound@vger.kernel.org Subject: [PATCH 05/13] mm: prefer mm->def_vma_flags in mm logic Date: Mon, 29 Jun 2026 20:25:28 +0100 Message-ID: <3b4ccdc38819b42ddc79ee5a795831208ac7986c.1782760670.git.ljs@kernel.org> X-Mailer: git-send-email 2.54.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Currently mm->def_flags (of type vm_flags_t) is union'd with mm->def_vma_flags (of type vma_flags_t). As part of the effort to convert vm_flags_t usage to vma_flags_t (in order to no longer be arbitrarily limited to a system word size for VMA flags), prefer mm->def_vma_flags to mm->def_flags throughout the mm logic. No functional change intended. Signed-off-by: Lorenzo Stoakes Reviewed-by: Lance Yang --- mm/debug.c | 2 +- mm/mlock.c | 13 +++++++------ mm/mmap.c | 11 ++++++----- mm/vma.c | 4 ++-- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/mm/debug.c b/mm/debug.c index 497654b36f1a..f0a354a9496a 100644 --- a/mm/debug.c +++ b/mm/debug.c @@ -226,7 +226,7 @@ void dump_mm(const struct mm_struct *mm) mm->numa_next_scan, mm->numa_scan_offset, mm->numa_scan_seq, #endif atomic_read(&mm->tlb_flush_pending), - mm->def_flags, &mm->def_flags + vma_flags_to_legacy(mm->def_vma_flags), &mm->def_vma_flags ); } EXPORT_SYMBOL(dump_mm); diff --git a/mm/mlock.c b/mm/mlock.c index 8c227fefa2df..9c87b3ced65f 100644 --- a/mm/mlock.c +++ b/mm/mlock.c @@ -699,26 +699,27 @@ SYSCALL_DEFINE2(munlock, unsigned long, start, size_t= , len) =20 /* * Take the MCL_* flags passed into mlockall (or 0 if called from munlocka= ll) - * and translate into the appropriate modifications to mm->def_flags and/o= r the - * flags for all current VMAs. + * and translate into the appropriate modifications to mm->def_vma_flags a= nd/or + * the flags for all current VMAs. * * There are a couple of subtleties with this. If mlockall() is called mu= ltiple * times with different flags, the values do not necessarily stack. If ml= ockall * is called once including the MCL_FUTURE flag and then a second time wit= hout - * it, VM_LOCKED and VM_LOCKONFAULT will be cleared from mm->def_flags. + * it, VM_LOCKED and VM_LOCKONFAULT will be cleared from mm->def_vma_flags. */ static int apply_mlockall_flags(int flags) { VMA_ITERATOR(vmi, current->mm, 0); + struct mm_struct *mm =3D current->mm; struct vm_area_struct *vma, *prev =3D NULL; vm_flags_t to_add =3D 0; =20 - current->mm->def_flags &=3D ~VM_LOCKED_MASK; + vma_flags_clear_mask(&mm->def_vma_flags, VMA_LOCKED_MASK); if (flags & MCL_FUTURE) { - current->mm->def_flags |=3D VM_LOCKED; + vma_flags_set(&mm->def_vma_flags, VMA_LOCKED_BIT); =20 if (flags & MCL_ONFAULT) - current->mm->def_flags |=3D VM_LOCKONFAULT; + vma_flags_set(&mm->def_vma_flags, VMA_LOCKONFAULT_BIT); =20 if (!(flags & MCL_CURRENT)) goto out; diff --git a/mm/mmap.c b/mm/mmap.c index 3ef603d5ff00..477f4a77361a 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -102,15 +102,16 @@ void vma_set_page_prot(struct vm_area_struct *vma) */ static int check_brk_limits(unsigned long addr, unsigned long len) { + const struct mm_struct *mm =3D current->mm; + const bool is_def_locked =3D + vma_flags_test(&mm->def_vma_flags, VMA_LOCKED_BIT); unsigned long mapped_addr; =20 mapped_addr =3D get_unmapped_area(NULL, addr, len, 0, MAP_FIXED); if (IS_ERR_VALUE(mapped_addr)) return mapped_addr; =20 - return mlock_future_ok(current->mm, - current->mm->def_flags & VM_LOCKED, len) - ? 0 : -EAGAIN; + return mlock_future_ok(mm, is_def_locked, len) ? 0 : -EAGAIN; } =20 SYSCALL_DEFINE1(brk, unsigned long, brk) @@ -197,7 +198,7 @@ SYSCALL_DEFINE1(brk, unsigned long, brk) goto out; =20 mm->brk =3D brk; - if (mm->def_flags & VM_LOCKED) + if (vma_flags_test(&mm->def_vma_flags, VMA_LOCKED_BIT)) populate =3D true; =20 success: @@ -1247,7 +1248,7 @@ int vm_brk_flags(unsigned long addr, unsigned long re= quest, bool is_exec) =20 vma =3D vma_prev(&vmi); ret =3D do_brk_flags(&vmi, vma, addr, len, vma_flags); - populate =3D ((mm->def_flags & VM_LOCKED) !=3D 0); + populate =3D vma_flags_test(&mm->def_vma_flags, VMA_LOCKED_BIT); mmap_write_unlock(mm); userfaultfd_unmap_complete(mm, &uf); if (populate && !ret) diff --git a/mm/vma.c b/mm/vma.c index 3d1ae3cae45f..fb4341943576 100644 --- a/mm/vma.c +++ b/mm/vma.c @@ -3424,7 +3424,8 @@ struct vm_area_struct *__install_special_mapping( if (unlikely(vma =3D=3D NULL)) return ERR_PTR(-ENOMEM); =20 - vm_flags |=3D mm->def_flags | VM_DONTEXPAND; + vma_set_range(vma, addr, addr + len, 0); + vm_flags |=3D vma_flags_to_legacy(mm->def_vma_flags) | VM_DONTEXPAND; if (pgtable_supports_soft_dirty()) vm_flags |=3D VM_SOFTDIRTY; vm_flags_init(vma, vm_flags & ~VM_LOCKED_MASK); @@ -3432,7 +3433,6 @@ struct vm_area_struct *__install_special_mapping( =20 vma->vm_ops =3D ops; vma->vm_private_data =3D priv; - vma_set_range(vma, addr, addr + len, 0); =20 ret =3D insert_vm_struct(mm, vma); if (ret) --=20 2.54.0 From nobody Sat Jul 4 20:54:49 2026 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 16D3E3B42DD; Mon, 29 Jun 2026 19:26:13 +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=1782761175; cv=none; b=cdjl7EdleipppHII/fAF51xqmhd87ZAxcLcs9MuKJ30GsSO4xa3+qV1DOIrM23xyQyM/s7R2iIGfsLYQMbuYe8w8aKDeg382a4T8tpU4tz+jPrDUC+u24saQ6Snbk/hElM8Hm1pJEI+OBy613owi452xI7gpu6lfTKlq5br91P4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782761175; c=relaxed/simple; bh=cZgpx9ycr7f068GPSQ7VRQ58TwjMm6btirZrrsYD7tg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZDmbsV9JfwkeUXPtWokUclNRgvUjPVYoarpPP9AX72moalA5/OVqZPGQrIien0Dh03kCVzJDxgZGtpj8UcOphBOBOp4Ctgbx1kAjsWMPsAkNAzlgLvw5bOVx21I8c/qzlHWDQ7oLEmEekg1Tij89Zhenf7XD6pC3BltJ8V4CQYo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=F+1lY+lC; 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="F+1lY+lC" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E2FCC1F00A3D; Mon, 29 Jun 2026 19:26:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782761173; bh=gKmo4U1gXLGtJnRP+WhnxnFRqzwXuOB5h6v9uTSdV1s=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=F+1lY+lCh4/ljg4cAF+WiIYMH69AbV51hkuC1jZywIIRJtnSTTT9Cl417kLqBvIL2 8OgnOg+47T8fRg2he/k0Czan1lawmcrV1QOn8ALLq/c2Ln2nuZw+lUVlp9IBNBM7O9 ULuAgYhvU87+ozqV7cC/Uv3vF3QGLRPm547HTvpe+ig3eiPKismCLxZqLocHJJSRPE ub2TJPIrtzztEsLj+o6x6PxyaZ56GCtceA3IiAP5fOpSWc8Uo+I5/jmojutM8causc cQ+/HDIGoeC5yU7JzcyMSeGb6xZ0mYXeADHJM+UmSIQ/cxJ8RXeP+AGDV1OS3TxIGG sMbSC7d+ndHmA== From: Lorenzo Stoakes To: Andrew Morton Cc: Thomas Bogendoerfer , Madhavan Srinivasan , Michael Ellerman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Lucas Stach , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Rob Clark , Dmitry Baryshkov , Lyude Paul , Danilo Krummrich , Tomi Valkeinen , Sandy Huang , =?UTF-8?q?Heiko=20St=C3=BCbner?= , Andy Yan , Thierry Reding , Mikko Perttunen , Jonathan Hunter , Gerd Hoffmann , Dmitry Osipenko , Zack Rusin , Matthew Brost , Thomas Hellstrom , Oleksandr Andrushchenko , Helge Deller , Benjamin LaHaise , Alexander Viro , Christian Brauner , Muchun Song , Oscar Salvador , David Hildenbrand , Zi Yan , Baolin Wang , "Liam R . Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Hugh Dickins , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Jann Horn , Pedro Falcato , Kees Cook , Jaroslav Kysela , Takashi Iwai , linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, dri-devel@lists.freedesktop.org, etnaviv@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, intel-gfx@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-rockchip@lists.infradead.org, linux-tegra@vger.kernel.org, virtualization@lists.linux.dev, intel-xe@lists.freedesktop.org, xen-devel@lists.xenproject.org, linux-fbdev@vger.kernel.org, linux-aio@kvack.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-sound@vger.kernel.org Subject: [PATCH 06/13] mm/vma: convert vm_pgprot_modify() to use vma_flags_t and rename Date: Mon, 29 Jun 2026 20:25:29 +0100 Message-ID: <548ba81b2971734d4d2143237ad1465bd1b2f525.1782760670.git.ljs@kernel.org> X-Mailer: git-send-email 2.54.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Update vm_pgprot_modify() to use the new VMA flags type vma_flags_t, and rename to vma_pgprot_modify() accordingly. This is part of the ongoing work to convert vm_flags_t to vma_flags_t, in order to eliminate the arbitrary limit of the number of bits in a system word on available VMA flags. Update VMA userland tests accordingly, updating vma_set_page_prot() to no longer inline vma_pgprot_modify(), rather we can simply define vma_pgprot_modify() as a static inline function and the tests will pick it up from vma.h. No functional change intended. Signed-off-by: Lorenzo Stoakes Reviewed-by: Lance Yang --- mm/mmap.c | 8 ++++---- mm/vma.c | 2 +- mm/vma.h | 6 ++++-- tools/testing/vma/include/dup.h | 12 +++++------- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/mm/mmap.c b/mm/mmap.c index 477f4a77361a..e834ec9273e3 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -80,13 +80,13 @@ core_param(ignore_rlimit_data, ignore_rlimit_data, bool= , 0644); /* Update vma->vm_page_prot to reflect vma->vm_flags. */ void vma_set_page_prot(struct vm_area_struct *vma) { - vm_flags_t vm_flags =3D vma->vm_flags; + vma_flags_t vma_flags =3D vma->flags; pgprot_t vm_page_prot; =20 - vm_page_prot =3D vm_pgprot_modify(vma->vm_page_prot, vm_flags); + vm_page_prot =3D vma_pgprot_modify(vma->vm_page_prot, vma_flags); if (vma_wants_writenotify(vma, vm_page_prot)) { - vm_flags &=3D ~VM_SHARED; - vm_page_prot =3D vm_pgprot_modify(vm_page_prot, vm_flags); + vma_flags_clear(&vma_flags, VMA_SHARED_BIT); + vm_page_prot =3D vma_pgprot_modify(vm_page_prot, vma_flags); } /* remove_protection_ptes reads vma->vm_page_prot without mmap_lock */ WRITE_ONCE(vma->vm_page_prot, vm_page_prot); diff --git a/mm/vma.c b/mm/vma.c index fb4341943576..395b6619ecc1 100644 --- a/mm/vma.c +++ b/mm/vma.c @@ -2179,7 +2179,7 @@ bool vma_wants_writenotify(struct vm_area_struct *vma= , pgprot_t vm_page_prot) /* The open routine did something to the protections that pgprot_modify * won't preserve? */ if (pgprot_val(vm_page_prot) !=3D - pgprot_val(vm_pgprot_modify(vm_page_prot, vma->vm_flags))) + pgprot_val(vma_pgprot_modify(vm_page_prot, vma->flags))) return false; =20 /* diff --git a/mm/vma.h b/mm/vma.h index bcf0c2773449..6a8abb8ae937 100644 --- a/mm/vma.h +++ b/mm/vma.h @@ -522,9 +522,11 @@ static inline bool vma_wants_manual_pte_write_upgrade(= struct vm_area_struct *vma } =20 #ifdef CONFIG_MMU -static inline pgprot_t vm_pgprot_modify(pgprot_t oldprot, vm_flags_t vm_fl= ags) +static inline pgprot_t vma_pgprot_modify(pgprot_t oldprot, vma_flags_t vma= _flags) { - return pgprot_modify(oldprot, vm_get_page_prot(vm_flags)); + const pgprot_t prot =3D vma_get_page_prot(vma_flags); + + return pgprot_modify(oldprot, prot); } #endif =20 diff --git a/tools/testing/vma/include/dup.h b/tools/testing/vma/include/du= p.h index 6f5bcd7fbcd8..813044781719 100644 --- a/tools/testing/vma/include/dup.h +++ b/tools/testing/vma/include/dup.h @@ -1434,20 +1434,18 @@ struct vm_area_struct *vma_iter_next_range(struct v= ma_iterator *vmi) } =20 bool vma_wants_writenotify(struct vm_area_struct *vma, pgprot_t vm_page_pr= ot); +static inline pgprot_t vma_pgprot_modify(pgprot_t oldprot, vma_flags_t vma= _flags); =20 /* Update vma->vm_page_prot to reflect vma->vm_flags. */ static inline void vma_set_page_prot(struct vm_area_struct *vma) { - vm_flags_t vm_flags =3D vma->vm_flags; + vma_flags_t vma_flags =3D vma->flags; pgprot_t vm_page_prot; =20 - /* testing: we inline vm_pgprot_modify() to avoid clash with vma.h. */ - vm_page_prot =3D pgprot_modify(vma->vm_page_prot, vm_get_page_prot(vm_fla= gs)); - + vm_page_prot =3D vma_pgprot_modify(vma->vm_page_prot, vma_flags); if (vma_wants_writenotify(vma, vm_page_prot)) { - vm_flags &=3D ~VM_SHARED; - /* testing: we inline vm_pgprot_modify() to avoid clash with vma.h. */ - vm_page_prot =3D pgprot_modify(vm_page_prot, vm_get_page_prot(vm_flags)); + vma_flags_clear(&vma_flags, VMA_SHARED_BIT); + vm_page_prot =3D vma_pgprot_modify(vm_page_prot, vma_flags); } /* remove_protection_ptes reads vma->vm_page_prot without mmap_lock */ WRITE_ONCE(vma->vm_page_prot, vm_page_prot); --=20 2.54.0 From nobody Sat Jul 4 20:54:49 2026 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 A36F13EFD24; Mon, 29 Jun 2026 19:26:16 +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=1782761179; cv=none; b=STXporsI2dgAcKcQ5+74alBJQhYk0R18BQIb7nYtvNsUzwZhXK6PxqkXu4nEklW7UqE+QdkA9Su5bJPHhxyoUB3F8rYXv6fky6hK9ZmaaTyNICTuSyxCCt3sogYvbjULFIVx7U9IazdPd+5zftzHRNBdhmOtHAFvLmA/1SPKpts= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782761179; c=relaxed/simple; bh=QzHBEaoEbBUkqUA/ugmZE0dLmpHJ0OMyYpqheg0NYXU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=d97CL64P6FCkX9fO70KwHma5Dx3KEEIYtl3XeWdLavps7AqCBd6wkdp7zXaFw9j0mbW+PwML1JoJ3rUFh8wg/gyXqldPZmkHw8lx1iUHVDDL4U/dp4WTBULXuZohAPn1IEY+XfbPEViJbbaI/rSbibQPO7C2zme/F45qSxwg9gI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=klEBAvxA; 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="klEBAvxA" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BC1611F00A3A; Mon, 29 Jun 2026 19:26:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782761176; bh=kVNcj1n0t63iEIMvCjdqZpMGs73q5Ko9ggshfmmLkXE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=klEBAvxAFllrYroNuPJLJ6gpkhIWH2gTVoT+/xDpJL5trOYXohBGpPUklmeyy3M8s V8yPCwMkEt0hiRNtDQFKpdz3l1uU7duIasGbSIztboWDM2ZAqiJD0rorDwfoqGlBAa LG7rxtse+7tEtmE7jUNFo/a5he8kyou91LnB1mOd3C/3gEPhWsxleGxfu6UNzRLKT4 q/kle54fQbZ80BilK1fYXEKilUW+HJlbq+uSEtkk9SKLXzWuUuYgjrQUH6aBSmWp7O s8EEU2+Bt7ipQc2WUzag4pdln2sWzLqlewf7/vmu4r9kXvNYawRuP/0vdC2aunN5Wg EWS79jrl2lb4w== From: Lorenzo Stoakes To: Andrew Morton Cc: Thomas Bogendoerfer , Madhavan Srinivasan , Michael Ellerman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Lucas Stach , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Rob Clark , Dmitry Baryshkov , Lyude Paul , Danilo Krummrich , Tomi Valkeinen , Sandy Huang , =?UTF-8?q?Heiko=20St=C3=BCbner?= , Andy Yan , Thierry Reding , Mikko Perttunen , Jonathan Hunter , Gerd Hoffmann , Dmitry Osipenko , Zack Rusin , Matthew Brost , Thomas Hellstrom , Oleksandr Andrushchenko , Helge Deller , Benjamin LaHaise , Alexander Viro , Christian Brauner , Muchun Song , Oscar Salvador , David Hildenbrand , Zi Yan , Baolin Wang , "Liam R . Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Hugh Dickins , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Jann Horn , Pedro Falcato , Kees Cook , Jaroslav Kysela , Takashi Iwai , linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, dri-devel@lists.freedesktop.org, etnaviv@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, intel-gfx@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-rockchip@lists.infradead.org, linux-tegra@vger.kernel.org, virtualization@lists.linux.dev, intel-xe@lists.freedesktop.org, xen-devel@lists.xenproject.org, linux-fbdev@vger.kernel.org, linux-aio@kvack.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-sound@vger.kernel.org Subject: [PATCH 07/13] mm/vma: rename vma_get_page_prot to vma_flags_to_page_prot Date: Mon, 29 Jun 2026 20:25:30 +0100 Message-ID: X-Mailer: git-send-email 2.54.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Having vma_get_page_prot() refer to VMA flags and vma_set_page_prot() refer to a VMA is confusing. Rename vma_get_page_prot() to vma_flags_to_page_prot() to resolve this confusion. No functional change intended. Signed-off-by: Lorenzo Stoakes Reviewed-by: Lance Yang --- include/linux/mm.h | 4 ++-- mm/vma.c | 2 +- mm/vma.h | 2 +- tools/testing/vma/include/dup.h | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 474b3698f565..c8336f68d7bb 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -4568,7 +4568,7 @@ static inline bool range_in_vma_desc(const struct vm_= area_desc *desc, #ifdef CONFIG_MMU pgprot_t vm_get_page_prot(vm_flags_t vm_flags); =20 -static inline pgprot_t vma_get_page_prot(vma_flags_t vma_flags) +static inline pgprot_t vma_flags_to_page_prot(vma_flags_t vma_flags) { const vm_flags_t vm_flags =3D vma_flags_to_legacy(vma_flags); =20 @@ -4581,7 +4581,7 @@ static inline pgprot_t vm_get_page_prot(vm_flags_t vm= _flags) { return __pgprot(0); } -static inline pgprot_t vma_get_page_prot(vma_flags_t vma_flags) +static inline pgprot_t vma_flags_to_page_prot(vma_flags_t vma_flags) { return __pgprot(0); } diff --git a/mm/vma.c b/mm/vma.c index 395b6619ecc1..fcdd2ac3ac68 100644 --- a/mm/vma.c +++ b/mm/vma.c @@ -56,7 +56,7 @@ struct mmap_state { .pglen =3D PHYS_PFN(len_), \ .vma_flags =3D vma_flags_, \ .file =3D file_, \ - .page_prot =3D vma_get_page_prot(vma_flags_), \ + .page_prot =3D vma_flags_to_page_prot(vma_flags_), \ } =20 #define VMG_MMAP_STATE(name, map_, vma_) \ diff --git a/mm/vma.h b/mm/vma.h index 6a8abb8ae937..d6b48d596f44 100644 --- a/mm/vma.h +++ b/mm/vma.h @@ -524,7 +524,7 @@ static inline bool vma_wants_manual_pte_write_upgrade(s= truct vm_area_struct *vma #ifdef CONFIG_MMU static inline pgprot_t vma_pgprot_modify(pgprot_t oldprot, vma_flags_t vma= _flags) { - const pgprot_t prot =3D vma_get_page_prot(vma_flags); + const pgprot_t prot =3D vma_flags_to_page_prot(vma_flags); =20 return pgprot_modify(oldprot, prot); } diff --git a/tools/testing/vma/include/dup.h b/tools/testing/vma/include/du= p.h index 813044781719..1ffac38a5377 100644 --- a/tools/testing/vma/include/dup.h +++ b/tools/testing/vma/include/dup.h @@ -1555,7 +1555,7 @@ static inline int get_sysctl_max_map_count(void) #define pgtable_supports_soft_dirty() IS_ENABLED(CONFIG_MEM_SOFT_DIRTY) #endif =20 -static inline pgprot_t vma_get_page_prot(vma_flags_t vma_flags) +static inline pgprot_t vma_flags_to_page_prot(vma_flags_t vma_flags) { const vm_flags_t vm_flags =3D vma_flags_to_legacy(vma_flags); =20 --=20 2.54.0 From nobody Sat Jul 4 20:54:49 2026 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 B4D5C3DEAD3; Mon, 29 Jun 2026 19:26:19 +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=1782761184; cv=none; b=JFd5UOlkeM++RER667ZNG8Rq6bJg41M2q5odSXIdJVQveAHSgSJP1HzjIJeiDY4JHtbXwr/UpV8coLG/IgeYfGEqPtRZ9hozxd9Wp36MhJF3gXpL4XFZ8IPYKwdp8Phc4mN03Dm1CGgxXjHscIYlL5ZrlYX4Jg5VIpTNUFf+Uy8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782761184; c=relaxed/simple; bh=v5NqH5xyyFW7dP3aBua6RoAjFTyepOhdhArr2Wf4BYE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JsDl75S4OYLeJ7duTVRMIwzA8e84ha/rm3yCVDDvol75R0+G6h3+JSTga2e1KNpPBhVX+GA30vUbm+UYdGFkSfDMp1xaHW6Yr/MF4y5ICOEmIKzhoBlO4kC/V5bhHa0JeB8baKRx81wn4Xy/4AzI1vQMqQJCHpgs0RKZtWEJvds= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=INJnmFsC; 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="INJnmFsC" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 946CA1F000E9; Mon, 29 Jun 2026 19:26:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782761179; bh=3/FJFvBs5xYxV+OsC+b/AJP15U4xxvb0yHAIYzsVez4=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=INJnmFsCeswPGd5Z3fFBG/WeaWLYUvMWgDRZZYe3irP6gSJ+6DHTAAXCt90m5glr6 EXegO2ROZ9BTm2d45RB2EkzkZFFJEBrfNwdsMfp1JOAo97PMbWnV6dMcr0kQEfwGvv 83bR89Sldh+7DKS35Ifvq+o187a+RmRyfMm1EQNaD97jAXQRDEr+mYzHfKiC9z6aij ZkYd2vUewlU1eH0y0TxPpLMcEYwODh29MVEhZMnzVdUECT8YCRP37fJR2EqGl8HQn6 UykD6xCAzPDLDBYA0IiYoqMEetsHjygPxIu92+DBLfJFYVy5+U7OoifoY+4OlKhxmZ BJ288/bOIlhQQ== From: Lorenzo Stoakes To: Andrew Morton Cc: Thomas Bogendoerfer , Madhavan Srinivasan , Michael Ellerman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Lucas Stach , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Rob Clark , Dmitry Baryshkov , Lyude Paul , Danilo Krummrich , Tomi Valkeinen , Sandy Huang , =?UTF-8?q?Heiko=20St=C3=BCbner?= , Andy Yan , Thierry Reding , Mikko Perttunen , Jonathan Hunter , Gerd Hoffmann , Dmitry Osipenko , Zack Rusin , Matthew Brost , Thomas Hellstrom , Oleksandr Andrushchenko , Helge Deller , Benjamin LaHaise , Alexander Viro , Christian Brauner , Muchun Song , Oscar Salvador , David Hildenbrand , Zi Yan , Baolin Wang , "Liam R . Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Hugh Dickins , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Jann Horn , Pedro Falcato , Kees Cook , Jaroslav Kysela , Takashi Iwai , linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, dri-devel@lists.freedesktop.org, etnaviv@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, intel-gfx@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-rockchip@lists.infradead.org, linux-tegra@vger.kernel.org, virtualization@lists.linux.dev, intel-xe@lists.freedesktop.org, xen-devel@lists.xenproject.org, linux-fbdev@vger.kernel.org, linux-aio@kvack.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-sound@vger.kernel.org Subject: [PATCH 08/13] mm: introduce vma_get_page_prot() and use it Date: Mon, 29 Jun 2026 20:25:31 +0100 Message-ID: <3bb8bdc4788230c33102166d56cbc5abfad9d4cb.1782760670.git.ljs@kernel.org> X-Mailer: git-send-email 2.54.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" There's a large number of vm_get_page_prot(vma->vm_flags) invocations. Make life easier by introducing vma_get_page_prot() parameterised by the VMA. This also makes converting vm_get_page_prot() to vma_flags_t easier. Also update the userland VMA tests to reflect the change. No functional change intended. Signed-off-by: Lorenzo Stoakes Acked-by: Jani Nikula Reviewed-by: Thomas Zimmermann --- drivers/gpu/drm/drm_gem.c | 2 +- drivers/gpu/drm/drm_gem_dma_helper.c | 2 +- drivers/gpu/drm/drm_gem_shmem_helper.c | 2 +- drivers/gpu/drm/etnaviv/etnaviv_gem.c | 2 +- drivers/gpu/drm/exynos/exynos_drm_gem.c | 6 +++--- drivers/gpu/drm/i915/gem/i915_gem_mman.c | 12 ++++++------ drivers/gpu/drm/msm/msm_gem.c | 2 +- drivers/gpu/drm/nouveau/nouveau_gem.c | 2 +- drivers/gpu/drm/omapdrm/omap_fbdev.c | 2 +- drivers/gpu/drm/omapdrm/omap_gem.c | 6 +++--- drivers/gpu/drm/rockchip/rockchip_drm_gem.c | 2 +- drivers/gpu/drm/tegra/gem.c | 2 +- drivers/gpu/drm/virtio/virtgpu_vram.c | 2 +- drivers/gpu/drm/vmwgfx/vmwgfx_page_dirty.c | 2 +- drivers/gpu/drm/xe/xe_device.c | 2 +- drivers/gpu/drm/xe/xe_mmio_gem.c | 2 +- drivers/gpu/drm/xen/xen_drm_front_gem.c | 2 +- drivers/video/fbdev/core/fb_io_fops.c | 2 +- include/linux/mm.h | 10 +++++++++- mm/vma.c | 2 +- mm/vma_exec.c | 2 +- sound/core/memalloc.c | 2 +- tools/testing/vma/include/dup.h | 4 ++++ 23 files changed, 43 insertions(+), 31 deletions(-) diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c index e3ed684ddcf2..32a05d889b9a 100644 --- a/drivers/gpu/drm/drm_gem.c +++ b/drivers/gpu/drm/drm_gem.c @@ -1252,7 +1252,7 @@ int drm_gem_mmap_obj(struct drm_gem_object *obj, unsi= gned long obj_size, } =20 vm_flags_set(vma, VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP); - vma->vm_page_prot =3D pgprot_writecombine(vm_get_page_prot(vma->vm_flags= )); + vma->vm_page_prot =3D pgprot_writecombine(vma_get_page_prot(vma)); vma->vm_page_prot =3D pgprot_decrypted(vma->vm_page_prot); } =20 diff --git a/drivers/gpu/drm/drm_gem_dma_helper.c b/drivers/gpu/drm/drm_gem= _dma_helper.c index 1c00a71ab3c9..7d9612075d31 100644 --- a/drivers/gpu/drm/drm_gem_dma_helper.c +++ b/drivers/gpu/drm/drm_gem_dma_helper.c @@ -540,7 +540,7 @@ int drm_gem_dma_mmap(struct drm_gem_dma_object *dma_obj= , struct vm_area_struct * vm_flags_mod(vma, VM_DONTDUMP | VM_DONTEXPAND, VM_PFNMAP); =20 if (dma_obj->map_noncoherent) { - vma->vm_page_prot =3D vm_get_page_prot(vma->vm_flags); + vma->vm_page_prot =3D vma_get_page_prot(vma); =20 ret =3D dma_mmap_pages(drm_dev_dma_dev(dma_obj->base.dev), vma, vma->vm_end - vma->vm_start, diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_g= em_shmem_helper.c index c989459eb215..06d019d51d3e 100644 --- a/drivers/gpu/drm/drm_gem_shmem_helper.c +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c @@ -764,7 +764,7 @@ int drm_gem_shmem_mmap(struct drm_gem_shmem_object *shm= em, struct vm_area_struct return ret; =20 vm_flags_set(vma, VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP); - vma->vm_page_prot =3D vm_get_page_prot(vma->vm_flags); + vma->vm_page_prot =3D vma_get_page_prot(vma); if (shmem->map_wc) vma->vm_page_prot =3D pgprot_writecombine(vma->vm_page_prot); =20 diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnavi= v/etnaviv_gem.c index 2e4d6d117ee2..f9c8b7b2bfc7 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c @@ -133,7 +133,7 @@ static int etnaviv_gem_mmap_obj(struct etnaviv_gem_obje= ct *etnaviv_obj, =20 vm_flags_set(vma, VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP); =20 - vm_page_prot =3D vm_get_page_prot(vma->vm_flags); + vm_page_prot =3D vma_get_page_prot(vma); =20 if (etnaviv_obj->flags & ETNA_BO_WC) { vma->vm_page_prot =3D pgprot_writecombine(vm_page_prot); diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.c b/drivers/gpu/drm/exyn= os/exynos_drm_gem.c index 9a6270f3dca6..0208c9259572 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_gem.c +++ b/drivers/gpu/drm/exynos/exynos_drm_gem.c @@ -377,13 +377,13 @@ static int exynos_drm_gem_mmap(struct drm_gem_object = *obj, struct vm_area_struct =20 /* non-cachable as default. */ if (exynos_gem->flags & EXYNOS_BO_CACHABLE) - vma->vm_page_prot =3D vm_get_page_prot(vma->vm_flags); + vma->vm_page_prot =3D vma_get_page_prot(vma); else if (exynos_gem->flags & EXYNOS_BO_WC) vma->vm_page_prot =3D - pgprot_writecombine(vm_get_page_prot(vma->vm_flags)); + pgprot_writecombine(vma_get_page_prot(vma)); else vma->vm_page_prot =3D - pgprot_noncached(vm_get_page_prot(vma->vm_flags)); + pgprot_noncached(vma_get_page_prot(vma)); =20 ret =3D exynos_drm_gem_mmap_buffer(exynos_gem, vma); if (ret) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c b/drivers/gpu/drm/i91= 5/gem/i915_gem_mman.c index 0644f85c6c8e..9ca90c1bb5b4 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c @@ -112,7 +112,7 @@ i915_gem_mmap_ioctl(struct drm_device *dev, void *data, vma =3D find_vma(mm, addr); if (vma && __vma_matches(vma, obj->base.filp, addr, args->size)) vma->vm_page_prot =3D - pgprot_writecombine(vm_get_page_prot(vma->vm_flags)); + pgprot_writecombine(vma_get_page_prot(vma)); else addr =3D -ENOMEM; mmap_write_unlock(mm); @@ -1024,7 +1024,7 @@ i915_gem_object_mmap(struct drm_i915_gem_object *obj, fput(anon); =20 if (obj->ops->mmap_ops) { - vma->vm_page_prot =3D pgprot_decrypted(vm_get_page_prot(vma->vm_flags)); + vma->vm_page_prot =3D pgprot_decrypted(vma_get_page_prot(vma)); vma->vm_ops =3D obj->ops->mmap_ops; vma->vm_private_data =3D obj->base.vma_node.driver_private; return 0; @@ -1035,7 +1035,7 @@ i915_gem_object_mmap(struct drm_i915_gem_object *obj, switch (mmo->mmap_type) { case I915_MMAP_TYPE_WC: vma->vm_page_prot =3D - pgprot_writecombine(vm_get_page_prot(vma->vm_flags)); + pgprot_writecombine(vma_get_page_prot(vma)); vma->vm_ops =3D &vm_ops_cpu; break; =20 @@ -1043,19 +1043,19 @@ i915_gem_object_mmap(struct drm_i915_gem_object *ob= j, GEM_WARN_ON(1); fallthrough; case I915_MMAP_TYPE_WB: - vma->vm_page_prot =3D vm_get_page_prot(vma->vm_flags); + vma->vm_page_prot =3D vma_get_page_prot(vma); vma->vm_ops =3D &vm_ops_cpu; break; =20 case I915_MMAP_TYPE_UC: vma->vm_page_prot =3D - pgprot_noncached(vm_get_page_prot(vma->vm_flags)); + pgprot_noncached(vma_get_page_prot(vma)); vma->vm_ops =3D &vm_ops_cpu; break; =20 case I915_MMAP_TYPE_GTT: vma->vm_page_prot =3D - pgprot_writecombine(vm_get_page_prot(vma->vm_flags)); + pgprot_writecombine(vma_get_page_prot(vma)); vma->vm_ops =3D &vm_ops_gtt; break; } diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index cbf723a5d86f..6a78e242de7c 100644 --- a/drivers/gpu/drm/msm/msm_gem.c +++ b/drivers/gpu/drm/msm/msm_gem.c @@ -1125,7 +1125,7 @@ static int msm_gem_object_mmap(struct drm_gem_object = *obj, struct vm_area_struct struct msm_gem_object *msm_obj =3D to_msm_bo(obj); =20 vm_flags_set(vma, VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP); - vma->vm_page_prot =3D msm_gem_pgprot(msm_obj, vm_get_page_prot(vma->vm_fl= ags)); + vma->vm_page_prot =3D msm_gem_pgprot(msm_obj, vma_get_page_prot(vma)); =20 return 0; } diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouvea= u/nouveau_gem.c index 20dba02d6175..9a6ee2e880c0 100644 --- a/drivers/gpu/drm/nouveau/nouveau_gem.c +++ b/drivers/gpu/drm/nouveau/nouveau_gem.c @@ -55,7 +55,7 @@ static vm_fault_t nouveau_ttm_fault(struct vm_fault *vmf) goto error_unlock; =20 nouveau_bo_del_io_reserve_lru(bo); - prot =3D vm_get_page_prot(vma->vm_flags); + prot =3D vma_get_page_prot(vma); ret =3D ttm_bo_vm_fault_reserved(vmf, prot, TTM_BO_VM_NUM_PREFAULT); nouveau_bo_add_io_reserve_lru(bo); if (ret =3D=3D VM_FAULT_RETRY && !(vmf->flags & FAULT_FLAG_RETRY_NOWAIT)) diff --git a/drivers/gpu/drm/omapdrm/omap_fbdev.c b/drivers/gpu/drm/omapdrm= /omap_fbdev.c index ca3fb186bf19..4881777642d2 100644 --- a/drivers/gpu/drm/omapdrm/omap_fbdev.c +++ b/drivers/gpu/drm/omapdrm/omap_fbdev.c @@ -84,7 +84,7 @@ static int omap_fbdev_pan_display(struct fb_var_screeninf= o *var, struct fb_info =20 static int omap_fbdev_fb_mmap(struct fb_info *info, struct vm_area_struct = *vma) { - vma->vm_page_prot =3D pgprot_writecombine(vm_get_page_prot(vma->vm_flags)= ); + vma->vm_page_prot =3D pgprot_writecombine(vma_get_page_prot(vma)); =20 return fb_deferred_io_mmap(info, vma); } diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c b/drivers/gpu/drm/omapdrm/o= map_gem.c index 00404fb6c29a..fb0e6f556b31 100644 --- a/drivers/gpu/drm/omapdrm/omap_gem.c +++ b/drivers/gpu/drm/omapdrm/omap_gem.c @@ -538,9 +538,9 @@ static int omap_gem_object_mmap(struct drm_gem_object *= obj, struct vm_area_struc vm_flags_set(vma, VM_DONTEXPAND | VM_DONTDUMP | VM_IO | VM_MIXEDMAP); =20 if (omap_obj->flags & OMAP_BO_WC) { - vma->vm_page_prot =3D pgprot_writecombine(vm_get_page_prot(vma->vm_flags= )); + vma->vm_page_prot =3D pgprot_writecombine(vma_get_page_prot(vma)); } else if (omap_obj->flags & OMAP_BO_UNCACHED) { - vma->vm_page_prot =3D pgprot_noncached(vm_get_page_prot(vma->vm_flags)); + vma->vm_page_prot =3D pgprot_noncached(vma_get_page_prot(vma)); } else { /* * We do have some private objects, at least for scanout buffers @@ -558,7 +558,7 @@ static int omap_gem_object_mmap(struct drm_gem_object *= obj, struct vm_area_struc vma->vm_pgoff -=3D drm_vma_node_start(&obj->vma_node); vma_set_file(vma, obj->filp); =20 - vma->vm_page_prot =3D vm_get_page_prot(vma->vm_flags); + vma->vm_page_prot =3D vma_get_page_prot(vma); } =20 vma->vm_page_prot =3D pgprot_decrypted(vma->vm_page_prot); diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/= rockchip/rockchip_drm_gem.c index b188539dca0b..9a1dc9f12072 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c @@ -255,7 +255,7 @@ static int rockchip_drm_gem_object_mmap(struct drm_gem_= object *obj, */ vm_flags_mod(vma, VM_IO | VM_DONTEXPAND | VM_DONTDUMP, VM_PFNMAP); =20 - vma->vm_page_prot =3D pgprot_writecombine(vm_get_page_prot(vma->vm_flags)= ); + vma->vm_page_prot =3D pgprot_writecombine(vma_get_page_prot(vma)); vma->vm_page_prot =3D pgprot_decrypted(vma->vm_page_prot); =20 if (rk_obj->pages) diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c index 1d8d27a5ea89..f76af733ea79 100644 --- a/drivers/gpu/drm/tegra/gem.c +++ b/drivers/gpu/drm/tegra/gem.c @@ -602,7 +602,7 @@ int __tegra_gem_mmap(struct drm_gem_object *gem, struct= vm_area_struct *vma) =20 vma->vm_pgoff =3D vm_pgoff; } else { - pgprot_t prot =3D vm_get_page_prot(vma->vm_flags); + pgprot_t prot =3D vma_get_page_prot(vma); =20 vm_flags_mod(vma, VM_MIXEDMAP, VM_PFNMAP); =20 diff --git a/drivers/gpu/drm/virtio/virtgpu_vram.c b/drivers/gpu/drm/virtio= /virtgpu_vram.c index 4ae3cbc35dd3..544a6abddbc8 100644 --- a/drivers/gpu/drm/virtio/virtgpu_vram.c +++ b/drivers/gpu/drm/virtio/virtgpu_vram.c @@ -55,7 +55,7 @@ static int virtio_gpu_vram_mmap(struct drm_gem_object *ob= j, =20 vma->vm_pgoff -=3D drm_vma_node_start(&obj->vma_node); vm_flags_set(vma, VM_MIXEDMAP | VM_DONTEXPAND); - vma->vm_page_prot =3D vm_get_page_prot(vma->vm_flags); + vma->vm_page_prot =3D vma_get_page_prot(vma); vma->vm_page_prot =3D pgprot_decrypted(vma->vm_page_prot); vma->vm_ops =3D &virtio_gpu_vram_vm_ops; =20 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_page_dirty.c b/drivers/gpu/drm/v= mwgfx/vmwgfx_page_dirty.c index 45561bc1c9ef..a9fd4015a0ca 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_page_dirty.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_page_dirty.c @@ -481,7 +481,7 @@ vm_fault_t vmw_bo_vm_fault(struct vm_fault *vmf) if (vbo->dirty && vbo->dirty->method =3D=3D VMW_BO_DIRTY_MKWRITE) prot =3D vm_get_page_prot(vma->vm_flags & ~VM_SHARED); else - prot =3D vm_get_page_prot(vma->vm_flags); + prot =3D vma_get_page_prot(vma); =20 ret =3D ttm_bo_vm_fault_reserved(vmf, prot, num_prefault); if (ret =3D=3D VM_FAULT_RETRY && !(vmf->flags & FAULT_FLAG_RETRY_NOWAIT)) diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c index d224861b6f6f..758acaae85d3 100644 --- a/drivers/gpu/drm/xe/xe_device.c +++ b/drivers/gpu/drm/xe/xe_device.c @@ -281,7 +281,7 @@ static vm_fault_t barrier_fault(struct vm_fault *vmf) pgprot_t prot; int idx; =20 - prot =3D vm_get_page_prot(vma->vm_flags); + prot =3D vma_get_page_prot(vma); =20 if (drm_dev_enter(dev, &idx)) { unsigned long pfn; diff --git a/drivers/gpu/drm/xe/xe_mmio_gem.c b/drivers/gpu/drm/xe/xe_mmio_= gem.c index 8c803ef233cc..3741ae60f532 100644 --- a/drivers/gpu/drm/xe/xe_mmio_gem.c +++ b/drivers/gpu/drm/xe/xe_mmio_gem.c @@ -149,7 +149,7 @@ static int xe_mmio_gem_mmap(struct drm_gem_object *base= , struct vm_area_struct * =20 /* Set vm_pgoff (used as a fake buffer offset by DRM) to 0 */ vma->vm_pgoff =3D 0; - vma->vm_page_prot =3D pgprot_noncached(vm_get_page_prot(vma->vm_flags)); + vma->vm_page_prot =3D pgprot_noncached(vma_get_page_prot(vma)); vm_flags_set(vma, VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP | VM_DONTCOPY | VM_NORESERVE); =20 diff --git a/drivers/gpu/drm/xen/xen_drm_front_gem.c b/drivers/gpu/drm/xen/= xen_drm_front_gem.c index eec4c1da3f9e..dd158443f55f 100644 --- a/drivers/gpu/drm/xen/xen_drm_front_gem.c +++ b/drivers/gpu/drm/xen/xen_drm_front_gem.c @@ -80,7 +80,7 @@ static int xen_drm_front_gem_object_mmap(struct drm_gem_o= bject *gem_obj, * which is mapped as Normal Inner Write-Back Outer Write-Back * Inner-Shareable. */ - vma->vm_page_prot =3D vm_get_page_prot(vma->vm_flags); + vma->vm_page_prot =3D vma_get_page_prot(vma); =20 /* * vm_operations_struct.fault handler will be called if CPU access diff --git a/drivers/video/fbdev/core/fb_io_fops.c b/drivers/video/fbdev/co= re/fb_io_fops.c index 6ab60fcd0050..6d0a8c8e141a 100644 --- a/drivers/video/fbdev/core/fb_io_fops.c +++ b/drivers/video/fbdev/core/fb_io_fops.c @@ -161,7 +161,7 @@ int fb_io_mmap(struct fb_info *info, struct vm_area_str= uct *vma) len =3D info->fix.mmio_len; } =20 - vma->vm_page_prot =3D vm_get_page_prot(vma->vm_flags); + vma->vm_page_prot =3D vma_get_page_prot(vma); vma->vm_page_prot =3D pgprot_framebuffer(vma->vm_page_prot, vma->vm_start, vma->vm_end, start); =20 diff --git a/include/linux/mm.h b/include/linux/mm.h index c8336f68d7bb..b55790c75038 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -4575,6 +4575,10 @@ static inline pgprot_t vma_flags_to_page_prot(vma_fl= ags_t vma_flags) return vm_get_page_prot(vm_flags); } =20 +static inline pgprot_t vma_get_page_prot(const struct vm_area_struct *vma) +{ + return vma_flags_to_page_prot(vma->flags); +} void vma_set_page_prot(struct vm_area_struct *vma); #else static inline pgprot_t vm_get_page_prot(vm_flags_t vm_flags) @@ -4585,9 +4589,13 @@ static inline pgprot_t vma_flags_to_page_prot(vma_fl= ags_t vma_flags) { return __pgprot(0); } +static inline pgprot_t vma_get_page_prot(const struct vm_area_struct *vma) +{ + return __pgprot(0); +} static inline void vma_set_page_prot(struct vm_area_struct *vma) { - vma->vm_page_prot =3D vm_get_page_prot(vma->vm_flags); + vma->vm_page_prot =3D vma_get_page_prot(vma); } #endif =20 diff --git a/mm/vma.c b/mm/vma.c index fcdd2ac3ac68..b81c05e67a61 100644 --- a/mm/vma.c +++ b/mm/vma.c @@ -3429,7 +3429,7 @@ struct vm_area_struct *__install_special_mapping( if (pgtable_supports_soft_dirty()) vm_flags |=3D VM_SOFTDIRTY; vm_flags_init(vma, vm_flags & ~VM_LOCKED_MASK); - vma->vm_page_prot =3D vm_get_page_prot(vma->vm_flags); + vma->vm_page_prot =3D vma_get_page_prot(vma); =20 vma->vm_ops =3D ops; vma->vm_private_data =3D priv; diff --git a/mm/vma_exec.c b/mm/vma_exec.c index c0f7ba2cfb27..b01c4964f2c9 100644 --- a/mm/vma_exec.c +++ b/mm/vma_exec.c @@ -146,7 +146,7 @@ int create_init_stack_vma(struct mm_struct *mm, struct = vm_area_struct **vmap, if (pgtable_supports_soft_dirty()) flags |=3D VM_SOFTDIRTY; vm_flags_init(vma, flags); - vma->vm_page_prot =3D vm_get_page_prot(vma->vm_flags); + vma->vm_page_prot =3D vma_get_page_prot(vma); =20 err =3D insert_vm_struct(mm, vma); if (err) diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c index 9320671dfcc8..5bc7e586b430 100644 --- a/sound/core/memalloc.c +++ b/sound/core/memalloc.c @@ -851,7 +851,7 @@ static void snd_dma_noncoherent_free(struct snd_dma_buf= fer *dmab) static int snd_dma_noncoherent_mmap(struct snd_dma_buffer *dmab, struct vm_area_struct *area) { - area->vm_page_prot =3D vm_get_page_prot(area->vm_flags); + area->vm_page_prot =3D vma_get_page_prot(area); return dma_mmap_pages(dmab->dev.dev, area, area->vm_end - area->vm_start, virt_to_page(dmab->area)); diff --git a/tools/testing/vma/include/dup.h b/tools/testing/vma/include/du= p.h index 1ffac38a5377..d86bef8cb37f 100644 --- a/tools/testing/vma/include/dup.h +++ b/tools/testing/vma/include/dup.h @@ -1577,3 +1577,7 @@ static inline pgoff_t linear_page_index(const struct = vm_area_struct *vma, pgoff +=3D vma_start_pgoff(vma); return pgoff; } +static inline pgprot_t vma_get_page_prot(const struct vm_area_struct *vma) +{ + return vma_flags_to_page_prot(vma->flags); +} --=20 2.54.0 From nobody Sat Jul 4 20:54:49 2026 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 57E21429824; Mon, 29 Jun 2026 19:26:22 +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=1782761183; cv=none; b=IjcZHIUSnGcLI2fEUSp36fRy5FgmPd71nJ2z9yPnnm0GpppJSlBghegZH8Rhon2JoGXYOs9UKJCQoh/v06WPpOQagTWnWNBkAfg0ORMnAFR9o+e9kIoOJVdtrW4ydRZcGIKXJjVQDuMJi6/pCN0RpQCxDRAOrgGeC8lrHraNcyM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782761183; c=relaxed/simple; bh=ouTtDTyy+QUiqoVy7zjfYMJfJ+ReSM8Rg/RPim0l05Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MZAihUypElBgne6m5WsuAXTH0woFxc+d6yT1of94dw4ZWeKx07rIVKpwZ0jm0oI+LTyw4BEKMVXKFOUnjJLU7HzCISYq9nUSRt6w+0Kf1eGkQNB7mJrD0hRTukOmNhFpbhcd0YtBgH5lCvB4iUhNlSPLmMVfcshywl3WIj/iVBw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nOPttWfe; 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="nOPttWfe" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6E1DD1F00A3A; Mon, 29 Jun 2026 19:26:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782761182; bh=Wnm2Xg8fzgzgq2t9tP+R94oZiE2QRSqcJqSUSdbb+xI=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=nOPttWfeqx2WAAk+O86bRHV1xe9XjSiO7vWMcbguW/QG8cwhr9Ho+WujRZfoXIkNB GAafXcLTt0A7107oO1/wfsRqbvh2NXnLmJEY5U2oNVlhqSlYA3t7vnfmg9ypcMiIQu 8h9CwqzwF/QmgcsSy6FddnicElSxEL4LUhf+meGHiuuHtZIY/zI5z4sASrd3sx6zbv h+vKpCS3OgfNT1Vzh95SLJ33rPs0Xs2s5lFkRLuYrK0Dv+UhZIFDZTErNLJ48+783p GrekfoEk+r6DJVzhZY0W/8o+WObqmyaivps6ZsvmcWguDnXNLCk/ULQ2n7338Yb/Eb NW0mBvRR/aD3g== From: Lorenzo Stoakes To: Andrew Morton Cc: Thomas Bogendoerfer , Madhavan Srinivasan , Michael Ellerman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Lucas Stach , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Rob Clark , Dmitry Baryshkov , Lyude Paul , Danilo Krummrich , Tomi Valkeinen , Sandy Huang , =?UTF-8?q?Heiko=20St=C3=BCbner?= , Andy Yan , Thierry Reding , Mikko Perttunen , Jonathan Hunter , Gerd Hoffmann , Dmitry Osipenko , Zack Rusin , Matthew Brost , Thomas Hellstrom , Oleksandr Andrushchenko , Helge Deller , Benjamin LaHaise , Alexander Viro , Christian Brauner , Muchun Song , Oscar Salvador , David Hildenbrand , Zi Yan , Baolin Wang , "Liam R . Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Hugh Dickins , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Jann Horn , Pedro Falcato , Kees Cook , Jaroslav Kysela , Takashi Iwai , linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, dri-devel@lists.freedesktop.org, etnaviv@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, intel-gfx@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-rockchip@lists.infradead.org, linux-tegra@vger.kernel.org, virtualization@lists.linux.dev, intel-xe@lists.freedesktop.org, xen-devel@lists.xenproject.org, linux-fbdev@vger.kernel.org, linux-aio@kvack.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-sound@vger.kernel.org Subject: [PATCH 09/13] mm/vma: update create_init_stack_vma() to use vma_flags_t Date: Mon, 29 Jun 2026 20:25:32 +0100 Message-ID: <34689784ee6856f100c02ad4eabeaa4db643713a.1782760670.git.ljs@kernel.org> X-Mailer: git-send-email 2.54.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Replace use of the legacy vm_flags_t flags with vma_flags_t values in create_init_stack_vma(). As part of this change we add VMA_STACK_EARLY and VMA_STACK_INCOMPLETE vma_flags_t defines, and slightly rework create_init_stack_vma() for clarity. No functional change intended. Signed-off-by: Lorenzo Stoakes Reviewed-by: Lance Yang --- include/linux/mm.h | 4 ++++ mm/vma_exec.c | 18 +++++++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index b55790c75038..6e57d41677de 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -440,8 +440,10 @@ enum { #define VM_STACK INIT_VM_FLAG(STACK) #ifdef CONFIG_STACK_GROWSUP #define VM_STACK_EARLY INIT_VM_FLAG(STACK_EARLY) +#define VMA_STACK_EARLY mk_vma_flags(VMA_STACK_EARLY_BIT) #else #define VM_STACK_EARLY VM_NONE +#define VMA_STACK_EARLY EMPTY_VMA_FLAGS #endif #ifdef CONFIG_ARCH_HAS_PKEYS #define VM_PKEY_SHIFT ((__force int)VMA_HIGH_ARCH_0_BIT) @@ -532,6 +534,8 @@ enum { =20 /* Bits set in the VMA until the stack is in its final location */ #define VM_STACK_INCOMPLETE_SETUP (VM_RAND_READ | VM_SEQ_READ | VM_STACK_E= ARLY) +#define VMA_STACK_INCOMPLETE_SETUP append_vma_flags( \ + VMA_STACK_EARLY, VMA_RAND_READ_BIT, VMA_SEQ_READ_BIT) =20 #define TASK_EXEC_BIT ((current->personality & READ_IMPLIES_EXEC) ? \ VMA_EXEC_BIT : VMA_READ_BIT) diff --git a/mm/vma_exec.c b/mm/vma_exec.c index b01c4964f2c9..48c783e73cf3 100644 --- a/mm/vma_exec.c +++ b/mm/vma_exec.c @@ -112,15 +112,17 @@ int relocate_vma_down(struct vm_area_struct *vma, uns= igned long shift) int create_init_stack_vma(struct mm_struct *mm, struct vm_area_struct **vm= ap, unsigned long *top_mem_p) { - unsigned long flags =3D VM_STACK_FLAGS | VM_STACK_INCOMPLETE_SETUP; + vma_flags_t flags =3D VMA_STACK_INCOMPLETE_SETUP; + struct vm_area_struct *vma; int err; - struct vm_area_struct *vma =3D vm_area_alloc(mm); =20 + /* VMA_STACK_FLAGS and VMA_STACK_INCOMPLETE_SETUP must not overlap. */ + VM_WARN_ON_ONCE(vma_flags_test_any_mask(&flags, VMA_STACK_FLAGS)); + + vma =3D vm_area_alloc(mm); if (!vma) return -ENOMEM; =20 - vma_set_anonymous(vma); - if (mmap_write_lock_killable(mm)) { err =3D -EINTR; goto err_free; @@ -134,18 +136,20 @@ int create_init_stack_vma(struct mm_struct *mm, struc= t vm_area_struct **vmap, if (err) goto err_ksm; =20 + vma_flags_set_mask(&flags, VMA_STACK_FLAGS); + vma_set_anonymous(vma); + /* * Place the stack at the largest stack address the architecture * supports. Later, we'll move this to an appropriate place. We don't * use STACK_TOP because that can depend on attributes which aren't * configured yet. */ - VM_WARN_ON_ONCE(VM_STACK_FLAGS & VM_STACK_INCOMPLETE_SETUP); vma->vm_end =3D STACK_TOP_MAX; vma->vm_start =3D vma->vm_end - PAGE_SIZE; if (pgtable_supports_soft_dirty()) - flags |=3D VM_SOFTDIRTY; - vm_flags_init(vma, flags); + vma_flags_set(&flags, VMA_SOFTDIRTY_BIT); + vma->flags =3D flags; vma->vm_page_prot =3D vma_get_page_prot(vma); =20 err =3D insert_vm_struct(mm, vma); --=20 2.54.0 From nobody Sat Jul 4 20:54:49 2026 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 34CB342EEBC; Mon, 29 Jun 2026 19:26: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=1782761186; cv=none; b=UWOGfPW/KFSAnhAxiqAe3E3v8D75GJFjJ7WTMuOVYVhdJRBkkN+GjsxuO2rvlBlLIfMa6xl8s/LRNYhtumDVggQeDS4Q7wRm3ZClZJk2/woEZxeDw0cAloleSfEhsNgE82V1giYuyFS8vKbZD09UwsmRLEJnycUK+szM8A89Mg0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782761186; c=relaxed/simple; bh=va/1CKMsJuLSaC3SoSLCK402bCE9jdVWIyhJjQZoKWM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OuMKuFT8gT0DgZnn1/jwgOY3aYdlzBN2S6vwpd5dGN6CKfmcR92wmB/SmtYDfpxbGbG24k8DB+Wz65+cBZpmrWAZof7cVAFOyYY5cacC25m5yil5CvB28d/PRM6lRwJzEOD/BRqFDXCmQcztYdFDF1tGxZxX7nTOoa4vIh1ZX7w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=VVxN7eTc; 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="VVxN7eTc" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 481981F00A3D; Mon, 29 Jun 2026 19:26:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782761185; bh=+hx6YQln3kmnIYttbugYmffLNSWoV++2751PXUv+A2M=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=VVxN7eTcPtYg/oOvvhetcNu5z5GDnbGBvlUDJjnkVPWbhn4Y+GS1HukaVG0587SeF W2qCaAjwvGomyD6AiM8c4q0Fd+EhRCjnMSIyaEAf+cCF6xsiJ7Xp3RCIKqvSAj1sE4 XhY4s2csFyWBBqxTBqAcY2cpJi2KjGLb6KUOQQ4R/UUE1l20BXEHJm3T4FJCanAHVN HfQTrKDFcjlb8QS3+ToQPXfDmtOH0k4zshLqyu5BZu3VWeh11M/0QfE0pgU6uSdTor JbSQjrdBVjOhQbdZYDNvwLhifN7Dn/ym5jAGy5VZka+d7RhxYT5aDQ4KmOqXtdqtHl oq/VyUIl/b1VQ== From: Lorenzo Stoakes To: Andrew Morton Cc: Thomas Bogendoerfer , Madhavan Srinivasan , Michael Ellerman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Lucas Stach , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Rob Clark , Dmitry Baryshkov , Lyude Paul , Danilo Krummrich , Tomi Valkeinen , Sandy Huang , =?UTF-8?q?Heiko=20St=C3=BCbner?= , Andy Yan , Thierry Reding , Mikko Perttunen , Jonathan Hunter , Gerd Hoffmann , Dmitry Osipenko , Zack Rusin , Matthew Brost , Thomas Hellstrom , Oleksandr Andrushchenko , Helge Deller , Benjamin LaHaise , Alexander Viro , Christian Brauner , Muchun Song , Oscar Salvador , David Hildenbrand , Zi Yan , Baolin Wang , "Liam R . Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Hugh Dickins , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Jann Horn , Pedro Falcato , Kees Cook , Jaroslav Kysela , Takashi Iwai , linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, dri-devel@lists.freedesktop.org, etnaviv@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, intel-gfx@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-rockchip@lists.infradead.org, linux-tegra@vger.kernel.org, virtualization@lists.linux.dev, intel-xe@lists.freedesktop.org, xen-devel@lists.xenproject.org, linux-fbdev@vger.kernel.org, linux-aio@kvack.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-sound@vger.kernel.org Subject: [PATCH 10/13] mm/vma: convert miscellaneous uses of VMA flags in core mm Date: Mon, 29 Jun 2026 20:25:33 +0100 Message-ID: <1e7d834c887b6a65627d730addcff13d458c6268.1782760670.git.ljs@kernel.org> X-Mailer: git-send-email 2.54.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Update various uses of legacy flags in vma.c and mmap.c to the new vma_flags_t type, updating comments alongside them to be consistent. Also update __install_special_mapping() to rearrange things slightly to accommodate the changes. Signed-off-by: Lorenzo Stoakes --- mm/mmap.c | 39 +++++++++++++++++++++------------------ mm/vma.c | 16 ++++++++++------ 2 files changed, 31 insertions(+), 24 deletions(-) diff --git a/mm/mmap.c b/mm/mmap.c index e834ec9273e3..a8546c9250a0 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -557,8 +557,8 @@ unsigned long do_mmap(struct file *file, unsigned long = addr, } =20 /* - * Set 'VM_NORESERVE' if we should not account for the - * memory use of this mapping. + * Set VMA_NORESERVE_BIT if we should not account for the memory use + * of this mapping. */ if (flags & MAP_NORESERVE) { /* We honor MAP_NORESERVE if allowed to overcommit */ @@ -985,7 +985,7 @@ struct vm_area_struct *find_extend_vma_locked(struct mm= _struct *mm, unsigned lon return NULL; if (expand_stack_locked(prev, addr)) return NULL; - if (prev->vm_flags & VM_LOCKED) + if (vma_test(prev, VMA_LOCKED_BIT)) populate_vma_page_range(prev, addr, prev->vm_end, NULL); return prev; } @@ -1009,7 +1009,7 @@ struct vm_area_struct *find_extend_vma_locked(struct = mm_struct *mm, unsigned lon start =3D vma->vm_start; if (expand_stack_locked(vma, addr)) return NULL; - if (vma->vm_flags & VM_LOCKED) + if (vma_test(vma, VMA_LOCKED_BIT)) populate_vma_page_range(vma, addr, start, NULL); return vma; } @@ -1134,18 +1134,18 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, st= art, unsigned long, size, */ vma =3D vma_lookup(mm, start); =20 - if (!vma || !(vma->vm_flags & VM_SHARED)) { + if (!vma || !vma_test(vma, VMA_SHARED_BIT)) { mmap_read_unlock(mm); return -EINVAL; } =20 - prot |=3D vma->vm_flags & VM_READ ? PROT_READ : 0; - prot |=3D vma->vm_flags & VM_WRITE ? PROT_WRITE : 0; - prot |=3D vma->vm_flags & VM_EXEC ? PROT_EXEC : 0; + prot |=3D vma_test(vma, VMA_READ_BIT) ? PROT_READ : 0; + prot |=3D vma_test(vma, VMA_WRITE_BIT) ? PROT_WRITE : 0; + prot |=3D vma_test(vma, VMA_EXEC_BIT) ? PROT_EXEC : 0; =20 flags &=3D MAP_NONBLOCK; flags |=3D MAP_SHARED | MAP_FIXED | MAP_POPULATE; - if (vma->vm_flags & VM_LOCKED) + if (vma_test(vma, VMA_LOCKED_BIT)) flags |=3D MAP_LOCKED; =20 /* Save vm_flags used to calculate prot and flags, and recheck later. */ @@ -1271,7 +1271,7 @@ unsigned long tear_down_vmas(struct mm_struct *mm, st= ruct vma_iterator *vmi, mmap_assert_write_locked(mm); vma_iter_set(vmi, vma->vm_end); do { - if (vma->vm_flags & VM_ACCOUNT) + if (vma_test(vma, VMA_ACCOUNT_BIT)) nr_accounted +=3D vma_pages(vma); vma_mark_detached(vma); remove_vma(vma); @@ -1420,7 +1420,7 @@ static int special_mapping_split(struct vm_area_struc= t *vma, unsigned long addr) { /* * Forbid splitting special mappings - kernel has expectations over - * the number of pages in mapping. Together with VM_DONTEXPAND + * the number of pages in mapping. Together with VMA_DONTEXPAND_BIT * the size of vma should stay the same over the special mapping's * lifetime. */ @@ -1692,7 +1692,7 @@ bool mmap_read_lock_maybe_expand(struct mm_struct *mm, return true; } =20 - if (!(new_vma->vm_flags & VM_GROWSDOWN)) + if (!vma_test(new_vma, VMA_GROWSDOWN_BIT)) return false; =20 mmap_write_lock(mm); @@ -1742,7 +1742,7 @@ __latent_entropy int dup_mmap(struct mm_struct *mm, s= truct mm_struct *oldmm) retval =3D vma_start_write_killable(mpnt); if (retval < 0) goto loop_out; - if (mpnt->vm_flags & VM_DONTCOPY) { + if (vma_test(mpnt, VMA_DONTCOPY_BIT)) { retval =3D vma_iter_clear_gfp(&vmi, mpnt->vm_start, mpnt->vm_end, GFP_KERNEL); if (retval) @@ -1752,7 +1752,7 @@ __latent_entropy int dup_mmap(struct mm_struct *mm, s= truct mm_struct *oldmm) continue; } charge =3D 0; - if (mpnt->vm_flags & VM_ACCOUNT) { + if (vma_test(mpnt, VMA_ACCOUNT_BIT)) { unsigned long len =3D vma_pages(mpnt); =20 if (security_vm_enough_memory_mm(oldmm, len)) /* sic */ @@ -1770,16 +1770,19 @@ __latent_entropy int dup_mmap(struct mm_struct *mm,= struct mm_struct *oldmm) retval =3D dup_userfaultfd(tmp, &uf); if (retval) goto fail_nomem_anon_vma_fork; - if (tmp->vm_flags & VM_WIPEONFORK) { + + if (vma_test(tmp, VMA_WIPEONFORK_BIT)) { /* - * VM_WIPEONFORK gets a clean slate in the child. + * VMA_WIPEONFORK_BIT gets a clean slate in the child. * Don't prepare anon_vma until fault since we don't * copy page for current vma. */ tmp->anon_vma =3D NULL; } else if (anon_vma_fork(tmp, mpnt)) goto fail_nomem_anon_vma_fork; - vm_flags_clear(tmp, VM_LOCKED_MASK); + + vma_start_write(tmp); + vma_clear_flags_mask(tmp, VMA_LOCKED_MASK); /* * Copy/update hugetlb private vma information. */ @@ -1812,7 +1815,7 @@ __latent_entropy int dup_mmap(struct mm_struct *mm, s= truct mm_struct *oldmm) i_mmap_unlock_write(mapping); } =20 - if (!(tmp->vm_flags & VM_WIPEONFORK)) + if (!vma_test(tmp, VMA_WIPEONFORK_BIT)) retval =3D copy_page_range(tmp, mpnt); =20 if (retval) { diff --git a/mm/vma.c b/mm/vma.c index b81c05e67a61..ab2ef0f04420 100644 --- a/mm/vma.c +++ b/mm/vma.c @@ -3417,23 +3417,27 @@ struct vm_area_struct *__install_special_mapping( vm_flags_t vm_flags, void *priv, const struct vm_operations_struct *ops) { - int ret; + vma_flags_t vma_flags =3D legacy_to_vma_flags(vm_flags); struct vm_area_struct *vma; + int ret; =20 vma =3D vm_area_alloc(mm); - if (unlikely(vma =3D=3D NULL)) + if (unlikely(!vma)) return ERR_PTR(-ENOMEM); =20 - vma_set_range(vma, addr, addr + len, 0); - vm_flags |=3D vma_flags_to_legacy(mm->def_vma_flags) | VM_DONTEXPAND; + vma_flags_set_mask(&vma_flags, mm->def_vma_flags); + vma_flags_set(&vma_flags, VMA_DONTEXPAND_BIT); if (pgtable_supports_soft_dirty()) - vm_flags |=3D VM_SOFTDIRTY; - vm_flags_init(vma, vm_flags & ~VM_LOCKED_MASK); + vma_flags_set(&vma_flags, VMA_SOFTDIRTY_BIT); + vma_flags_clear_mask(&vma_flags, VMA_LOCKED_MASK); + vma->flags =3D vma_flags; vma->vm_page_prot =3D vma_get_page_prot(vma); =20 vma->vm_ops =3D ops; vma->vm_private_data =3D priv; =20 + vma_set_range(vma, addr, addr + len, 0); + ret =3D insert_vm_struct(mm, vma); if (ret) goto out; --=20 2.54.0 From nobody Sat Jul 4 20:54:49 2026 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 5DC27441029; Mon, 29 Jun 2026 19:26:28 +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=1782761189; cv=none; b=Wr+/v4cVfKbginodyuevvJjbuD/aC0RksdT9uu08f9OsypkSnPathhc8sw5028DqE6jVLVrfCSA/JveGQXEkb8cw12qimpdlc1BHeffOUgEFYhG96OSHwIF3MWaJAt6Vn8TCHU6fOjh/apGNnyG17tB8Hd2YZJ5Oso61yMryaGw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782761189; c=relaxed/simple; bh=sCK+RL3KMzHUoyNouocroZ7dxIOlqQyvcB+Lgn1Ph2A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=M8F+178NZfyF6dbEV4WhBbB+k4QrT0EBb1DJzQIWIpHyYPO3yTXfUZp9MJ+AG+qdY99VYdii12TxqFvBK6HTX8rDTkwaDSicbK+bAniZX9kwfn49G+oOHetuaw+oBfFEtn+7gN8Rlg2gvcFM0dy/LMujVjGJPStLzTzQp8Ph5ks= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=IIJQxKhw; 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="IIJQxKhw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2F7DF1F000E9; Mon, 29 Jun 2026 19:26:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782761188; bh=rJBKJgm9VGYkLKxlBKZ5aOjhCtASp65CFyjLBQGRzvQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=IIJQxKhweg39/BMqoHOH7kb0/Al+cJWTEI1hioVBPZaDB4qhB2Vb6gTAE5EgKd8i+ vKfSoPurTO8PIuLjyUs5WNhfD4gqH5sManMjAeS2pFtPAomy2K2tA9iwWFCCLRozBe 80WBl+G+ksIR6HWSGPbvhb/38MdZ9vYyRBKIyMWVOS+AOWbhSlmW8yn0VL2dXg9Cqy yP/BQIl71tGgb5bQL/hpBuwobEq79GN6SA2SmGSur13Y5GsCCLpCQRvCYn4h2DY6RM 2uQTclqrErpsIcrjBfB0b+ymG/UVaPwZEumIFLlrW7N/vGNJmRnvO33VIBdwlXHg/1 9OKljIZr4sLrA== From: Lorenzo Stoakes To: Andrew Morton Cc: Thomas Bogendoerfer , Madhavan Srinivasan , Michael Ellerman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Lucas Stach , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Rob Clark , Dmitry Baryshkov , Lyude Paul , Danilo Krummrich , Tomi Valkeinen , Sandy Huang , =?UTF-8?q?Heiko=20St=C3=BCbner?= , Andy Yan , Thierry Reding , Mikko Perttunen , Jonathan Hunter , Gerd Hoffmann , Dmitry Osipenko , Zack Rusin , Matthew Brost , Thomas Hellstrom , Oleksandr Andrushchenko , Helge Deller , Benjamin LaHaise , Alexander Viro , Christian Brauner , Muchun Song , Oscar Salvador , David Hildenbrand , Zi Yan , Baolin Wang , "Liam R . Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Hugh Dickins , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Jann Horn , Pedro Falcato , Kees Cook , Jaroslav Kysela , Takashi Iwai , linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, dri-devel@lists.freedesktop.org, etnaviv@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, intel-gfx@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-rockchip@lists.infradead.org, linux-tegra@vger.kernel.org, virtualization@lists.linux.dev, intel-xe@lists.freedesktop.org, xen-devel@lists.xenproject.org, linux-fbdev@vger.kernel.org, linux-aio@kvack.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-sound@vger.kernel.org Subject: [PATCH 11/13] mm/mlock: convert mlock code to use vma_flags_t Date: Mon, 29 Jun 2026 20:25:34 +0100 Message-ID: <2db16db81538355ca65f778c246d2381c673cad4.1782760670.git.ljs@kernel.org> X-Mailer: git-send-email 2.54.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Replace use of the legacy vm_flags_t flags with vma_flags_t values throughout the mlock logic. Additionally update comments to reflect the changes to be consistent. No functional change intended. Signed-off-by: Lorenzo Stoakes Reviewed-by: Lance Yang --- mm/mlock.c | 86 +++++++++++++++++++++++++++++------------------------- 1 file changed, 46 insertions(+), 40 deletions(-) diff --git a/mm/mlock.c b/mm/mlock.c index 9c87b3ced65f..1634b125a519 100644 --- a/mm/mlock.c +++ b/mm/mlock.c @@ -329,7 +329,7 @@ static inline bool allow_mlock_munlock(struct folio *fo= lio, * be split. And the pages are not in VM_LOCKed VMA * can be reclaimed. */ - if (!(vma->vm_flags & VM_LOCKED)) + if (!vma_test(vma, VMA_LOCKED_BIT)) return true; =20 /* folio_within_range() cannot take KSM, but any small folio is OK */ @@ -368,7 +368,7 @@ static int mlock_pte_range(pmd_t *pmd, unsigned long ad= dr, folio =3D pmd_folio(*pmd); if (folio_is_zone_device(folio)) goto out; - if (vma->vm_flags & VM_LOCKED) + if (vma_test(vma, VMA_LOCKED_BIT)) mlock_folio(folio); else munlock_folio(folio); @@ -393,7 +393,7 @@ static int mlock_pte_range(pmd_t *pmd, unsigned long ad= dr, if (!allow_mlock_munlock(folio, vma, start, end, step)) goto next_entry; =20 - if (vma->vm_flags & VM_LOCKED) + if (vma_test(vma, VMA_LOCKED_BIT)) mlock_folio(folio); else munlock_folio(folio); @@ -417,8 +417,8 @@ static int mlock_pte_range(pmd_t *pmd, unsigned long ad= dr, * @end - end of range in @vma * @new_vma_flags - the new set of flags for @vma. * - * Called for mlock(), mlock2() and mlockall(), to set @vma VM_LOCKED; - * called for munlock() and munlockall(), to clear VM_LOCKED from @vma. + * Called for mlock(), mlock2() and mlockall(), to set @vma VMA_LOCKED_BIT; + * called for munlock() and munlockall(), to clear VMA_LOCKED_BIT from @vm= a. */ static void mlock_vma_pages_range(struct vm_area_struct *vma, unsigned long start, unsigned long end, @@ -431,14 +431,14 @@ static void mlock_vma_pages_range(struct vm_area_stru= ct *vma, =20 /* * There is a slight chance that concurrent page migration, - * or page reclaim finding a page of this now-VM_LOCKED vma, + * or page reclaim finding a page of this now-VMA_LOCKED_BIT vma, * will call mlock_vma_folio() and raise page's mlock_count: * double counting, leaving the page unevictable indefinitely. - * Communicate this danger to mlock_vma_folio() with VM_IO, - * which is a VM_SPECIAL flag not allowed on VM_LOCKED vmas. + * Communicate this danger to mlock_vma_folio() with VMA_IO_BIT, + * which is a VMA_SPECIAL_FLAGS flag not allowed on VMA_LOCKED_BIT vmas. * mmap_lock is held in write mode here, so this weird * combination should not be visible to other mmap_lock users; - * but WRITE_ONCE so rmap walkers must see VM_IO if VM_LOCKED. + * but WRITE_ONCE so rmap walkers must see VMA_IO_BIT if VMA_LOCKED_BIT. */ if (vma_flags_test(new_vma_flags, VMA_LOCKED_BIT)) vma_flags_set(new_vma_flags, VMA_IO_BIT); @@ -458,7 +458,7 @@ static void mlock_vma_pages_range(struct vm_area_struct= *vma, /* * mlock_fixup - handle mlock[all]/munlock[all] requests. * - * Filters out "special" vmas -- VM_LOCKED never gets set for these, and + * Filters out "special" vmas -- VMA_LOCKED_BIT never gets set for these, = and * munlock is a no-op. However, for some special vmas, we go ahead and * populate the ptes. * @@ -466,24 +466,23 @@ static void mlock_vma_pages_range(struct vm_area_stru= ct *vma, */ static int mlock_fixup(struct vma_iterator *vmi, struct vm_area_struct *vm= a, struct vm_area_struct **prev, unsigned long start, - unsigned long end, vm_flags_t newflags) + unsigned long end, vma_flags_t *new_vma_flags) { - vma_flags_t new_vma_flags =3D legacy_to_vma_flags(newflags); const vma_flags_t old_vma_flags =3D vma->flags; struct mm_struct *mm =3D vma->vm_mm; int nr_pages; int ret =3D 0; =20 - if (vma_flags_same_pair(&old_vma_flags, &new_vma_flags) || + if (vma_flags_same_pair(&old_vma_flags, new_vma_flags) || vma_is_secretmem(vma) || !vma_supports_mlock(vma)) { /* - * Don't set VM_LOCKED or VM_LOCKONFAULT and don't count. + * Don't set VMA_LOCKED_BIT or VM_LOCKONFAULT and don't count. * For secretmem, don't allow the memory to be unlocked. */ goto out; } =20 - vma =3D vma_modify_flags(vmi, *prev, vma, start, end, &new_vma_flags); + vma =3D vma_modify_flags(vmi, *prev, vma, start, end, new_vma_flags); if (IS_ERR(vma)) { ret =3D PTR_ERR(vma); goto out; @@ -493,7 +492,7 @@ static int mlock_fixup(struct vma_iterator *vmi, struct= vm_area_struct *vma, * Keep track of amount of locked VM. */ nr_pages =3D (end - start) >> PAGE_SHIFT; - if (!vma_flags_test(&new_vma_flags, VMA_LOCKED_BIT)) + if (!vma_flags_test(new_vma_flags, VMA_LOCKED_BIT)) nr_pages =3D -nr_pages; else if (vma_flags_test(&old_vma_flags, VMA_LOCKED_BIT)) nr_pages =3D 0; @@ -502,15 +501,15 @@ static int mlock_fixup(struct vma_iterator *vmi, stru= ct vm_area_struct *vma, /* * vm_flags is protected by the mmap_lock held in write mode. * It's okay if try_to_unmap_one unmaps a page just after we - * set VM_LOCKED, populate_vma_page_range will bring it back. + * set VMA_LOCKED_BIT, populate_vma_page_range will bring it back. */ - if (vma_flags_test(&new_vma_flags, VMA_LOCKED_BIT) && + if (vma_flags_test(new_vma_flags, VMA_LOCKED_BIT) && vma_flags_test(&old_vma_flags, VMA_LOCKED_BIT)) { /* No work to do, and mlocking twice would be wrong */ vma_start_write(vma); - vma->flags =3D new_vma_flags; + vma->flags =3D *new_vma_flags; } else { - mlock_vma_pages_range(vma, start, end, &new_vma_flags); + mlock_vma_pages_range(vma, start, end, new_vma_flags); } out: *prev =3D vma; @@ -518,7 +517,7 @@ static int mlock_fixup(struct vma_iterator *vmi, struct= vm_area_struct *vma, } =20 static int apply_vma_lock_flags(unsigned long start, size_t len, - vm_flags_t flags) + const vma_flags_t *flags) { unsigned long nstart, end, tmp; struct vm_area_struct *vma, *prev; @@ -543,18 +542,20 @@ static int apply_vma_lock_flags(unsigned long start, = size_t len, tmp =3D vma->vm_start; for_each_vma_range(vmi, vma, end) { int error; - vm_flags_t newflags; + vma_flags_t newflags; =20 if (vma->vm_start !=3D tmp) return -ENOMEM; =20 - newflags =3D vma->vm_flags & ~VM_LOCKED_MASK; - newflags |=3D flags; + newflags =3D vma->flags; + vma_flags_clear_mask(&newflags, VMA_LOCKED_MASK); + vma_flags_set_mask(&newflags, *flags); + /* Here we know that vma->vm_start <=3D nstart < vma->vm_end. */ tmp =3D vma->vm_end; if (tmp > end) tmp =3D end; - error =3D mlock_fixup(&vmi, vma, &prev, nstart, tmp, newflags); + error =3D mlock_fixup(&vmi, vma, &prev, nstart, tmp, &newflags); if (error) return error; tmp =3D vma_iter_end(&vmi); @@ -589,7 +590,7 @@ static unsigned long count_mm_mlocked_page_nr(struct mm= _struct *mm, end =3D start + len; =20 for_each_vma_range(vmi, vma, end) { - if (vma->vm_flags & VM_LOCKED) { + if (vma_test(vma, VMA_LOCKED_BIT)) { if (start > vma->vm_start) count -=3D (start - vma->vm_start); if (end < vma->vm_end) { @@ -615,7 +616,8 @@ static int __mlock_posix_error_return(long retval) return retval; } =20 -static __must_check int do_mlock(unsigned long start, size_t len, vm_flags= _t flags) +static __must_check int do_mlock(unsigned long start, size_t len, + vma_flags_t *flags) { unsigned long locked; unsigned long lock_limit; @@ -664,24 +666,27 @@ static __must_check int do_mlock(unsigned long start,= size_t len, vm_flags_t fla =20 SYSCALL_DEFINE2(mlock, unsigned long, start, size_t, len) { - return do_mlock(start, len, VM_LOCKED); + vma_flags_t flags =3D mk_vma_flags(VMA_LOCKED_BIT); + + return do_mlock(start, len, &flags); } =20 SYSCALL_DEFINE3(mlock2, unsigned long, start, size_t, len, int, flags) { - vm_flags_t vm_flags =3D VM_LOCKED; + vma_flags_t vma_flags =3D mk_vma_flags(VMA_LOCKED_BIT); =20 if (flags & ~MLOCK_ONFAULT) return -EINVAL; =20 if (flags & MLOCK_ONFAULT) - vm_flags |=3D VM_LOCKONFAULT; + vma_flags_set(&vma_flags, VMA_LOCKONFAULT_BIT); =20 - return do_mlock(start, len, vm_flags); + return do_mlock(start, len, &vma_flags); } =20 SYSCALL_DEFINE2(munlock, unsigned long, start, size_t, len) { + vma_flags_t flags =3D EMPTY_VMA_FLAGS; int ret; =20 start =3D untagged_addr(start); @@ -691,7 +696,7 @@ SYSCALL_DEFINE2(munlock, unsigned long, start, size_t, = len) =20 if (mmap_write_lock_killable(current->mm)) return -EINTR; - ret =3D apply_vma_lock_flags(start, len, 0); + ret =3D apply_vma_lock_flags(start, len, &flags); mmap_write_unlock(current->mm); =20 return ret; @@ -705,14 +710,15 @@ SYSCALL_DEFINE2(munlock, unsigned long, start, size_t= , len) * There are a couple of subtleties with this. If mlockall() is called mu= ltiple * times with different flags, the values do not necessarily stack. If ml= ockall * is called once including the MCL_FUTURE flag and then a second time wit= hout - * it, VM_LOCKED and VM_LOCKONFAULT will be cleared from mm->def_vma_flags. + * it, VMA_LOCKED_BIT and VMA_LOCKONFAULT_BIT will be cleared from + * mm->def_vma_flags. */ static int apply_mlockall_flags(int flags) { VMA_ITERATOR(vmi, current->mm, 0); struct mm_struct *mm =3D current->mm; struct vm_area_struct *vma, *prev =3D NULL; - vm_flags_t to_add =3D 0; + vma_flags_t to_add =3D EMPTY_VMA_FLAGS; =20 vma_flags_clear_mask(&mm->def_vma_flags, VMA_LOCKED_MASK); if (flags & MCL_FUTURE) { @@ -726,20 +732,20 @@ static int apply_mlockall_flags(int flags) } =20 if (flags & MCL_CURRENT) { - to_add |=3D VM_LOCKED; + vma_flags_set(&to_add, VMA_LOCKED_BIT); if (flags & MCL_ONFAULT) - to_add |=3D VM_LOCKONFAULT; + vma_flags_set(&to_add, VMA_LOCKONFAULT_BIT); } =20 for_each_vma(vmi, vma) { int error; - vm_flags_t newflags; + vma_flags_t newflags =3D vma->flags; =20 - newflags =3D vma->vm_flags & ~VM_LOCKED_MASK; - newflags |=3D to_add; + vma_flags_clear_mask(&newflags, VMA_LOCKED_MASK); + vma_flags_set_mask(&newflags, to_add); =20 error =3D mlock_fixup(&vmi, vma, &prev, vma->vm_start, vma->vm_end, - newflags); + &newflags); /* Ignore errors, but prev needs fixing up. */ if (error) prev =3D vma; --=20 2.54.0 From nobody Sat Jul 4 20:54:49 2026 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 5867A4508FD; Mon, 29 Jun 2026 19:26:31 +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=1782761192; cv=none; b=Fb0uAAb5U/VTe+NlqSeqlZElXQzbSG0Bbjmrf+JiyrC3qgj7T1u8QRE6g4GEcK/kZ/JQ2GikUMRTQSclYzxCYrPr9AwWcBaUjfPOQcPJemkewPT0aBYnd6Xw+bdaUgrcYXrXgQ5lBbtjV/tABodOa9iQAxVB9KLG+Yaa06e7ssY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782761192; c=relaxed/simple; bh=OwUrj/nPAAIWKjYj+BpkR7yZRZx9qbBGfEUfjqCmudI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WQojgL9QIRajFqQUY7ld+w9SiRj/lxtke6EjbybxkFnvdqayp/1tZclm1m9Bkrg1kG2OsoQlIDpMyQD5jFNJs9nyygBAnRiL4cQVX17Hc489dzZPjgRuLUKVMduZldbMvIQQn8u8vfXSs05cXcRKD4sK9xAHLhm6ApOJ7b4GOqw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fdO1PP2g; 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="fdO1PP2g" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 21CD81F00A3E; Mon, 29 Jun 2026 19:26:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782761191; bh=7iylMldrhSOO1IEZlbk7MTKXM0GrQcJsQB4ToBzrfcg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=fdO1PP2gxmsSJuRPnWwcheJxMiMKiZBWn90xI79zJaMiV/YAWbO2W0UnkIARGEFmJ bUUypPCeo0RpYETiZpTVAWC1ZJgInCqeTo7CPwT1NJ+iAS/OA2fkIDIiwkzF2IdCxJ H1jkYqazpwvk7cCzjQ8KC3Eq3OzDzM19YONhlNaTINb3vxc5OIdkaX0FQvTizRIsMV fFHMoQDX/6bV24SU/j+ksLGs/hI3k+hEd9nomwhzobiDnGLxs0IIuDY4YCRVYktHIy Ns0cVUa1HvnaEuLjD4poIn0XFh/n+4WbEqsH7icPumiQlF5blcflwYpgekG7KvEtiI s5/n6ZeMI4APw== From: Lorenzo Stoakes To: Andrew Morton Cc: Thomas Bogendoerfer , Madhavan Srinivasan , Michael Ellerman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Lucas Stach , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Rob Clark , Dmitry Baryshkov , Lyude Paul , Danilo Krummrich , Tomi Valkeinen , Sandy Huang , =?UTF-8?q?Heiko=20St=C3=BCbner?= , Andy Yan , Thierry Reding , Mikko Perttunen , Jonathan Hunter , Gerd Hoffmann , Dmitry Osipenko , Zack Rusin , Matthew Brost , Thomas Hellstrom , Oleksandr Andrushchenko , Helge Deller , Benjamin LaHaise , Alexander Viro , Christian Brauner , Muchun Song , Oscar Salvador , David Hildenbrand , Zi Yan , Baolin Wang , "Liam R . Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Hugh Dickins , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Jann Horn , Pedro Falcato , Kees Cook , Jaroslav Kysela , Takashi Iwai , linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, dri-devel@lists.freedesktop.org, etnaviv@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, intel-gfx@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-rockchip@lists.infradead.org, linux-tegra@vger.kernel.org, virtualization@lists.linux.dev, intel-xe@lists.freedesktop.org, xen-devel@lists.xenproject.org, linux-fbdev@vger.kernel.org, linux-aio@kvack.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-sound@vger.kernel.org Subject: [PATCH 12/13] mm/mprotect: convert mprotect code to use vma_flags_t Date: Mon, 29 Jun 2026 20:25:35 +0100 Message-ID: <7ef626d8a12dc742cfc09d080be5dc09850e873a.1782760670.git.ljs@kernel.org> X-Mailer: git-send-email 2.54.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Replace use of the legacy vm_flags_t flags with vma_flags_t values throughout the mprotect logic. Note that we retain the legacy vm_flags_t bit shifting code in do_mprotect_key(), deferring a vma_flags_t approach to this for the time being. Additionally update comments to reflect the changes to be consistent. No functional change intended. Signed-off-by: Lorenzo Stoakes --- mm/mprotect.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/mm/mprotect.c b/mm/mprotect.c index 9cbf932b028c..c9504b2a2525 100644 --- a/mm/mprotect.c +++ b/mm/mprotect.c @@ -40,7 +40,7 @@ =20 static bool maybe_change_pte_writable(struct vm_area_struct *vma, pte_t pt= e) { - if (WARN_ON_ONCE(!(vma->vm_flags & VM_WRITE))) + if (WARN_ON_ONCE(!vma_test(vma, VMA_WRITE_BIT))) return false; =20 /* Don't touch entries that are not even readable. */ @@ -97,7 +97,7 @@ static bool can_change_shared_pte_writable(struct vm_area= _struct *vma, bool can_change_pte_writable(struct vm_area_struct *vma, unsigned long add= r, pte_t pte) { - if (!(vma->vm_flags & VM_SHARED)) + if (!vma_test(vma, VMA_SHARED_BIT)) return can_change_private_pte_writable(vma, addr, pte); =20 return can_change_shared_pte_writable(vma, pte); @@ -194,7 +194,7 @@ static __always_inline void set_write_prot_commit_flush= _ptes(struct vm_area_stru { bool set_write; =20 - if (vma->vm_flags & VM_SHARED) { + if (vma_test(vma, VMA_SHARED_BIT)) { set_write =3D can_change_shared_pte_writable(vma, ptent); prot_commit_flush_ptes(vma, addr, ptep, oldpte, ptent, nr_ptes, /* idx =3D */ 0, set_write, tlb); @@ -811,8 +811,8 @@ mprotect_fixup(struct vma_iterator *vmi, struct mmu_gat= her *tlb, vm_unacct_memory(nrpages); =20 /* - * Private VM_LOCKED VMA becoming writable: trigger COW to avoid major - * fault on access. + * Private VMA_LOCKED_BIT VMA becoming writable: trigger COW to avoid + * major fault on access. */ if (vma_flags_test(&new_vma_flags, VMA_WRITE_BIT) && vma_flags_test(&old_vma_flags, VMA_LOCKED_BIT) && @@ -886,7 +886,7 @@ static int do_mprotect_pkey(unsigned long start, size_t= len, goto out; start =3D vma->vm_start; error =3D -EINVAL; - if (!(vma->vm_flags & VM_GROWSDOWN)) + if (!vma_test(vma, VMA_GROWSDOWN_BIT)) goto out; } else { if (vma->vm_start > start) @@ -894,7 +894,7 @@ static int do_mprotect_pkey(unsigned long start, size_t= len, if (unlikely(grows & PROT_GROWSUP)) { end =3D vma->vm_end; error =3D -EINVAL; - if (!(vma->vm_flags & VM_GROWSUP)) + if (!vma_test(vma, VMA_GROWSUP_BIT)) goto out; } } @@ -918,7 +918,7 @@ static int do_mprotect_pkey(unsigned long start, size_t= len, } =20 /* Does the application expect PROT_READ to imply PROT_EXEC */ - if (rier && (vma->vm_flags & VM_MAYEXEC)) + if (rier && vma_test(vma, VMA_MAYEXEC_BIT)) prot |=3D PROT_EXEC; =20 /* --=20 2.54.0 From nobody Sat Jul 4 20:54:49 2026 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 6A86340E8F9; Mon, 29 Jun 2026 19:26:34 +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=1782761195; cv=none; b=NbVyH1JLt/SJcku4TefszoYmYUxzWiPfe3jg2ZfI3KvTfD8n9vM5d8ga+S2QoMBftOl4UYJTa7woJNdjZdobW1ztgu1AKsyJhGoNkv9bQmnKJ3bjGPK1CwnHGTaECNq/kLTDOIgjGDhdJ7Qa3GWmxEkjyCcEJPz/KagYCr4J4ms= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782761195; c=relaxed/simple; bh=6+LPdzn6DKa5AZ/1lLFwtMWqnePrBT5MftbfXwiIJOY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=O4215mzagTCBHVdBxgJJBYZECwkydDdi1d8uPZVsKOELbt3em28zjCDNRJLrPjtdncgUcuMF2H6Z6GchaWAi6hpV6XLxyoP0UcEGX6S/3EqDm/iuwGTZRes8e8/BOxd9jHOB60vGxXbLVwbGWgfXhPXda+KKUrmiTl5aPfDGydE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hLoZuZ6G; 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="hLoZuZ6G" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1FF3D1F00A3A; Mon, 29 Jun 2026 19:26:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782761194; bh=sN4LQUgjV69Vve2oXZfCiFNipdsItekVGoTOkdqjKS0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=hLoZuZ6GBb1R0Z8TwftPIK0sP8C4ADT292o5rS1him458JTroTTIDyZ9+Hy0is8/O XeNWVdGoC2qYu58Mzq91SKZir/PAlhdz5W7/iMSQVsmj5rX5UypKH/YB7F0APXpMjo gXJ3Cof1BcdWqfLA9vJGStqjlBFRuYOd2hD8szeCByTsbP11W1zWXgrMdNJbOmXD83 8Ph8tUPYU2URQeyhQuTC5p984HgkU+vfY0J7E1B0VzjOvq6a9QDtpjiRAIvAELmghi LbEz58mWSrmhExQd0IOcLcqDCYco7OLxU40dg/5907AyshxLbOd1WyrGHUd9f/IXP7 SzrM+wTul9mMg== From: Lorenzo Stoakes To: Andrew Morton Cc: Thomas Bogendoerfer , Madhavan Srinivasan , Michael Ellerman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Lucas Stach , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Rob Clark , Dmitry Baryshkov , Lyude Paul , Danilo Krummrich , Tomi Valkeinen , Sandy Huang , =?UTF-8?q?Heiko=20St=C3=BCbner?= , Andy Yan , Thierry Reding , Mikko Perttunen , Jonathan Hunter , Gerd Hoffmann , Dmitry Osipenko , Zack Rusin , Matthew Brost , Thomas Hellstrom , Oleksandr Andrushchenko , Helge Deller , Benjamin LaHaise , Alexander Viro , Christian Brauner , Muchun Song , Oscar Salvador , David Hildenbrand , Zi Yan , Baolin Wang , "Liam R . Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Hugh Dickins , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Jann Horn , Pedro Falcato , Kees Cook , Jaroslav Kysela , Takashi Iwai , linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, dri-devel@lists.freedesktop.org, etnaviv@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, intel-gfx@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-rockchip@lists.infradead.org, linux-tegra@vger.kernel.org, virtualization@lists.linux.dev, intel-xe@lists.freedesktop.org, xen-devel@lists.xenproject.org, linux-fbdev@vger.kernel.org, linux-aio@kvack.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-sound@vger.kernel.org Subject: [PATCH 13/13] mm/mremap: convert mremap code to use vma_flags_t Date: Mon, 29 Jun 2026 20:25:36 +0100 Message-ID: <380f761d35a3faa4370f8b3f92e3d4af3d4c7110.1782760670.git.ljs@kernel.org> X-Mailer: git-send-email 2.54.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Replace use of the legacy vm_flags_t flags with vma_flags_t values throughout the mremap logic. Additionally update comments to reflect the changes to be consistent. No functional change intended. Signed-off-by: Lorenzo Stoakes --- mm/mremap.c | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/mm/mremap.c b/mm/mremap.c index 079a0ba0c4a7..0ea43302b7ed 100644 --- a/mm/mremap.c +++ b/mm/mremap.c @@ -68,7 +68,7 @@ struct vma_remap_struct { bool populate_expand; /* mlock()'d expanded, must populate. */ enum mremap_type remap_type; /* expand, shrink, etc. */ bool mmap_locked; /* Is mm currently write-locked? */ - unsigned long charged; /* If VM_ACCOUNT, # pages to account. */ + unsigned long charged; /* If VMA_ACCOUNT_BIT, # pgs to account */ bool vmi_needs_invalidate; /* Is the VMA iterator invalidated? */ }; =20 @@ -954,7 +954,7 @@ static unsigned long vrm_set_new_addr(struct vma_remap_= struct *vrm) =20 if (vrm->flags & MREMAP_FIXED) map_flags |=3D MAP_FIXED; - if (vma->vm_flags & VM_MAYSHARE) + if (vma_test(vma, VMA_MAYSHARE_BIT)) map_flags |=3D MAP_SHARED; =20 res =3D get_unmapped_area(vma->vm_file, new_addr, vrm->new_len, pgoff, @@ -976,7 +976,7 @@ static bool vrm_calc_charge(struct vma_remap_struct *vr= m) { unsigned long charged; =20 - if (!(vrm->vma->vm_flags & VM_ACCOUNT)) + if (!vma_test(vrm->vma, VMA_ACCOUNT_BIT)) return true; =20 /* @@ -1003,7 +1003,7 @@ static bool vrm_calc_charge(struct vma_remap_struct *= vrm) */ static void vrm_uncharge(struct vma_remap_struct *vrm) { - if (!(vrm->vma->vm_flags & VM_ACCOUNT)) + if (!vma_test(vrm->vma, VMA_ACCOUNT_BIT)) return; =20 vm_unacct_memory(vrm->charged); @@ -1023,7 +1023,7 @@ static void vrm_stat_account(struct vma_remap_struct = *vrm, struct vm_area_struct *vma =3D vrm->vma; =20 vm_stat_account(mm, vma->vm_flags, pages); - if (vma->vm_flags & VM_LOCKED) + if (vma_test(vma, VMA_LOCKED_BIT)) mm->locked_vm +=3D pages; } =20 @@ -1167,7 +1167,7 @@ static void unmap_source_vma(struct vma_remap_struct = *vrm) * arose, in which case we _do_ wish to unmap the _new_ VMA, which means * we actually _do_ want it be unaccounted. */ - bool accountable_move =3D (vma->vm_flags & VM_ACCOUNT) && + bool accountable_move =3D vma_test(vma, VMA_ACCOUNT_BIT) && !(vrm->flags & MREMAP_DONTUNMAP); =20 /* @@ -1186,7 +1186,7 @@ static void unmap_source_vma(struct vma_remap_struct = *vrm) * portions of the original VMA that remain. */ if (accountable_move) { - vm_flags_clear(vma, VM_ACCOUNT); + vma_clear_flags(vma, VMA_ACCOUNT_BIT); /* We are about to split vma, so store the start/end. */ vm_start =3D vma->vm_start; vm_end =3D vma->vm_end; @@ -1211,8 +1211,8 @@ static void unmap_source_vma(struct vma_remap_struct = *vrm) * | | * |-------------| * - * Having cleared VM_ACCOUNT from the whole VMA, after we unmap above - * we'll end up with: + * Having cleared VMA_ACCOUNT_BIT from the whole VMA, after we unmap + * above we'll end up with: * * addr end * | | @@ -1232,13 +1232,15 @@ static void unmap_source_vma(struct vma_remap_struc= t *vrm) if (vm_start < addr) { struct vm_area_struct *prev =3D vma_prev(&vmi); =20 - vm_flags_set(prev, VM_ACCOUNT); /* Acquires VMA lock. */ + vma_start_write(prev); + vma_set_flags(prev, VMA_ACCOUNT_BIT); } =20 if (vm_end > end) { struct vm_area_struct *next =3D vma_next(&vmi); =20 - vm_flags_set(next, VM_ACCOUNT); /* Acquires VMA lock. */ + vma_start_write(next); + vma_set_flags(next, VMA_ACCOUNT_BIT); } } } @@ -1321,8 +1323,8 @@ static void dontunmap_complete(struct vma_remap_struc= t *vrm, unsigned long old_start =3D vrm->vma->vm_start; unsigned long old_end =3D vrm->vma->vm_end; =20 - /* We always clear VM_LOCKED[ONFAULT] on the old VMA. */ - vm_flags_clear(vrm->vma, VM_LOCKED_MASK); + /* We always clear VMA_LOCKED[ONFAULT]_BIT on the old VMA. */ + vma_clear_flags_mask(vrm->vma, VMA_LOCKED_MASK); =20 /* * anon_vma links of the old vma is no longer needed after its page @@ -1758,14 +1760,14 @@ static int check_prep_vma(struct vma_remap_struct *= vrm) * based on the original. There are no known use cases for this * behavior. As a result, fail such attempts. */ - if (!old_len && !(vma->vm_flags & (VM_SHARED | VM_MAYSHARE))) { + if (!old_len && !vma_test_any(vma, VMA_SHARED_BIT, VMA_MAYSHARE_BIT)) { pr_warn_once("%s (%d): attempted to duplicate a private mapping with mre= map. This is not supported.\n", current->comm, current->pid); return -EINVAL; } =20 if ((vrm->flags & MREMAP_DONTUNMAP) && - (vma->vm_flags & (VM_DONTEXPAND | VM_PFNMAP))) + vma_test_any(vma, VMA_DONTEXPAND_BIT, VMA_PFNMAP_BIT)) return -EINVAL; =20 /* @@ -1795,7 +1797,7 @@ static int check_prep_vma(struct vma_remap_struct *vr= m) return 0; =20 /* We are expanding and the VMA is mlock()'d so we need to populate. */ - if (vma->vm_flags & VM_LOCKED) + if (vma_test(vma, VMA_LOCKED_BIT)) vrm->populate_expand =3D true; =20 /* Need to be careful about a growing mapping */ @@ -1803,10 +1805,10 @@ static int check_prep_vma(struct vma_remap_struct *= vrm) if (pgoff + (new_len >> PAGE_SHIFT) < pgoff) return -EINVAL; =20 - if (vma->vm_flags & (VM_DONTEXPAND | VM_PFNMAP)) + if (vma_test_any(vma, VMA_DONTEXPAND_BIT, VMA_PFNMAP_BIT)) return -EFAULT; =20 - if (!mlock_future_ok(mm, vma->vm_flags & VM_LOCKED, vrm->delta)) + if (!mlock_future_ok(mm, vma_test(vma, VMA_LOCKED_BIT), vrm->delta)) return -EAGAIN; =20 if (!may_expand_vm(mm, &vma->flags, vrm->delta >> PAGE_SHIFT)) --=20 2.54.0