This series aims at porting interrupt entry/exit in C on PPC32, using the work already merged for PPC64.
First part do minimal changes in 40x in order to be able to enable MMU earlier in exception entry. Second part prepares and switches interrupt exit in C. Third part moves more and more things in C, ending with KUAP management. v1 is boot tested on 8xx and 83xx, releasing it as an RFC to get early feedback. This series applies on top of the one switching ppc32 syscall entry/exit in C. First patch is a bug fix already submitted but not yet merged that interracts with the series. Christophe Leroy (41): powerpc/32: Preserve cr1 in exception prolog stack check to fix build error powerpc/40x: Don't use SPRN_SPRG_SCRATCH0/1 in TLB miss handlers powerpc/40x: Change CRITICAL_EXCEPTION_PROLOG macro to a gas macro powerpc/40x: Save SRR0/SRR1 and r10/r11 earlier in critical exception powerpc/40x: Reorder a few instructions in critical exception prolog powerpc/40x: Prepare for enabling MMU in critical exception prolog powerpc/40x: Prepare normal exception handler for enabling MMU early powerpc/32: Reconcile interrupts in C powerpc/32: Entry cpu time accounting in C powerpc/32: Handle bookE debugging in C in exception entry powerpc/32: Use fast instruction to set MSR RI in exception prolog on 8xx powerpc/32: Remove ksp_limit powerpc/32: Always enable data translation in exception prolog powerpc/32: Tag DAR in EXCEPTION_PROLOG_2 for the 8xx powerpc/32: Enable instruction translation at the same time as data translation powerpc/32: Statically initialise first emergency context powerpc/32: Add vmap_stack_overflow label inside the macro powerpc/32: Use START_EXCEPTION() as much as possible powerpc/32: Move exception prolog code into .text once MMU is back on powerpc/32: Provide a name to exception prolog continuation in virtual mode powerpc/32: Refactor booke critical registers saving powerpc/32: Perform normal function call in exception entry powerpc/32: Always save non volatile registers on exception entry powerpc/32: Replace ASM exception exit by C exception exit from ppc64 powerpc/32: Set regs parameter in r3 in transfer_to_handler powerpc/32: Remove handle_page_fault() powerpc/32: Save trap number on stack in exception prolog powerpc/32: Add a prepare_transfer_to_handler macro for exception prologs powerpc/32: Only restore non volatile registers when required powerpc/32: Dismantle EXC_XFER_STD/LITE/TEMPLATE powerpc/32: Remove the xfer parameter in EXCEPTION() macro powerpc/32: Refactor saving of volatile registers in exception prologs powerpc/32: Save remaining registers in exception prolog powerpc/32: Set current->thread.regs in C interrupt entry powerpc/32: Return directly from power_save_ppc32_restore() powerpc/32: Only use prepare_transfer_to_handler function on book3s/32 and e500 powerpc/32s: Move KUEP locking/unlocking in C powerpc/64s: Make kuap_check_amr() and kuap_get_and_check_amr() generic powerpc/32s: Create C version of kuap save/restore/check helpers powerpc/8xx: Create C version of kuap save/restore/check helpers powerpc/32: Manage KUAP in C arch/powerpc/include/asm/book3s/32/kup.h | 126 ++- arch/powerpc/include/asm/book3s/64/kup.h | 24 +- arch/powerpc/include/asm/interrupt.h | 21 + arch/powerpc/include/asm/kup.h | 37 +- arch/powerpc/include/asm/nohash/32/kup-8xx.h | 58 +- arch/powerpc/include/asm/ppc_asm.h | 10 - arch/powerpc/include/asm/processor.h | 6 +- arch/powerpc/include/asm/ptrace.h | 13 +- arch/powerpc/kernel/asm-offsets.c | 4 - arch/powerpc/kernel/entry_32.S | 810 ++++--------------- arch/powerpc/kernel/fpu.S | 2 - arch/powerpc/kernel/head_32.h | 197 ++--- arch/powerpc/kernel/head_40x.S | 271 ++++--- arch/powerpc/kernel/head_44x.S | 10 +- arch/powerpc/kernel/head_8xx.S | 151 ++-- arch/powerpc/kernel/head_book3s_32.S | 239 +++--- arch/powerpc/kernel/head_booke.h | 188 +++-- arch/powerpc/kernel/head_fsl_booke.S | 64 +- arch/powerpc/kernel/idle_6xx.S | 14 +- arch/powerpc/kernel/idle_e500.S | 14 +- arch/powerpc/kernel/interrupt.c | 35 +- arch/powerpc/kernel/misc_32.S | 14 - arch/powerpc/kernel/process.c | 6 +- arch/powerpc/kernel/setup_32.c | 2 +- arch/powerpc/kernel/traps.c | 9 - arch/powerpc/kernel/vector.S | 2 - arch/powerpc/lib/sstep.c | 9 - arch/powerpc/mm/book3s32/Makefile | 1 + arch/powerpc/mm/book3s32/hash_low.S | 14 - arch/powerpc/mm/book3s32/kuep.c | 38 + arch/powerpc/mm/fault.c | 4 +- 31 files changed, 875 insertions(+), 1518 deletions(-) create mode 100644 arch/powerpc/mm/book3s32/kuep.c -- 2.25.0