mirror of
https://github.com/torvalds/linux.git
synced 2026-09-11 20:13:02 +02:00
mm: prefer mm->def_vma_flags in mm logic
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. We update dump_mm() to use the %*pb format which means we make no assumption about the number of VMA flag bits on output when outputting default VMA flags. No functional change intended. Link: https://lore.kernel.org/20260711-b4-vma-flags-mm-v2-5-0fa2357d5431@kernel.org Signed-off-by: Lorenzo Stoakes <ljs@kernel.org> Reviewed-by: Lance Yang <lance.yang@linux.dev> Reviewed-by: Zi Yan <ziy@nvidia.com> Reviewed-by: Vlastimil Babka (SUSE) <vbabka@kernel.org> Cc: Baolin Wang <baolin.wang@linux.alibaba.com> Cc: Barry Song <baohua@kernel.org> Cc: Christian Brauner <brauner@kernel.org> Cc: Dave Airlie <airlied@gmail.com> Cc: David Hildenbrand <david@kernel.org> Cc: Dev Jain <dev.jain@arm.com> Cc: Jani Nikula <jani.nikula@intel.com> Cc: Jan Kara <jack@suse.cz> Cc: Jann Horn <jannh@google.com> Cc: Mike Rapoport <rppt@kernel.org> Cc: Muchun Song <muchun.song@linux.dev> Cc: Nico Pache <npache@redhat.com> Cc: Oscar Salvador <osalvador@suse.de> Cc: Pedro Falcato <pfalcato@suse.de> Cc: Suren Baghdasaryan <surenb@google.com> Cc: Thomas Zimmermann <tzimmermann@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
8d80043131
commit
96c09ae60b
|
|
@ -197,7 +197,7 @@ void dump_mm(const struct mm_struct *mm)
|
|||
"numa_next_scan %lu numa_scan_offset %lu numa_scan_seq %d\n"
|
||||
#endif
|
||||
"tlb_flush_pending %d\n"
|
||||
"def_flags: %#lx(%pGv)\n",
|
||||
"def_flags: %*pb(%pGv)\n",
|
||||
|
||||
mm, mm->task_size,
|
||||
mm->mmap_base, mm->mmap_legacy_base,
|
||||
|
|
@ -226,7 +226,8 @@ 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
|
||||
NUM_VMA_FLAG_BITS, mm->def_vma_flags.__vma_flags,
|
||||
&mm->def_vma_flags
|
||||
);
|
||||
}
|
||||
EXPORT_SYMBOL(dump_mm);
|
||||
|
|
|
|||
13
mm/mlock.c
13
mm/mlock.c
|
|
@ -699,26 +699,27 @@ SYSCALL_DEFINE2(munlock, unsigned long, start, size_t, len)
|
|||
|
||||
/*
|
||||
* Take the MCL_* flags passed into mlockall (or 0 if called from munlockall)
|
||||
* and translate into the appropriate modifications to mm->def_flags and/or the
|
||||
* flags for all current VMAs.
|
||||
* and translate into the appropriate modifications to mm->def_vma_flags and/or
|
||||
* the flags for all current VMAs.
|
||||
*
|
||||
* There are a couple of subtleties with this. If mlockall() is called multiple
|
||||
* times with different flags, the values do not necessarily stack. If mlockall
|
||||
* is called once including the MCL_FUTURE flag and then a second time without
|
||||
* 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 = current->mm;
|
||||
struct vm_area_struct *vma, *prev = NULL;
|
||||
vm_flags_t to_add = 0;
|
||||
|
||||
current->mm->def_flags &= ~VM_LOCKED_MASK;
|
||||
vma_flags_clear_mask(&mm->def_vma_flags, VMA_LOCKED_MASK);
|
||||
if (flags & MCL_FUTURE) {
|
||||
current->mm->def_flags |= VM_LOCKED;
|
||||
vma_flags_set(&mm->def_vma_flags, VMA_LOCKED_BIT);
|
||||
|
||||
if (flags & MCL_ONFAULT)
|
||||
current->mm->def_flags |= VM_LOCKONFAULT;
|
||||
vma_flags_set(&mm->def_vma_flags, VMA_LOCKONFAULT_BIT);
|
||||
|
||||
if (!(flags & MCL_CURRENT))
|
||||
goto out;
|
||||
|
|
|
|||
11
mm/mmap.c
11
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 = current->mm;
|
||||
const bool is_def_locked =
|
||||
vma_flags_test(&mm->def_vma_flags, VMA_LOCKED_BIT);
|
||||
unsigned long mapped_addr;
|
||||
|
||||
mapped_addr = get_unmapped_area(NULL, addr, len, 0, MAP_FIXED);
|
||||
if (IS_ERR_VALUE(mapped_addr))
|
||||
return mapped_addr;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
SYSCALL_DEFINE1(brk, unsigned long, brk)
|
||||
|
|
@ -197,7 +198,7 @@ SYSCALL_DEFINE1(brk, unsigned long, brk)
|
|||
goto out;
|
||||
|
||||
mm->brk = brk;
|
||||
if (mm->def_flags & VM_LOCKED)
|
||||
if (vma_flags_test(&mm->def_vma_flags, VMA_LOCKED_BIT))
|
||||
populate = true;
|
||||
|
||||
success:
|
||||
|
|
@ -1247,7 +1248,7 @@ int vm_brk_flags(unsigned long addr, unsigned long request, bool is_exec)
|
|||
|
||||
vma = vma_prev(&vmi);
|
||||
ret = do_brk_flags(&vmi, vma, addr, len, vma_flags);
|
||||
populate = ((mm->def_flags & VM_LOCKED) != 0);
|
||||
populate = vma_flags_test(&mm->def_vma_flags, VMA_LOCKED_BIT);
|
||||
mmap_write_unlock(mm);
|
||||
userfaultfd_unmap_complete(mm, &uf);
|
||||
if (populate && !ret)
|
||||
|
|
|
|||
2
mm/vma.c
2
mm/vma.c
|
|
@ -3426,7 +3426,7 @@ struct vm_area_struct *__install_special_mapping(
|
|||
if (unlikely(vma == NULL))
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
vm_flags |= mm->def_flags | VM_DONTEXPAND;
|
||||
vm_flags |= vma_flags_to_legacy(mm->def_vma_flags) | VM_DONTEXPAND;
|
||||
if (pgtable_supports_soft_dirty())
|
||||
vm_flags |= VM_SOFTDIRTY;
|
||||
vm_flags_init(vma, vm_flags & ~VM_LOCKED_MASK);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user