[PATCH] powerpc/64s/hash: convert SLB miss handlers to C

Benjamin Herrenschmidt benh at au1.ibm.com
Tue Aug 21 16:12:44 AEST 2018


On Tue, 2018-08-21 at 15:13 +1000, Nicholas Piggin wrote:
> This patch moves SLB miss handlers completely to C, using the standard
> exception handler macros to set up the stack and branch to C.
> 
> This can be done because the segment containing the kernel stack is
> always bolted, so accessing it with relocation on will not cause an
> SLB exception.
> 
> Arbitrary kernel memory may not be accessed when handling kernel space
> SLB misses, so care should be taken there. However user SLB misses can
> access any kernel memory, which can be used to move some fields out of
> the paca (in later patches).
> 
> User SLB misses could quite easily reconcile IRQs and set up a first
> class kernel environment and exit via ret_from_except, however that
> doesn't seem to be necessary at the moment, so we only do that if a
> bad fault is encountered.
> 
> [ Credit to Aneesh for bug fixes, error checks, and improvements to bad
>   address handling, etc ]
> 
> Signed-off-by: Nicholas Piggin <npiggin at gmail.com>
> 
> Since RFC:
> - Send patch 1 by itself to focus on the big change.
> - Added MSR[RI] handling
> - Fixed up a register loss bug exposed by irq tracing (Aneesh)
> - Reject misses outside the defined kernel regions (Aneesh)
> - Added several more sanity checks and error handlig (Aneesh), we may
>   look at consolidating these tests and tightenig up the code but for
>   a first pass we decided it's better to check carefully.
> ---
>  arch/powerpc/include/asm/asm-prototypes.h |   2 +
>  arch/powerpc/kernel/exceptions-64s.S      | 202 +++----------
>  arch/powerpc/mm/Makefile                  |   2 +-
>  arch/powerpc/mm/slb.c                     | 257 +++++++++--------
>  arch/powerpc/mm/slb_low.S                 | 335 ----------------------
>  5 files changed, 185 insertions(+), 613 deletions(-)
                    ^^^                ^^^

Nice ! :-)

Cheers,
Ben.



More information about the Linuxppc-dev mailing list