[RFC PATCH 4/6] powerpc/64s: Make hash MMU code build configurable

Christophe Leroy christophe.leroy at csgroup.eu
Mon Aug 30 17:12:45 AEST 2021



Le 30/08/2021 à 08:55, Nicholas Piggin a écrit :
> Excerpts from Christophe Leroy's message of August 28, 2021 7:59 pm:
>>
>>
>> Le 27/08/2021 à 18:34, Nicholas Piggin a écrit :
>>> Introduce a new option CONFIG_PPC_64S_HASH_MMU which allows the 64s hash
>>> MMU code to be compiled out if radix is selected and the minimum
>>> supported CPU type is POWER9 or higher, and KVM is not selected.
>>>
>>> This 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 at gmail.com>
>>> ---
>>>    arch/powerpc/Kconfig                          |  1 +
>>>    arch/powerpc/include/asm/book3s/64/mmu.h      | 22 +++++-
>>>    .../include/asm/book3s/64/tlbflush-hash.h     |  7 ++
>>>    arch/powerpc/include/asm/book3s/pgtable.h     |  4 ++
>>>    arch/powerpc/include/asm/mmu.h                | 38 +++++++++--
>>>    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/dt_cpu_ftrs.c             | 10 ++-
>>>    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                |  4 ++
>>>    arch/powerpc/kexec/core_64.c                  |  4 +-
>>>    arch/powerpc/kexec/ranges.c                   |  4 ++
>>>    arch/powerpc/kvm/Kconfig                      |  1 +
>>>    arch/powerpc/mm/book3s64/Makefile             | 17 +++--
>>>    arch/powerpc/mm/book3s64/hash_pgtable.c       |  1 -
>>>    arch/powerpc/mm/book3s64/hash_utils.c         | 10 ---
>>>    .../{hash_hugetlbpage.c => hugetlbpage.c}     |  6 ++
>>>    arch/powerpc/mm/book3s64/mmu_context.c        | 16 +++++
>>>    arch/powerpc/mm/book3s64/pgtable.c            | 22 +++++-
>>>    arch/powerpc/mm/book3s64/radix_pgtable.c      |  4 ++
>>>    arch/powerpc/mm/book3s64/slb.c                | 16 -----
>>>    arch/powerpc/mm/copro_fault.c                 |  2 +
>>>    arch/powerpc/mm/fault.c                       | 17 +++++
>>>    arch/powerpc/mm/pgtable.c                     | 10 ++-
>>>    arch/powerpc/platforms/Kconfig.cputype        | 20 +++++-
>>>    arch/powerpc/platforms/cell/Kconfig           |  1 +
>>>    arch/powerpc/platforms/maple/Kconfig          |  1 +
>>>    arch/powerpc/platforms/microwatt/Kconfig      |  2 +-
>>>    arch/powerpc/platforms/pasemi/Kconfig         |  1 +
>>>    arch/powerpc/platforms/powermac/Kconfig       |  1 +
>>>    arch/powerpc/platforms/powernv/Kconfig        |  2 +-
>>>    arch/powerpc/platforms/powernv/idle.c         |  2 +
>>>    arch/powerpc/platforms/powernv/setup.c        |  2 +
>>>    arch/powerpc/platforms/pseries/lpar.c         | 68 ++++++++++---------
>>>    arch/powerpc/platforms/pseries/lparcfg.c      |  2 +-
>>>    arch/powerpc/platforms/pseries/mobility.c     |  6 ++
>>>    arch/powerpc/platforms/pseries/ras.c          |  4 ++
>>>    arch/powerpc/platforms/pseries/reconfig.c     |  2 +
>>>    arch/powerpc/platforms/pseries/setup.c        |  6 +-
>>>    arch/powerpc/xmon/xmon.c                      |  8 ++-
>>>    47 files changed, 310 insertions(+), 111 deletions(-)
>>>    rename arch/powerpc/mm/book3s64/{hash_hugetlbpage.c => hugetlbpage.c} (95%)
>>
>> Whaou ! Huge patch.
>>
>> Several places you should be able to use IS_ENABLED() or simply radix_enabled() instead of #ifdefs
>> and rely on GCC to opt out stuff when radix_enabled() folds into 'true'.
> 
> A lot of it couldn't be done because of data structures but I'm sure I
> missed a lot. I will go over it again.
> 
>> I may do more detailed comments later when I have time.
> 
> Very much appreciated, but let me send out another version before you
> get the fine toothed comb out so I don't waste too much of your time.

One thing that would probably help reduce the size of the patch and help focus on the real changes 
would be to put pure code moves in a previous patch I think.

> If there are no objections to the idea from a high level.

I think the idea is good, I always wondered why we kept HASH and RADIX at the same time.

I did similar thing on book3s/32 when I separated 603 and 604+ so that you could build one or the 
other or both.

Christophe


More information about the Linuxppc-dev mailing list