This series implements C syscall entry/exit for PPC32. It reuses the work already done for PPC64.
This series is based on Nick's v6 series "powerpc: interrupt wrappers". Patch 1 is a bug fix submitted separately but this series depends on it. Patches 2-4 are an extract from the series "powerpc/32: Reduce head complexity and re-activate MMU earlier". The changes here are limited to system calls. That series will be respined to only contain exception related changes and the syscall changes will remain in this series. Patches 5-16 are preparatory changes. Patch 17 is THE patch that changes to C syscall entry/exit Patches 18-23 are optimisations. In terms on performance we have the following number of cycles on an 8xx running null_syscall benchmark: - mainline: 296 cycles - after patch 4: 283 cycles - after patch 16: 304 cycles - after patch 17: 348 cycles - at the end of the series: 320 cycles So in summary, we have a degradation of performance of 8% on null_syscall. I think it is not a big degradation, it is worth it. v4 is the first mature version. Christophe Leroy (23): powerpc/32s: Add missing call to kuep_lock on syscall entry powerpc/32: Always enable data translation on syscall entry powerpc/32: On syscall entry, enable instruction translation at the same time as data powerpc/32: Reorder instructions to avoid using CTR in syscall entry powerpc/64s: Make kuap_check_amr() and kuap_get_and_check_amr() generic powerpc/32s: Create C version of kuap_user/kernel_restore() and friends powerpc/8xx: Create C version of kuap_user/kernel_restore() and friends powerpc/irq: Add helper to set regs->softe powerpc/irq: Rework helpers that manipulate MSR[EE/RI] powerpc/irq: Add stub irq_soft_mask_return() for PPC32 powerpc/syscall: Rename syscall_64.c into syscall.c powerpc/syscall: Make syscall.c buildable on PPC32 powerpc/syscall: Use is_compat_task() powerpc/syscall: Save r3 in regs->orig_r3 powerpc/syscall: Change condition to check MSR_RI powerpc/32: Always save non volatile GPRs at syscall entry powerpc/syscall: implement system call entry/exit logic in C for PPC32 powerpc/32: Remove verification of MSR_PR on syscall in the ASM entry powerpc/syscall: Avoid stack frame in likely part of system_call_exception() powerpc/syscall: Do not check unsupported scv vector on PPC32 powerpc/syscall: Remove FULL_REGS verification in system_call_exception powerpc/syscall: Optimise checks in beginning of system_call_exception() powerpc/syscall: Avoid storing 'current' in another pointer arch/powerpc/include/asm/book3s/32/kup.h | 33 ++ arch/powerpc/include/asm/book3s/64/kup.h | 24 +- arch/powerpc/include/asm/hw_irq.h | 91 ++++-- arch/powerpc/include/asm/kup.h | 9 +- arch/powerpc/include/asm/nohash/32/kup-8xx.h | 27 ++ arch/powerpc/include/asm/reg.h | 1 + arch/powerpc/kernel/Makefile | 4 +- arch/powerpc/kernel/entry_32.S | 305 ++---------------- arch/powerpc/kernel/entry_64.S | 1 - arch/powerpc/kernel/head_32.h | 76 +---- arch/powerpc/kernel/head_booke.h | 27 +- .../kernel/{syscall_64.c => syscall.c} | 57 ++-- arch/powerpc/kernel/syscalls/syscall.tbl | 20 +- 13 files changed, 225 insertions(+), 450 deletions(-) rename arch/powerpc/kernel/{syscall_64.c => syscall.c} (90%) -- 2.25.0