Inter-revision diff: patch 6

Comparing v6 (message) to v5 (message)

--- 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(&current->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(&current->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
 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help