Excerpts from Christophe Leroy's message of October 22, 2021 5:18 pm: > > > Le 22/10/2021 à 00:30, Nicholas Piggin a écrit : >> Compiling out hash support code when CONFIG_PPC_64S_HASH_MMU=n saves >> 128kB kernel image size (90kB text) on powernv_defconfig minus KVM, >> 350kB on pseries_defconfig minus KVM, 40kB on a tiny config. >> >> Signed-off-by: Nicholas Piggin <npig...@gmail.com> >> --- >> arch/powerpc/Kconfig | 2 +- >> arch/powerpc/include/asm/book3s/64/mmu.h | 19 +++++++++-- >> .../include/asm/book3s/64/tlbflush-hash.h | 7 ++++ >> arch/powerpc/include/asm/book3s/pgtable.h | 4 +++ >> arch/powerpc/include/asm/mmu_context.h | 2 ++ >> arch/powerpc/include/asm/paca.h | 8 +++++ >> arch/powerpc/kernel/asm-offsets.c | 2 ++ >> arch/powerpc/kernel/entry_64.S | 4 +-- >> arch/powerpc/kernel/exceptions-64s.S | 16 +++++++++ >> arch/powerpc/kernel/mce.c | 2 +- >> arch/powerpc/kernel/mce_power.c | 10 ++++-- >> arch/powerpc/kernel/paca.c | 18 ++++------ >> arch/powerpc/kernel/process.c | 13 +++---- >> arch/powerpc/kernel/prom.c | 2 ++ >> arch/powerpc/kernel/setup_64.c | 5 +++ >> arch/powerpc/kexec/core_64.c | 4 +-- >> arch/powerpc/kexec/ranges.c | 4 +++ >> arch/powerpc/mm/book3s64/Makefile | 15 ++++---- >> arch/powerpc/mm/book3s64/hugetlbpage.c | 2 ++ >> arch/powerpc/mm/book3s64/mmu_context.c | 34 +++++++++++++++---- >> arch/powerpc/mm/book3s64/pgtable.c | 2 +- >> arch/powerpc/mm/book3s64/radix_pgtable.c | 4 +++ >> arch/powerpc/mm/copro_fault.c | 2 ++ >> arch/powerpc/mm/ptdump/Makefile | 2 +- >> arch/powerpc/platforms/powernv/idle.c | 2 ++ >> arch/powerpc/platforms/powernv/setup.c | 2 ++ >> arch/powerpc/platforms/pseries/lpar.c | 11 ++++-- >> arch/powerpc/platforms/pseries/lparcfg.c | 2 +- >> arch/powerpc/platforms/pseries/mobility.c | 6 ++++ >> arch/powerpc/platforms/pseries/ras.c | 2 ++ >> arch/powerpc/platforms/pseries/reconfig.c | 2 ++ >> arch/powerpc/platforms/pseries/setup.c | 6 ++-- >> arch/powerpc/xmon/xmon.c | 8 +++-- >> drivers/misc/lkdtm/Makefile | 2 +- >> drivers/misc/lkdtm/core.c | 2 +- >> 35 files changed, 177 insertions(+), 51 deletions(-) >> > >> diff --git a/arch/powerpc/include/asm/book3s/64/mmu.h >> b/arch/powerpc/include/asm/book3s/64/mmu.h >> index c02f42d1031e..d94ebae386b6 100644 >> --- a/arch/powerpc/include/asm/book3s/64/mmu.h >> +++ b/arch/powerpc/include/asm/book3s/64/mmu.h >> @@ -233,7 +245,8 @@ static inline void >> setup_initial_memory_limit(phys_addr_t first_memblock_base, >> * know which translations we will pick. Hence go with hash >> * restrictions. >> */ >> - return hash__setup_initial_memory_limit(first_memblock_base, >> + if (!radix_enabled()) >> + return hash__setup_initial_memory_limit(first_memblock_base, >> first_memblock_size); > > It is a void function, using return is not correct.
I guess for this case I can fix as I go. >> @@ -112,8 +112,15 @@ static inline void >> hash__flush_tlb_kernel_range(unsigned long start, >> >> struct mmu_gather; >> extern void hash__tlb_flush(struct mmu_gather *tlb); >> +extern void flush_tlb_pmd_range(struct mm_struct *mm, pmd_t *pmd, >> + unsigned long addr); > > 'extern' is superflous Ditto. >> @@ -144,12 +147,21 @@ static int hash__init_new_context(struct mm_struct *mm) >> return index; >> } >> >> +void slb_setup_new_exec(void); > > Include arch/powerpc/mm/book3s64/internal.h instead Will do. >> diff --git a/arch/powerpc/mm/book3s64/pgtable.c >> b/arch/powerpc/mm/book3s64/pgtable.c >> index 7d556b5513e4..57d2d797c4f6 100644 >> --- a/arch/powerpc/mm/book3s64/pgtable.c >> +++ b/arch/powerpc/mm/book3s64/pgtable.c >> @@ -535,7 +535,7 @@ static int __init pgtable_debugfs_setup(void) >> } >> arch_initcall(pgtable_debugfs_setup); >> >> -#ifdef CONFIG_ZONE_DEVICE >> +#if defined(CONFIG_ZONE_DEVICE) && defined(ARCH_HAS_MEMREMAP_COMPAT_ALIGN) > > Patch 12 does > > select ARCH_HAS_MEMREMAP_COMPAT_ALIGN if PPC_BOOK3S_64 Ah, I meant to change that to PPC_64S_HASH_MMU. > > So this change is not needed > >> /* >> * Override the generic version in mm/memremap.c. >> * > >> diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c >> index dd8241c009e5..30f764476c30 100644 >> --- a/arch/powerpc/xmon/xmon.c >> +++ b/arch/powerpc/xmon/xmon.c >> @@ -1160,9 +1160,11 @@ cmds(struct pt_regs *excp) >> show_tasks(); >> break; >> #ifdef CONFIG_PPC_BOOK3S >> +#if defined(CONFIG_PPC32) || defined(CONFIG_PPC_64S_HASH_MMU) > > I think you'll get a build failure here. > > dump_segments() is defined only with CONFIG_PPC_BOOK3S_64 and > CONFIG_PPC_BOOK3S_32, see > > https://elixir.bootlin.com/linux/v5.15-rc5/source/arch/powerpc/xmon/xmon.c#L3745 > > and > > https://elixir.bootlin.com/linux/v5.15-rc5/source/arch/powerpc/xmon/xmon.c#L3784 AFAIKS it is okay because it still has ifdef BOOK3S? Thanks, Nick