--- v6
+++ v5
@@ -1,56 +1,199 @@
-vma_mmu_pagesize() is only required for slices,
-otherwise there is a generic weak version doing the
-exact same thing.
-
-Move it to slice.c
+CONFIG_PPC_MM_SLICES is always selected by hash book3s/64.
+CONFIG_PPC_MM_SLICES is never selected by other platforms.
+
+Remove it.
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
---
- arch/powerpc/mm/hugetlbpage.c | 11 -----------
- arch/powerpc/mm/slice.c | 9 +++++++++
- 2 files changed, 9 insertions(+), 11 deletions(-)
-
+ arch/powerpc/include/asm/hugetlb.h | 2 +-
+ arch/powerpc/include/asm/paca.h | 7 -------
+ arch/powerpc/kernel/paca.c | 5 -----
+ arch/powerpc/mm/book3s64/Makefile | 3 +--
+ arch/powerpc/mm/book3s64/hash_utils.c | 14 --------------
+ arch/powerpc/mm/hugetlbpage.c | 2 +-
+ arch/powerpc/mm/mmap.c | 4 ++--
+ arch/powerpc/platforms/Kconfig.cputype | 4 ----
+ 8 files changed, 5 insertions(+), 36 deletions(-)
+
+diff --git a/arch/powerpc/include/asm/hugetlb.h b/arch/powerpc/include/asm/hugetlb.h
+index f18c543bc01d..86a60ba6bd2a 100644
+--- a/arch/powerpc/include/asm/hugetlb.h
++++ b/arch/powerpc/include/asm/hugetlb.h
+@@ -24,7 +24,7 @@ static inline int is_hugepage_only_range(struct mm_struct *mm,
+ unsigned long addr,
+ unsigned long len)
+ {
+- if (IS_ENABLED(CONFIG_PPC_MM_SLICES) && !radix_enabled())
++ if (IS_ENABLED(CONFIG_PPC_64S_HASH_MMU) && !radix_enabled())
+ return slice_is_hugepage_only_range(mm, addr, len);
+ return 0;
+ }
+diff --git a/arch/powerpc/include/asm/paca.h b/arch/powerpc/include/asm/paca.h
+index 295573a82c66..bd4dd02e61c8 100644
+--- a/arch/powerpc/include/asm/paca.h
++++ b/arch/powerpc/include/asm/paca.h
+@@ -152,16 +152,9 @@ struct paca_struct {
+ struct tlb_core_data tcd;
+ #endif /* CONFIG_PPC_BOOK3E */
+
+-#ifdef CONFIG_PPC_BOOK3S
+ #ifdef CONFIG_PPC_64S_HASH_MMU
+-#ifdef CONFIG_PPC_MM_SLICES
+ unsigned char mm_ctx_low_slices_psize[BITS_PER_LONG / BITS_PER_BYTE];
+ unsigned char mm_ctx_high_slices_psize[SLICE_ARRAY_SIZE];
+-#else
+- u16 mm_ctx_user_psize;
+- u16 mm_ctx_sllp;
+-#endif
+-#endif
+ #endif
+
+ /*
+diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c
+index 39da688a9455..ba593fd60124 100644
+--- a/arch/powerpc/kernel/paca.c
++++ b/arch/powerpc/kernel/paca.c
+@@ -344,15 +344,10 @@ void copy_mm_to_paca(struct mm_struct *mm)
+ {
+ mm_context_t *context = &mm->context;
+
+-#ifdef CONFIG_PPC_MM_SLICES
+ VM_BUG_ON(!mm_ctx_slb_addr_limit(context));
+ memcpy(&get_paca()->mm_ctx_low_slices_psize, mm_ctx_low_slices(context),
+ LOW_SLICE_ARRAY_SZ);
+ memcpy(&get_paca()->mm_ctx_high_slices_psize, mm_ctx_high_slices(context),
+ TASK_SLICE_ARRAY_SZ(context));
+-#else /* CONFIG_PPC_MM_SLICES */
+- get_paca()->mm_ctx_user_psize = context->user_psize;
+- get_paca()->mm_ctx_sllp = context->sllp;
+-#endif
+ }
+ #endif /* CONFIG_PPC_64S_HASH_MMU */
+diff --git a/arch/powerpc/mm/book3s64/Makefile b/arch/powerpc/mm/book3s64/Makefile
+index af2f3e75d458..d527dc8e30a8 100644
+--- a/arch/powerpc/mm/book3s64/Makefile
++++ b/arch/powerpc/mm/book3s64/Makefile
+@@ -5,7 +5,7 @@ ccflags-y := $(NO_MINIMAL_TOC)
+ obj-y += mmu_context.o pgtable.o trace.o
+ ifdef CONFIG_PPC_64S_HASH_MMU
+ CFLAGS_REMOVE_slb.o = $(CC_FLAGS_FTRACE)
+-obj-y += hash_pgtable.o hash_utils.o hash_tlb.o slb.o
++obj-y += hash_pgtable.o hash_utils.o hash_tlb.o slb.o slice.o
+ obj-$(CONFIG_PPC_HASH_MMU_NATIVE) += hash_native.o
+ obj-$(CONFIG_PPC_4K_PAGES) += hash_4k.o
+ obj-$(CONFIG_PPC_64K_PAGES) += hash_64k.o
+@@ -21,7 +21,6 @@ obj-$(CONFIG_PPC_RADIX_MMU) += radix_hugetlbpage.o
+ endif
+ obj-$(CONFIG_SPAPR_TCE_IOMMU) += iommu_api.o
+ obj-$(CONFIG_PPC_PKEY) += pkeys.o
+-obj-$(CONFIG_PPC_MM_SLICES) += slice.o
+
+ # Instrumenting the SLB fault path can lead to duplicate SLB entries
+ KCOV_INSTRUMENT_slb.o := n
+diff --git a/arch/powerpc/mm/book3s64/hash_utils.c b/arch/powerpc/mm/book3s64/hash_utils.c
+index eced266dc5e9..7ecadf5e6bf9 100644
+--- a/arch/powerpc/mm/book3s64/hash_utils.c
++++ b/arch/powerpc/mm/book3s64/hash_utils.c
+@@ -1264,7 +1264,6 @@ unsigned int hash_page_do_lazy_icache(unsigned int pp, pte_t pte, int trap)
+ return pp;
+ }
+
+-#ifdef CONFIG_PPC_MM_SLICES
+ static unsigned int get_paca_psize(unsigned long addr)
+ {
+ unsigned char *psizes;
+@@ -1281,12 +1280,6 @@ static unsigned int get_paca_psize(unsigned long addr)
+ return (psizes[index >> 1] >> (mask_index * 4)) & 0xF;
+ }
+
+-#else
+-unsigned int get_paca_psize(unsigned long addr)
+-{
+- return get_paca()->mm_ctx_user_psize;
+-}
+-#endif
+
+ /*
+ * Demote a segment to using 4k pages.
+@@ -1710,7 +1703,6 @@ DEFINE_INTERRUPT_HANDLER_RAW(do_hash_fault)
+ return 0;
+ }
+
+-#ifdef CONFIG_PPC_MM_SLICES
+ static bool should_hash_preload(struct mm_struct *mm, unsigned long ea)
+ {
+ int psize = get_slice_psize(mm, ea);
+@@ -1727,12 +1719,6 @@ static bool should_hash_preload(struct mm_struct *mm, unsigned long ea)
+
+ return true;
+ }
+-#else
+-static bool should_hash_preload(struct mm_struct *mm, unsigned long ea)
+-{
+- return true;
+-}
+-#endif
+
+ static void hash_preload(struct mm_struct *mm, pte_t *ptep, unsigned long ea,
+ bool is_exec, unsigned long trap)
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
-index ddead41e2194..0eec3b61bd13 100644
+index 0eec3b61bd13..f18b3a1d18f0 100644
--- a/arch/powerpc/mm/hugetlbpage.c
+++ b/arch/powerpc/mm/hugetlbpage.c
-@@ -565,17 +565,6 @@ unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
- }
+@@ -558,7 +558,7 @@ unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
+ return radix__hugetlb_get_unmapped_area(file, addr, len,
+ pgoff, flags);
#endif
-
--unsigned long vma_mmu_pagesize(struct vm_area_struct *vma)
--{
-- /* With radix we don't use slice, so derive it from vma*/
-- if (IS_ENABLED(CONFIG_PPC_MM_SLICES) && !radix_enabled()) {
-- unsigned int psize = get_slice_psize(vma->vm_mm, vma->vm_start);
+-#ifdef CONFIG_PPC_MM_SLICES
++#ifdef CONFIG_PPC_64S_HASH_MMU
+ return slice_get_unmapped_area(addr, len, flags, file_to_psize(file), 1);
+ #endif
+ BUG();
+diff --git a/arch/powerpc/mm/mmap.c b/arch/powerpc/mm/mmap.c
+index c475cf810aa8..9b0d6e395bc0 100644
+--- a/arch/powerpc/mm/mmap.c
++++ b/arch/powerpc/mm/mmap.c
+@@ -190,7 +190,7 @@ unsigned long arch_get_unmapped_area(struct file *filp,
+ unsigned long pgoff,
+ unsigned long flags)
+ {
+-#ifdef CONFIG_PPC_MM_SLICES
++#ifdef CONFIG_PPC_64S_HASH_MMU
+ return slice_get_unmapped_area(addr, len, flags,
+ mm_ctx_user_psize(¤t->mm->context), 0);
+ #else
+@@ -204,7 +204,7 @@ unsigned long arch_get_unmapped_area_topdown(struct file *filp,
+ const unsigned long pgoff,
+ const unsigned long flags)
+ {
+-#ifdef CONFIG_PPC_MM_SLICES
++#ifdef CONFIG_PPC_64S_HASH_MMU
+ return slice_get_unmapped_area(addr0, len, flags,
+ mm_ctx_user_psize(¤t->mm->context), 1);
+ #else
+diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/platforms/Kconfig.cputype
+index 87bc1929ee5a..c775b566e7b4 100644
+--- a/arch/powerpc/platforms/Kconfig.cputype
++++ b/arch/powerpc/platforms/Kconfig.cputype
+@@ -376,7 +376,6 @@ config SPE
+ config PPC_64S_HASH_MMU
+ bool "Hash MMU Support"
+ depends on PPC_BOOK3S_64
+- select PPC_MM_SLICES
+ default y
+ help
+ Enable support for the Power ISA Hash style MMU. This is implemented
+@@ -450,9 +449,6 @@ config PPC_BOOK3E_MMU
+ def_bool y
+ depends on FSL_BOOKE || PPC_BOOK3E
+
+-config PPC_MM_SLICES
+- bool
-
-- return 1UL << mmu_psize_to_shift(psize);
-- }
-- return vma_kernel_pagesize(vma);
--}
--
- bool __init arch_hugetlb_valid_size(unsigned long size)
- {
- int shift = __ffs(size);
-diff --git a/arch/powerpc/mm/slice.c b/arch/powerpc/mm/slice.c
-index f42711f865f3..8a3ac062b71e 100644
---- a/arch/powerpc/mm/slice.c
-+++ b/arch/powerpc/mm/slice.c
-@@ -759,4 +759,13 @@ int slice_is_hugepage_only_range(struct mm_struct *mm, unsigned long addr,
-
- return !slice_check_range_fits(mm, maskp, addr, len);
- }
-+
-+unsigned long vma_mmu_pagesize(struct vm_area_struct *vma)
-+{
-+ /* With radix we don't use slice, so derive it from vma*/
-+ if (radix_enabled())
-+ return vma_kernel_pagesize(vma);
-+
-+ return 1UL << mmu_psize_to_shift(get_slice_psize(vma->vm_mm, vma->vm_start));
-+}
- #endif
+ config PPC_HAVE_PMU_SUPPORT
+ bool
+
--
2.33.1