linux_dsm_epyc7002/arch/powerpc/platforms
Michael Ellerman bb5f33c069 Merge "Use hugepages to map kernel mem on 8xx" into next
Merge Christophe's large series to use huge pages for the linear
mapping on 8xx.

From his cover letter:

The main purpose of this big series is to:
- reorganise huge page handling to avoid using mm_slices.
- use huge pages to map kernel memory on the 8xx.

The 8xx supports 4 page sizes: 4k, 16k, 512k and 8M.
It uses 2 Level page tables, PGD having 1024 entries, each entry
covering 4M address space. Then each page table has 1024 entries.

At the time being, page sizes are managed in PGD entries, implying
the use of mm_slices as it can't mix several pages of the same size
in one page table.

The first purpose of this series is to reorganise things so that
standard page tables can also handle 512k pages. This is done by
adding a new _PAGE_HUGE flag which will be copied into the Level 1
entry in the TLB miss handler. That done, we have 2 types of pages:
- PGD entries to regular page tables handling 4k/16k and 512k pages
- PGD entries to hugepd tables handling 8M pages.

There is no need to mix 8M pages with other sizes, because a 8M page
will use more than what a single PGD covers.

Then comes the second purpose of this series. At the time being, the
8xx has implemented special handling in the TLB miss handlers in order
to transparently map kernel linear address space and the IMMR using
huge pages by building the TLB entries in assembly at the time of the
exception.

As mm_slices is only for user space pages, and also because it would
anyway not be convenient to slice kernel address space, it was not
possible to use huge pages for kernel address space. But after step
one of the series, it is now more flexible to use huge pages.

This series drop all assembly 'just in time' handling of huge pages
and use huge pages in page tables instead.

Once the above is done, then comes icing on the cake:
- Use huge pages for KASAN shadow mapping
- Allow pinned TLBs with strict kernel rwx
- Allow pinned TLBs with debug pagealloc

Then, last but not least, those modifications for the 8xx allows the
following improvement on book3s/32:
- Mapping KASAN shadow with BATs
- Allowing BATs with debug pagealloc

All this allows to considerably simplify TLB miss handlers and associated
initialisation. The overhead of reading page tables is negligible
compared to the reduction of the miss handlers.

While we were at touching pte_update(), some cleanup was done
there too.

Tested widely on 8xx and 832x. Boot tested on QEMU MAC99.
2020-05-26 22:54:27 +10:00
..
4xx powerpc: remove the ppc44x ocm.c file 2019-08-27 13:03:33 +10:00
8xx powerpc/8xx: Allow large TLBs with DEBUG_PAGEALLOC 2020-05-26 22:22:23 +10:00
40x powerpc updates for 5.3 2019-07-13 16:08:36 -07:00
44x powerpc/32: drop unused ISA_DMA_THRESHOLD 2020-04-01 14:30:50 +11:00
52xx powerpc/32: drop unused ISA_DMA_THRESHOLD 2020-04-01 14:30:50 +11:00
82xx treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
83xx powerpc/83xx: Add some error handling in 'quirk_mpc8360e_qe_enet10()' 2020-03-04 22:44:25 +11:00
85xx powerpc: Replace setup_irq() by request_irq() 2020-03-25 12:07:57 +11:00
86xx powerpc: Use a datatype for instructions 2020-05-19 00:10:37 +10:00
512x powerpc/512x: Use dma_request_chan() instead dma_request_slave_channel() 2020-01-06 16:25:29 +11:00
amigaone powerpc/32: drop unused ISA_DMA_THRESHOLD 2020-04-01 14:30:50 +11:00
cell powerpc: Replace _ALIGN_UP() by ALIGN() 2020-05-11 23:15:15 +10:00
chrp powerpc/32: drop unused ISA_DMA_THRESHOLD 2020-04-01 14:30:50 +11:00
embedded6xx powerpc/wii: Fix declaration made after definition 2020-05-20 23:39:56 +10:00
maple powerpc/maple: Fix declaration made after definition 2020-03-25 12:09:48 +11:00
pasemi arch/powerpc/setup: Drop dummy_con initialization 2020-01-14 15:29:17 +01:00
powermac powerpc: Use a datatype for instructions 2020-05-19 00:10:37 +10:00
powernv powerpc/powernv: add NULL check after kzalloc 2020-05-20 23:39:56 +10:00
ps3 powerpc/ps3: Fix kexec shutdown hang 2020-05-19 00:10:35 +10:00
pseries powerpc/pseries: Machine check use rtas_call_unlocked() with args on stack 2020-05-19 00:10:34 +10:00
fsl_uli1575.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
Kconfig powerpc/64s: Reimplement power4_idle code in C 2020-01-16 14:59:37 +10:00
Kconfig.cputype powerpc/8xx: Add a function to early map kernel via huge pages 2020-05-26 22:22:22 +10:00
Makefile