This series implements C syscall entry/exit for PPC32. It reuses the work already done for PPC64.
This series is based on today's merge-test (b6f72fc05389e3fc694bf5a5fa1bbd33f61879e0) 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 was the first mature version. v5: - Comments from Nick - Converted booke DBCR0 handling in C - Removed convertion of KUAP restore in C (will be done as part of interrupt entry/exit porting to C) - Added a few more changes in preparatory patches to prepare for interrupt entry/exit in C which will follow Christophe Leroy (22): 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/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 interrupt.c powerpc/syscall: Make interrupt.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 powerpc/32: Remove the counter in global_dbcr0 powerpc/32: Handle bookE debugging in C in syscall entry/exit arch/powerpc/include/asm/hw_irq.h | 91 +++-- arch/powerpc/include/asm/ptrace.h | 5 + arch/powerpc/include/asm/reg.h | 1 + arch/powerpc/include/asm/reg_booke.h | 3 + arch/powerpc/kernel/Makefile | 4 +- arch/powerpc/kernel/entry_32.S | 321 ++---------------- arch/powerpc/kernel/entry_64.S | 2 - arch/powerpc/kernel/head_32.h | 96 +----- arch/powerpc/kernel/head_booke.h | 51 +-- .../kernel/{syscall_64.c => interrupt.c} | 120 +++++-- arch/powerpc/kernel/syscalls/syscall.tbl | 20 +- 11 files changed, 218 insertions(+), 496 deletions(-) rename arch/powerpc/kernel/{syscall_64.c => interrupt.c} (80%) -- 2.25.0