[RFC PATCH v3 2/8] hugetlbfs: Use arch_get_mmap_* macros
From: Amanieu d'Antras <hidden>
Date: 2021-04-21 19:05:13
Subsystem:
filesystems (vfs and infrastructure), hugetlb subsystem, the rest · Maintainers:
Alexander Viro, Christian Brauner, Muchun Song, Oscar Salvador, Linus Torvalds
hugetlb_get_unmapped_area should obey the same arch-specific constraints as mmap when selecting an address. Signed-off-by: Amanieu d'Antras <redacted> Co-developed-by: Ryan Houdek <redacted> Signed-off-by: Ryan Houdek <redacted> --- fs/hugetlbfs/inode.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-)
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
index 701c82c36138..526ccb524329 100644
--- a/fs/hugetlbfs/inode.c
+++ b/fs/hugetlbfs/inode.c@@ -191,6 +191,18 @@ static int hugetlbfs_file_mmap(struct file *file, struct vm_area_struct *vma) */ #ifndef HAVE_ARCH_HUGETLB_UNMAPPED_AREA +#ifndef arch_get_mmap_end +#define arch_get_mmap_end(addr) (TASK_SIZE) +#endif + +#ifndef arch_get_mmap_base +#define arch_get_mmap_base(addr) (current->mm->mmap_base) +#endif + +#ifndef arch_get_mmap_base_topdown +#define arch_get_mmap_base_topdown(addr) (current->mm->mmap_base) +#endif + static unsigned long hugetlb_get_unmapped_area_bottomup(struct file *file, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags)
@@ -200,8 +212,8 @@ hugetlb_get_unmapped_area_bottomup(struct file *file, unsigned long addr, info.flags = 0; info.length = len; - info.low_limit = current->mm->mmap_base; - info.high_limit = TASK_SIZE; + info.low_limit = arch_get_mmap_base(addr); + info.high_limit = arch_get_mmap_end(addr); info.align_mask = PAGE_MASK & ~huge_page_mask(h); info.align_offset = 0; return vm_unmapped_area(&info);
@@ -217,7 +229,7 @@ hugetlb_get_unmapped_area_topdown(struct file *file, unsigned long addr, info.flags = VM_UNMAPPED_AREA_TOPDOWN; info.length = len; info.low_limit = max(PAGE_SIZE, mmap_min_addr); - info.high_limit = current->mm->mmap_base; + info.high_limit = arch_get_mmap_base_topdown(addr); info.align_mask = PAGE_MASK & ~huge_page_mask(h); info.align_offset = 0; addr = vm_unmapped_area(&info);
@@ -231,8 +243,8 @@ hugetlb_get_unmapped_area_topdown(struct file *file, unsigned long addr, if (unlikely(offset_in_page(addr))) { VM_BUG_ON(addr != -ENOMEM); info.flags = 0; - info.low_limit = current->mm->mmap_base; - info.high_limit = TASK_SIZE; + info.low_limit = arch_get_mmap_base(addr); + info.high_limit = arch_get_mmap_end(addr); addr = vm_unmapped_area(&info); }
--
2.31.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel