]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
powerpc/mm: cleanup HPAGE_SHIFT setup
authorChristophe Leroy <christophe.leroy@c-s.fr>
Fri, 26 Apr 2019 05:59:48 +0000 (05:59 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 2 May 2019 15:20:24 +0000 (01:20 +1000)
Only book3s/64 may select default among several HPAGE_SHIFT at runtime.
8xx always defines 512K pages as default
FSL_BOOK3E always defines 4M pages as default

This patch limits HUGETLB_PAGE_SIZE_VARIABLE to book3s/64
moves the definitions in subarches files.

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/Kconfig
arch/powerpc/include/asm/hugetlb.h
arch/powerpc/include/asm/page.h
arch/powerpc/mm/book3s64/hash_hugetlbpage.c
arch/powerpc/mm/hugetlbpage.c

index 5d8e692d647035646d3455b0c4469b53b7899bbc..7815eb0cc2a5ba5083ad6cf89fabd5b6ed0a4a6a 100644 (file)
@@ -390,7 +390,7 @@ source "kernel/Kconfig.hz"
 
 config HUGETLB_PAGE_SIZE_VARIABLE
        bool
-       depends on HUGETLB_PAGE
+       depends on HUGETLB_PAGE && PPC_BOOK3S_64
        default y
 
 config MATH_EMULATION
index 84598c6b09595e2e1118e5bd1625d032ce392e6a..20a101046cffc32a9e03117e0987ba4d39caee68 100644 (file)
@@ -15,6 +15,8 @@
 
 extern bool hugetlb_disabled;
 
+void hugetlbpage_init_default(void);
+
 void flush_dcache_icache_hugepage(struct page *page);
 
 int slice_is_hugepage_only_range(struct mm_struct *mm, unsigned long addr,
index 6b508420d92be6e6692aa214df4612de45e364a5..dbc8c0679480c5d028eb25846b020e92f0b833d1 100644 (file)
 #define PAGE_SIZE              (ASM_CONST(1) << PAGE_SHIFT)
 
 #ifndef __ASSEMBLY__
-#ifdef CONFIG_HUGETLB_PAGE
-extern unsigned int HPAGE_SHIFT;
-#else
+#ifndef CONFIG_HUGETLB_PAGE
 #define HPAGE_SHIFT PAGE_SHIFT
+#elif defined(CONFIG_PPC_BOOK3S_64)
+extern unsigned int hpage_shift;
+#define HPAGE_SHIFT hpage_shift
+#elif defined(CONFIG_PPC_8xx)
+#define HPAGE_SHIFT            19      /* 512k pages */
+#elif defined(CONFIG_PPC_FSL_BOOK3E)
+#define HPAGE_SHIFT            22      /* 4M pages */
 #endif
 #define HPAGE_SIZE             ((1UL) << HPAGE_SHIFT)
 #define HPAGE_MASK             (~(HPAGE_SIZE - 1))
index 2d4e02aa15a37923e52d0261797193136ce35b43..eefa89c6117bd8113d6393cc3a7f708f9d0c808c 100644 (file)
@@ -15,6 +15,9 @@
 #include <asm/cacheflush.h>
 #include <asm/machdep.h>
 
+unsigned int hpage_shift;
+EXPORT_SYMBOL(hpage_shift);
+
 extern long hpte_insert_repeating(unsigned long hash, unsigned long vpn,
                                  unsigned long pa, unsigned long rlags,
                                  unsigned long vflags, int psize, int ssize);
@@ -150,3 +153,16 @@ void huge_ptep_modify_prot_commit(struct vm_area_struct *vma, unsigned long addr
                                                           old_pte, pte);
        set_huge_pte_at(vma->vm_mm, addr, ptep, pte);
 }
+
+void hugetlbpage_init_default(void)
+{
+       /* Set default large page size. Currently, we pick 16M or 1M
+        * depending on what is available
+        */
+       if (mmu_psize_defs[MMU_PAGE_16M].shift)
+               hpage_shift = mmu_psize_defs[MMU_PAGE_16M].shift;
+       else if (mmu_psize_defs[MMU_PAGE_1M].shift)
+               hpage_shift = mmu_psize_defs[MMU_PAGE_1M].shift;
+       else if (mmu_psize_defs[MMU_PAGE_2M].shift)
+               hpage_shift = mmu_psize_defs[MMU_PAGE_2M].shift;
+}
index 7b7027aae73fc202148e55744b98d75ea75db1ef..847fb495a6289103eb547d6ac5b9341308f51e9c 100644 (file)
@@ -28,9 +28,6 @@
 
 bool hugetlb_disabled = false;
 
-unsigned int HPAGE_SHIFT;
-EXPORT_SYMBOL(HPAGE_SHIFT);
-
 #define hugepd_none(hpd)       (hpd_val(hpd) == 0)
 
 #define PTE_T_ORDER    (__builtin_ffs(sizeof(pte_t)) - __builtin_ffs(sizeof(void *)))
@@ -645,23 +642,9 @@ static int __init hugetlbpage_init(void)
 #endif
        }
 
-#if defined(CONFIG_PPC_FSL_BOOK3E) || defined(CONFIG_PPC_8xx)
-       /* Default hpage size = 4M on FSL_BOOK3E and 512k on 8xx */
-       if (mmu_psize_defs[MMU_PAGE_4M].shift)
-               HPAGE_SHIFT = mmu_psize_defs[MMU_PAGE_4M].shift;
-       else if (mmu_psize_defs[MMU_PAGE_512K].shift)
-               HPAGE_SHIFT = mmu_psize_defs[MMU_PAGE_512K].shift;
-#else
-       /* Set default large page size. Currently, we pick 16M or 1M
-        * depending on what is available
-        */
-       if (mmu_psize_defs[MMU_PAGE_16M].shift)
-               HPAGE_SHIFT = mmu_psize_defs[MMU_PAGE_16M].shift;
-       else if (mmu_psize_defs[MMU_PAGE_1M].shift)
-               HPAGE_SHIFT = mmu_psize_defs[MMU_PAGE_1M].shift;
-       else if (mmu_psize_defs[MMU_PAGE_2M].shift)
-               HPAGE_SHIFT = mmu_psize_defs[MMU_PAGE_2M].shift;
-#endif
+       if (IS_ENABLED(HUGETLB_PAGE_SIZE_VARIABLE))
+               hugetlbpage_init_default();
+
        return 0;
 }