powerpc/mm: Move get_unmapped_area functions to slice.c
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Sat, 9 Apr 2022 17:17:34 +0000 (19:17 +0200)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 5 May 2022 12:11:58 +0000 (22:11 +1000)
hugetlb_get_unmapped_area() is now identical to the
generic version if only RADIX is enabled, so move it
to slice.c and let it fallback on the generic one
when HASH MMU is not compiled in.

Do the same with arch_get_unmapped_area() and
arch_get_unmapped_area_topdown().

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/b5d9c124e82889e0cb115c150915a0c0d84eb960.1649523076.git.christophe.leroy@csgroup.eu
arch/powerpc/include/asm/book3s/64/mmu.h
arch/powerpc/include/asm/book3s/64/slice.h
arch/powerpc/mm/book3s64/slice.c
arch/powerpc/mm/hugetlbpage.c
arch/powerpc/mm/mmap.c

index 006cbec70ffe5d3c553586b805a64d33ae25bb22..570a4960cf1790e00e1465979cd74bdf143b9955 100644 (file)
@@ -4,12 +4,6 @@
 
 #include <asm/page.h>
 
-#ifdef CONFIG_HUGETLB_PAGE
-#define HAVE_ARCH_HUGETLB_UNMAPPED_AREA
-#endif
-#define HAVE_ARCH_UNMAPPED_AREA
-#define HAVE_ARCH_UNMAPPED_AREA_TOPDOWN
-
 #ifndef __ASSEMBLY__
 /*
  * Page size definition
index 5b0f7105bc8bae61f441c6bf869bb018c640b3a0..b8eb4ad271b9928cb4542fba912694651480494d 100644 (file)
@@ -4,6 +4,12 @@
 
 #ifndef __ASSEMBLY__
 
+#ifdef CONFIG_HUGETLB_PAGE
+#define HAVE_ARCH_HUGETLB_UNMAPPED_AREA
+#endif
+#define HAVE_ARCH_UNMAPPED_AREA
+#define HAVE_ARCH_UNMAPPED_AREA_TOPDOWN
+
 #define SLICE_LOW_SHIFT                28
 #define SLICE_LOW_TOP          (0x100000000ul)
 #define SLICE_NUM_LOW          (SLICE_LOW_TOP >> SLICE_LOW_SHIFT)
index e4382713746d6c783be3be0f49e5e0bddbabbbab..03681042b80784ce3ce24b1846bc61434b2e6b6e 100644 (file)
@@ -639,6 +639,32 @@ return_addr:
 }
 EXPORT_SYMBOL_GPL(slice_get_unmapped_area);
 
+unsigned long arch_get_unmapped_area(struct file *filp,
+                                    unsigned long addr,
+                                    unsigned long len,
+                                    unsigned long pgoff,
+                                    unsigned long flags)
+{
+       if (radix_enabled())
+               return generic_get_unmapped_area(filp, addr, len, pgoff, flags);
+
+       return slice_get_unmapped_area(addr, len, flags,
+                                      mm_ctx_user_psize(&current->mm->context), 0);
+}
+
+unsigned long arch_get_unmapped_area_topdown(struct file *filp,
+                                            const unsigned long addr0,
+                                            const unsigned long len,
+                                            const unsigned long pgoff,
+                                            const unsigned long flags)
+{
+       if (radix_enabled())
+               return generic_get_unmapped_area_topdown(filp, addr0, len, pgoff, flags);
+
+       return slice_get_unmapped_area(addr0, len, flags,
+                                      mm_ctx_user_psize(&current->mm->context), 1);
+}
+
 unsigned int notrace get_slice_psize(struct mm_struct *mm, unsigned long addr)
 {
        unsigned char *psizes;
@@ -766,4 +792,20 @@ unsigned long vma_mmu_pagesize(struct vm_area_struct *vma)
 
        return 1UL << mmu_psize_to_shift(get_slice_psize(vma->vm_mm, vma->vm_start));
 }
+
+static int file_to_psize(struct file *file)
+{
+       struct hstate *hstate = hstate_file(file);
+       return shift_to_mmu_psize(huge_page_shift(hstate));
+}
+
+unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
+                                       unsigned long len, unsigned long pgoff,
+                                       unsigned long flags)
+{
+       if (radix_enabled())
+               return generic_hugetlb_get_unmapped_area(file, addr, len, pgoff, flags);
+
+       return slice_get_unmapped_area(addr, len, flags, file_to_psize(file), 1);
+}
 #endif
index a87c886042e935c1e42d1545a5f3b3ef5fc7e5d1..b282af39fcf671ec7c8aa736c248037dea2ccd67 100644 (file)
@@ -542,27 +542,6 @@ retry:
        return page;
 }
 
-#ifdef HAVE_ARCH_HUGETLB_UNMAPPED_AREA
-static inline int file_to_psize(struct file *file)
-{
-       struct hstate *hstate = hstate_file(file);
-       return shift_to_mmu_psize(huge_page_shift(hstate));
-}
-
-unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
-                                       unsigned long len, unsigned long pgoff,
-                                       unsigned long flags)
-{
-       if (radix_enabled())
-               return generic_hugetlb_get_unmapped_area(file, addr, len,
-                                                      pgoff, flags);
-#ifdef CONFIG_PPC_64S_HASH_MMU
-       return slice_get_unmapped_area(addr, len, flags, file_to_psize(file), 1);
-#endif
-       BUG();
-}
-#endif
-
 bool __init arch_hugetlb_valid_size(unsigned long size)
 {
        int shift = __ffs(size);
index 46781d0103d199f3c5872049b09cc1b379823056..5972d619d274c5b4798f4e1caf174310c8067ced 100644 (file)
@@ -80,42 +80,6 @@ static inline unsigned long mmap_base(unsigned long rnd,
        return PAGE_ALIGN(DEFAULT_MAP_WINDOW - gap - rnd);
 }
 
-#ifdef HAVE_ARCH_UNMAPPED_AREA
-unsigned long arch_get_unmapped_area(struct file *filp,
-                                    unsigned long addr,
-                                    unsigned long len,
-                                    unsigned long pgoff,
-                                    unsigned long flags)
-{
-       if (radix_enabled())
-               return generic_get_unmapped_area(filp, addr, len, pgoff, flags);
-
-#ifdef CONFIG_PPC_64S_HASH_MMU
-       return slice_get_unmapped_area(addr, len, flags,
-                                      mm_ctx_user_psize(&current->mm->context), 0);
-#else
-       BUG();
-#endif
-}
-
-unsigned long arch_get_unmapped_area_topdown(struct file *filp,
-                                            const unsigned long addr0,
-                                            const unsigned long len,
-                                            const unsigned long pgoff,
-                                            const unsigned long flags)
-{
-       if (radix_enabled())
-               return generic_get_unmapped_area_topdown(filp, addr0, len, pgoff, flags);
-
-#ifdef CONFIG_PPC_64S_HASH_MMU
-       return slice_get_unmapped_area(addr0, len, flags,
-                                      mm_ctx_user_psize(&current->mm->context), 1);
-#else
-       BUG();
-#endif
-}
-#endif /* HAVE_ARCH_UNMAPPED_AREA */
-
 /*
  * This function, called very early during the creation of a new
  * process VM image, sets up which VM layout function to use: