Thread (29 messages) flat view 29 messages, 2 authors, 2021-10-22

Re: [PATCH v3 16/18] powerpc/64s: Move hash MMU support code under CONFIG_PPC_64S_HASH_MMU

From: Nicholas Piggin <npiggin@gmail.com>
Date: 2021-10-22 09:35:04

Excerpts from Christophe Leroy's message of October 22, 2021 5:18 pm:

Le 22/10/2021 à 00:30, Nicholas Piggin a écrit :
quoted
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 <npiggin@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(-)
quoted
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.
quoted
@@ -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.
quoted
@@ -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.
quoted
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
quoted
  /*
   * Override the generic version in mm/memremap.c.
   *
quoted
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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help