Nicholas Piggin <npig...@gmail.com> writes:
> 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      | 21 ++++++++++--
>  .../include/asm/book3s/64/tlbflush-hash.h     |  6 ++++
>  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        | 32 +++++++++++++++----
>  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/core.c                     |  2 +-
>  34 files changed, 173 insertions(+), 52 deletions(-)


I was able to clean up some of the ifdefs a little with the changes
below. I'll run these through some test builds and then squash them in.

cheers


diff --git a/arch/powerpc/include/asm/book3s/64/mmu-hash.h 
b/arch/powerpc/include/asm/book3s/64/mmu-hash.h
index 3004f3323144..21f780942911 100644
--- a/arch/powerpc/include/asm/book3s/64/mmu-hash.h
+++ b/arch/powerpc/include/asm/book3s/64/mmu-hash.h
@@ -523,8 +523,14 @@ void slb_save_contents(struct slb_entry *slb_ptr);
 void slb_dump_contents(struct slb_entry *slb_ptr);
 
 extern void slb_vmalloc_update(void);
-extern void slb_set_size(u16 size);
 void preload_new_slb_context(unsigned long start, unsigned long sp);
+
+#ifdef CONFIG_PPC_64S_HASH_MMU
+void slb_set_size(u16 size);
+#else
+static inline void slb_set_size(u16 size) { }
+#endif
+
 #endif /* __ASSEMBLY__ */
 
 /*
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index 2197404cdcc4..75678ff04dd7 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -231,10 +231,9 @@ static void __init check_cpu_pa_features(unsigned long 
node)
                      ibm_pa_features, ARRAY_SIZE(ibm_pa_features));
 }
 
-#ifdef CONFIG_PPC_BOOK3S_64
+#ifdef CONFIG_PPC_64S_HASH_MMU
 static void __init init_mmu_slb_size(unsigned long node)
 {
-#ifdef CONFIG_PPC_64S_HASH_MMU
        const __be32 *slb_size_ptr;
 
        slb_size_ptr = of_get_flat_dt_prop(node, "slb-size", NULL) ? :
@@ -242,7 +241,6 @@ static void __init init_mmu_slb_size(unsigned long node)
 
        if (slb_size_ptr)
                mmu_slb_size = be32_to_cpup(slb_size_ptr);
-#endif
 }
 #else
 #define init_mmu_slb_size(node) do { } while(0)
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index 22647bb82198..703a2e6ab08d 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -886,9 +886,7 @@ void __init setup_per_cpu_areas(void)
                atom_size = SZ_1M;
        } else if (radix_enabled()) {
                atom_size = PAGE_SIZE;
-       } else {
-#ifdef CONFIG_PPC_64S_HASH_MMU
-
+       } else if (IS_ENABLED(CONFIG_PPC_64S_HASH_MMU)) {
                /*
                 * Linear mapping is one of 4K, 1M and 16M.  For 4K, no need
                 * to group units.  For larger mappings, use 1M atom which
@@ -898,9 +896,6 @@ void __init setup_per_cpu_areas(void)
                        atom_size = PAGE_SIZE;
                else
                        atom_size = SZ_1M;
-#else
-               BUILD_BUG(); // radix_enabled() should be constant true
-#endif
        }
 
        if (pcpu_chosen_fc != PCPU_FC_PAGE) {
diff --git a/arch/powerpc/kexec/ranges.c b/arch/powerpc/kexec/ranges.c
index 92d831621fa0..563e9989a5bf 100644
--- a/arch/powerpc/kexec/ranges.c
+++ b/arch/powerpc/kexec/ranges.c
@@ -296,7 +296,7 @@ int add_initrd_mem_range(struct crash_mem **mem_ranges)
        return ret;
 }
 
-#ifdef CONFIG_PPC_BOOK3S_64
+#ifdef CONFIG_PPC_64S_HASH_MMU
 /**
  * add_htab_mem_range - Adds htab range to the given memory ranges list,
  *                      if it exists
@@ -306,14 +306,10 @@ int add_initrd_mem_range(struct crash_mem **mem_ranges)
  */
 int add_htab_mem_range(struct crash_mem **mem_ranges)
 {
-#ifdef CONFIG_PPC_64S_HASH_MMU
        if (!htab_address)
                return 0;
 
        return add_mem_range(mem_ranges, __pa(htab_address), htab_size_bytes);
-#else
-       return 0;
-#endif
 }
 #endif
 
diff --git a/arch/powerpc/mm/book3s64/radix_pgtable.c 
b/arch/powerpc/mm/book3s64/radix_pgtable.c
index 5f8cbeca8080..3c4f0ebe5df8 100644
--- a/arch/powerpc/mm/book3s64/radix_pgtable.c
+++ b/arch/powerpc/mm/book3s64/radix_pgtable.c
@@ -333,10 +333,8 @@ static void __init radix_init_pgtable(void)
        phys_addr_t start, end;
        u64 i;
 
-#ifdef CONFIG_PPC_64S_HASH_MMU
        /* We don't support slb for radix */
-       mmu_slb_size = 0;
-#endif
+       slb_set_size(0);
 
        /*
         * Create the linear mapping
diff --git a/arch/powerpc/platforms/pseries/mobility.c 
b/arch/powerpc/platforms/pseries/mobility.c
index 21b706bcea76..85033f392c78 100644
--- a/arch/powerpc/platforms/pseries/mobility.c
+++ b/arch/powerpc/platforms/pseries/mobility.c
@@ -484,9 +484,7 @@ static int do_suspend(void)
        ret = rtas_ibm_suspend_me(&status);
        if (ret != 0) {
                pr_err("ibm,suspend-me error: %d\n", status);
-#ifdef CONFIG_PPC_64S_HASH_MMU
                slb_set_size(saved_slb_size);
-#endif
        }
 
        return ret;
diff --git a/arch/powerpc/platforms/pseries/pseries.h 
b/arch/powerpc/platforms/pseries/pseries.h
index 3544778e06d0..b4c63c481f33 100644
--- a/arch/powerpc/platforms/pseries/pseries.h
+++ b/arch/powerpc/platforms/pseries/pseries.h
@@ -113,6 +113,11 @@ int dlpar_workqueue_init(void);
 
 extern u32 pseries_security_flavor;
 void pseries_setup_security_mitigations(void);
+
+#ifdef CONFIG_PPC_64S_HASH_MMU
 void pseries_lpar_read_hblkrm_characteristics(void);
+#else
+static inline void pseries_lpar_read_hblkrm_characteristics(void) { }
+#endif
 
 #endif /* _PSERIES_PSERIES_H */
diff --git a/arch/powerpc/platforms/pseries/reconfig.c 
b/arch/powerpc/platforms/pseries/reconfig.c
index 80dae18d6621..7f7369fec46b 100644
--- a/arch/powerpc/platforms/pseries/reconfig.c
+++ b/arch/powerpc/platforms/pseries/reconfig.c
@@ -337,10 +337,8 @@ static int do_update_property(char *buf, size_t bufsize)
        if (!newprop)
                return -ENOMEM;
 
-#ifdef CONFIG_PPC_64S_HASH_MMU
        if (!strcmp(name, "slb-size") || !strcmp(name, "ibm,slb-size"))
                slb_set_size(*(int *)value);
-#endif
 
        return of_update_property(np, newprop);
 }

Reply via email to