mirror of
https://github.com/torvalds/linux.git
synced 2026-09-12 12:34:02 +02:00
mm: update generic_get_unmapped_area[_topdown]() to use vma_flags_t
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. Link: https://lore.kernel.org/20260711-b4-vma-flags-mm-v2-4-0fa2357d5431@kernel.org Signed-off-by: Lorenzo Stoakes <ljs@kernel.org> Reviewed-by: Zi Yan <ziy@nvidia.com> Reviewed-by: Lance Yang <lance.yang@linux.dev> 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
2ec748152d
commit
8d80043131
|
|
@ -659,7 +659,8 @@ unsigned long arch_get_unmapped_area(struct file *filp,
|
|||
unsigned int psize;
|
||||
|
||||
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));
|
||||
|
||||
if (filp && is_file_hugepages(filp))
|
||||
psize = file_to_psize(filp);
|
||||
|
|
@ -679,7 +680,8 @@ unsigned long arch_get_unmapped_area_topdown(struct file *filp,
|
|||
unsigned int psize;
|
||||
|
||||
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));
|
||||
|
||||
if (filp && is_file_hugepages(filp))
|
||||
psize = file_to_psize(filp);
|
||||
|
|
|
|||
|
|
@ -200,11 +200,11 @@ unsigned long mm_get_unmapped_area_vmaflags(struct file *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) {}
|
||||
|
|
|
|||
16
mm/mmap.c
16
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;
|
||||
|
||||
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 = current->mm;
|
||||
struct vm_area_struct *vma, *prev;
|
||||
|
|
@ -726,7 +726,7 @@ generic_get_unmapped_area(struct file *filp, unsigned long addr,
|
|||
info.length = len;
|
||||
info.low_limit = mm->mmap_base;
|
||||
info.high_limit = mmap_end;
|
||||
info.start_gap = stack_guard_placement(vm_flags);
|
||||
info.start_gap = stack_guard_placement(vma_flags);
|
||||
if (filp && is_file_hugepages(filp))
|
||||
info.align_mask = 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
|
||||
|
||||
|
|
@ -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 = current->mm;
|
||||
|
|
@ -778,7 +778,7 @@ generic_get_unmapped_area_topdown(struct file *filp, unsigned long addr,
|
|||
info.length = len;
|
||||
info.low_limit = PAGE_SIZE;
|
||||
info.high_limit = arch_get_mmap_base(addr, mm->mmap_base);
|
||||
info.start_gap = stack_guard_placement(vm_flags);
|
||||
info.start_gap = stack_guard_placement(vma_flags);
|
||||
if (filp && is_file_hugepages(filp))
|
||||
info.align_mask = huge_page_mask_align(filp);
|
||||
addr = vm_unmapped_area(&info);
|
||||
|
|
@ -807,7 +807,7 @@ arch_get_unmapped_area_topdown(struct file *filp, unsigned 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
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user