On Thu, 22 Feb 2018 15:27:22 +0100 (CET) Christophe Leroy <christophe.le...@c-s.fr> wrote:
> In preparation for the following patch which will enhance 'slices' > for supporting PPC32 in order to fix an issue on hugepages on 8xx, > this patch takes out of page*.h all bits related to 'slices' and put > them into newly created slice.h header files. > While common parts go into asm/slice.h, subarch specific > parts go into respective books3s/64/slice.c and nohash/64/slice.c > 'slices' > > Signed-off-by: Christophe Leroy <christophe.le...@c-s.fr> I don't see a problem with this. Even by itself it seems like a good cleanup. Reviewed-by: Nicholas Piggin <npig...@gmail.com> > --- > v5: new - come from a split of patch 2 of v4 > > arch/powerpc/include/asm/book3s/64/slice.h | 27 ++++++++++++++ > arch/powerpc/include/asm/nohash/64/slice.h | 12 ++++++ > arch/powerpc/include/asm/page.h | 1 + > arch/powerpc/include/asm/page_64.h | 59 > ------------------------------ > arch/powerpc/include/asm/slice.h | 40 ++++++++++++++++++++ > 5 files changed, 80 insertions(+), 59 deletions(-) > create mode 100644 arch/powerpc/include/asm/book3s/64/slice.h > create mode 100644 arch/powerpc/include/asm/nohash/64/slice.h > create mode 100644 arch/powerpc/include/asm/slice.h > > diff --git a/arch/powerpc/include/asm/book3s/64/slice.h > b/arch/powerpc/include/asm/book3s/64/slice.h > new file mode 100644 > index 000000000000..db0dedab65ee > --- /dev/null > +++ b/arch/powerpc/include/asm/book3s/64/slice.h > @@ -0,0 +1,27 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +#ifndef _ASM_POWERPC_BOOK3S_64_SLICE_H > +#define _ASM_POWERPC_BOOK3S_64_SLICE_H > + > +#ifdef CONFIG_PPC_MM_SLICES > + > +#define SLICE_LOW_SHIFT 28 > +#define SLICE_LOW_TOP (0x100000000ul) > +#define SLICE_NUM_LOW (SLICE_LOW_TOP >> SLICE_LOW_SHIFT) > +#define GET_LOW_SLICE_INDEX(addr) ((addr) >> SLICE_LOW_SHIFT) > + > +#define SLICE_HIGH_SHIFT 40 > +#define SLICE_NUM_HIGH (H_PGTABLE_RANGE >> SLICE_HIGH_SHIFT) > +#define GET_HIGH_SLICE_INDEX(addr) ((addr) >> SLICE_HIGH_SHIFT) > + > +#else /* CONFIG_PPC_MM_SLICES */ > + > +#define get_slice_psize(mm, addr) ((mm)->context.user_psize) > +#define slice_set_user_psize(mm, psize) \ > +do { \ > + (mm)->context.user_psize = (psize); \ > + (mm)->context.sllp = SLB_VSID_USER | mmu_psize_defs[(psize)].sllp; \ > +} while (0) > + > +#endif /* CONFIG_PPC_MM_SLICES */ > + > +#endif /* _ASM_POWERPC_BOOK3S_64_SLICE_H */ > diff --git a/arch/powerpc/include/asm/nohash/64/slice.h > b/arch/powerpc/include/asm/nohash/64/slice.h > new file mode 100644 > index 000000000000..ad0d6e3cc1c5 > --- /dev/null > +++ b/arch/powerpc/include/asm/nohash/64/slice.h > @@ -0,0 +1,12 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +#ifndef _ASM_POWERPC_NOHASH_64_SLICE_H > +#define _ASM_POWERPC_NOHASH_64_SLICE_H > + > +#ifdef CONFIG_PPC_64K_PAGES > +#define get_slice_psize(mm, addr) MMU_PAGE_64K > +#else /* CONFIG_PPC_64K_PAGES */ > +#define get_slice_psize(mm, addr) MMU_PAGE_4K > +#endif /* !CONFIG_PPC_64K_PAGES */ > +#define slice_set_user_psize(mm, psize) do { BUG(); } while (0) > + > +#endif /* _ASM_POWERPC_NOHASH_64_SLICE_H */ > diff --git a/arch/powerpc/include/asm/page.h b/arch/powerpc/include/asm/page.h > index 8da5d4c1cab2..d5f1c41b7dba 100644 > --- a/arch/powerpc/include/asm/page.h > +++ b/arch/powerpc/include/asm/page.h > @@ -344,5 +344,6 @@ typedef struct page *pgtable_t; > > #include <asm-generic/memory_model.h> > #endif /* __ASSEMBLY__ */ > +#include <asm/slice.h> > > #endif /* _ASM_POWERPC_PAGE_H */ > diff --git a/arch/powerpc/include/asm/page_64.h > b/arch/powerpc/include/asm/page_64.h > index 56234c6fcd61..af04acdb873f 100644 > --- a/arch/powerpc/include/asm/page_64.h > +++ b/arch/powerpc/include/asm/page_64.h > @@ -86,65 +86,6 @@ extern u64 ppc64_pft_size; > > #endif /* __ASSEMBLY__ */ > > -#ifdef CONFIG_PPC_MM_SLICES > - > -#define SLICE_LOW_SHIFT 28 > -#define SLICE_HIGH_SHIFT 40 > - > -#define SLICE_LOW_TOP (0x100000000ul) > -#define SLICE_NUM_LOW (SLICE_LOW_TOP >> SLICE_LOW_SHIFT) > -#define SLICE_NUM_HIGH (H_PGTABLE_RANGE >> SLICE_HIGH_SHIFT) > - > -#define GET_LOW_SLICE_INDEX(addr) ((addr) >> SLICE_LOW_SHIFT) > -#define GET_HIGH_SLICE_INDEX(addr) ((addr) >> SLICE_HIGH_SHIFT) > - > -#ifndef __ASSEMBLY__ > -struct mm_struct; > - > -extern unsigned long slice_get_unmapped_area(unsigned long addr, > - unsigned long len, > - unsigned long flags, > - unsigned int psize, > - int topdown); > - > -extern unsigned int get_slice_psize(struct mm_struct *mm, > - unsigned long addr); > - > -extern void slice_set_user_psize(struct mm_struct *mm, unsigned int psize); > -extern void slice_set_range_psize(struct mm_struct *mm, unsigned long start, > - unsigned long len, unsigned int psize); > - > -#endif /* __ASSEMBLY__ */ > -#else > -#define slice_init() > -#ifdef CONFIG_PPC_BOOK3S_64 > -#define get_slice_psize(mm, addr) ((mm)->context.user_psize) > -#define slice_set_user_psize(mm, psize) \ > -do { \ > - (mm)->context.user_psize = (psize); \ > - (mm)->context.sllp = SLB_VSID_USER | mmu_psize_defs[(psize)].sllp; \ > -} while (0) > -#else /* !CONFIG_PPC_BOOK3S_64 */ > -#ifdef CONFIG_PPC_64K_PAGES > -#define get_slice_psize(mm, addr) MMU_PAGE_64K > -#else /* CONFIG_PPC_64K_PAGES */ > -#define get_slice_psize(mm, addr) MMU_PAGE_4K > -#endif /* !CONFIG_PPC_64K_PAGES */ > -#define slice_set_user_psize(mm, psize) do { BUG(); } while(0) > -#endif /* CONFIG_PPC_BOOK3S_64 */ > - > -#define slice_set_range_psize(mm, start, len, psize) \ > - slice_set_user_psize((mm), (psize)) > -#endif /* CONFIG_PPC_MM_SLICES */ > - > -#ifdef CONFIG_HUGETLB_PAGE > - > -#ifdef CONFIG_PPC_MM_SLICES > -#define HAVE_ARCH_HUGETLB_UNMAPPED_AREA > -#endif > - > -#endif /* !CONFIG_HUGETLB_PAGE */ > - > #define VM_DATA_DEFAULT_FLAGS \ > (is_32bit_task() ? \ > VM_DATA_DEFAULT_FLAGS32 : VM_DATA_DEFAULT_FLAGS64) > diff --git a/arch/powerpc/include/asm/slice.h > b/arch/powerpc/include/asm/slice.h > new file mode 100644 > index 000000000000..17c5a5d8c418 > --- /dev/null > +++ b/arch/powerpc/include/asm/slice.h > @@ -0,0 +1,40 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +#ifndef _ASM_POWERPC_SLICE_H > +#define _ASM_POWERPC_SLICE_H > + > +#ifdef CONFIG_PPC_BOOK3S_64 > +#include <asm/book3s/64/slice.h> > +#else > +#include <asm/nohash/64/slice.h> > +#endif > + > +#ifdef CONFIG_PPC_MM_SLICES > + > +#ifdef CONFIG_HUGETLB_PAGE > +#define HAVE_ARCH_HUGETLB_UNMAPPED_AREA > +#endif > +#define HAVE_ARCH_UNMAPPED_AREA > +#define HAVE_ARCH_UNMAPPED_AREA_TOPDOWN > + > +#ifndef __ASSEMBLY__ > + > +struct mm_struct; > + > +unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len, > + unsigned long flags, unsigned int psize, > + int topdown); > + > +unsigned int get_slice_psize(struct mm_struct *mm, unsigned long addr); > + > +void slice_set_user_psize(struct mm_struct *mm, unsigned int psize); > +void slice_set_range_psize(struct mm_struct *mm, unsigned long start, > + unsigned long len, unsigned int psize); > +#endif /* __ASSEMBLY__ */ > + > +#else /* CONFIG_PPC_MM_SLICES */ > + > +#define slice_set_range_psize(mm, start, len, psize) \ > + slice_set_user_psize((mm), (psize)) > +#endif /* CONFIG_PPC_MM_SLICES */ > + > +#endif /* _ASM_POWERPC_SLICE_H */