Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

mm: simplify VMA flag tests of excluded flags

We have implemented flag mask comparisons of the form:

if ((vm_flags & (VM_FOO|VM_BAR|VM_BAZ) == VM_FOO) { ... }

Like-for-like in the code using a bitwise-and mask via vma_flags_and() and
using vma_flags_same() to ensure the final result equals only the required
flag value.

This is fine but confusing, make things clearer by instead explicitly
excluding undesired flags and including the desired one via tests of the
form:

if (vma_flags_test(&flags, VMA_FOO_BIT) &&
!vma_flags_test_any(&flags, VMA_BAR_BIT, VMA_BAZ_BIT)) { ... }

Which makes it easier to understand what is going on.

No functional change intended.

Link: https://lkml.kernel.org/r/d395c5dd837a9864f5efcec42175910afbe3ce73.1774034900.git.ljs@kernel.org
Signed-off-by: Lorenzo Stoakes (Oracle) <ljs@kernel.org>
Suggested-by: Vlastimil Babka (SUSE) <vbabka@kernel.org>
Acked-by: Vlastimil Babka (SUSE) <vbabka@kernel.org>
Cc: Albert Ou <aou@eecs.berkeley.edu>
Cc: Alexander Gordeev <agordeev@linux.ibm.com>
Cc: Alexandre Ghiti <alex@ghiti.fr>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Anton Ivanov <anton.ivanov@cambridgegreys.com>
Cc: "Borislav Petkov (AMD)" <bp@alien8.de>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Chengming Zhou <chengming.zhou@linux.dev>
Cc: Christian Borntraeger <borntraeger@linux.ibm.com>
Cc: Christian Brauner <brauner@kernel.org>
Cc: David Hildenbrand <david@kernel.org>
Cc: Dinh Nguyen <dinguyen@kernel.org>
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Huacai Chen <chenhuacai@kernel.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Jann Horn <jannh@google.com>
Cc: Johannes Berg <johannes@sipsolutions.net>
Cc: Kees Cook <kees@kernel.org>
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Nicholas Piggin <npiggin@gmail.com>
Cc: Ondrej Mosnacek <omosnace@redhat.com>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
Cc: Paul Moore <paul@paul-moore.com>
Cc: Pedro Falcato <pfalcato@suse.de>
Cc: Richard Weinberger <richard@nod.at>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Stephen Smalley <stephen.smalley.work@gmail.com>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Sven Schnelle <svens@linux.ibm.com>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Cc: Vineet Gupta <vgupta@kernel.org>
Cc: WANG Xuerui <kernel@xen0n.name>
Cc: Will Deacon <will@kernel.org>
Cc: xu xin <xu.xin16@zte.com.cn>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Lorenzo Stoakes (Oracle) and committed by
Andrew Morton
71fdcf92 90cb921c

+9 -16
+4 -8
mm/mprotect.c
··· 784 784 * Private VM_LOCKED VMA becoming writable: trigger COW to avoid major 785 785 * fault on access. 786 786 */ 787 - if (vma_flags_test(&new_vma_flags, VMA_WRITE_BIT)) { 788 - const vma_flags_t mask = 789 - vma_flags_and(&old_vma_flags, VMA_WRITE_BIT, 790 - VMA_SHARED_BIT, VMA_LOCKED_BIT); 791 - 792 - if (vma_flags_same(&mask, VMA_LOCKED_BIT)) 793 - populate_vma_page_range(vma, start, end, NULL); 794 - } 787 + if (vma_flags_test(&new_vma_flags, VMA_WRITE_BIT) && 788 + vma_flags_test(&old_vma_flags, VMA_LOCKED_BIT) && 789 + !vma_flags_test_any(&old_vma_flags, VMA_WRITE_BIT, VMA_SHARED_BIT)) 790 + populate_vma_page_range(vma, start, end, NULL); 795 791 796 792 vm_stat_account(mm, vma_flags_to_legacy(old_vma_flags), -nrpages); 797 793 newflags = vma_flags_to_legacy(new_vma_flags);
+3 -4
mm/vma.c
··· 2343 2343 static bool accountable_mapping(struct mmap_state *map) 2344 2344 { 2345 2345 const struct file *file = map->file; 2346 - vma_flags_t mask; 2347 2346 2348 2347 /* 2349 2348 * hugetlb has its own accounting separate from the core VM ··· 2351 2352 if (file && is_file_hugepages(file)) 2352 2353 return false; 2353 2354 2354 - mask = vma_flags_and(&map->vma_flags, VMA_NORESERVE_BIT, VMA_SHARED_BIT, 2355 - VMA_WRITE_BIT); 2356 - return vma_flags_same(&mask, VMA_WRITE_BIT); 2355 + return vma_flags_test(&map->vma_flags, VMA_WRITE_BIT) && 2356 + !vma_flags_test_any(&map->vma_flags, VMA_NORESERVE_BIT, 2357 + VMA_SHARED_BIT); 2357 2358 } 2358 2359 2359 2360 /*
+2 -4
mm/vma.h
··· 529 529 530 530 static inline bool is_data_mapping_vma_flags(const vma_flags_t *vma_flags) 531 531 { 532 - const vma_flags_t mask = vma_flags_and(vma_flags, 533 - VMA_WRITE_BIT, VMA_SHARED_BIT, VMA_STACK_BIT); 534 - 535 - return vma_flags_same(&mask, VMA_WRITE_BIT); 532 + return vma_flags_test(vma_flags, VMA_WRITE_BIT) && 533 + !vma_flags_test_any(vma_flags, VMA_SHARED_BIT, VMA_STACK_BIT); 536 534 } 537 535 538 536 static inline void vma_iter_config(struct vma_iterator *vmi,