Re: [PATCH v5 00/22] powerpc/32: Implement C syscall entry/exit
On Mon, 8 Feb 2021 15:10:19 + (UTC), Christophe Leroy wrote: > 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 > > [...] Patches 1-15 and 21 applied to powerpc/next. [01/22] powerpc/32s: Add missing call to kuep_lock on syscall entry https://git.kernel.org/powerpc/c/57fdfbce89137ae85cd5cef48be168040a47dd13 [02/22] powerpc/32: Always enable data translation on syscall entry https://git.kernel.org/powerpc/c/eca2411040c1ee15b8882c6427fb4eb5a48ada69 [03/22] powerpc/32: On syscall entry, enable instruction translation at the same time as data https://git.kernel.org/powerpc/c/76249ddc27080b6b835a89cedcc4185b3b5a6b23 [04/22] powerpc/32: Reorder instructions to avoid using CTR in syscall entry https://git.kernel.org/powerpc/c/2c59e5104821c5720e88bafa9e522f8bea9ce8fa [05/22] powerpc/irq: Add helper to set regs->softe https://git.kernel.org/powerpc/c/fb5608fd117a8b48752d2b5a7e70847c1ed33d33 [06/22] powerpc/irq: Rework helpers that manipulate MSR[EE/RI] https://git.kernel.org/powerpc/c/08353779f2889305f64e04de3e46ed59ed60f859 [07/22] powerpc/irq: Add stub irq_soft_mask_return() for PPC32 https://git.kernel.org/powerpc/c/6650c4782d5788346a25a4f698880d124f2699a0 [08/22] powerpc/syscall: Rename syscall_64.c into interrupt.c https://git.kernel.org/powerpc/c/ab1a517d55b01b54ba70f5d54f926f5ab4b18339 [09/22] powerpc/syscall: Make interrupt.c buildable on PPC32 https://git.kernel.org/powerpc/c/344bb20b159dd0996e521c0d4c131a6ae10c322a [10/22] powerpc/syscall: Use is_compat_task() https://git.kernel.org/powerpc/c/72b7a9e56b25babfe4c90bf3ce88285c7fb62ab9 [11/22] powerpc/syscall: Save r3 in regs->orig_r3 https://git.kernel.org/powerpc/c/8875f47b7681aa4e4484a9b612577b044725f839 [12/22] powerpc/syscall: Change condition to check MSR_RI https://git.kernel.org/powerpc/c/c01b916658150e98f00a4981750c37a3224c8735 [13/22] powerpc/32: Always save non volatile GPRs at syscall entry https://git.kernel.org/powerpc/c/fbcee2ebe8edbb6a93316f0a189ae7fcfaa7094f [14/22] powerpc/syscall: implement system call entry/exit logic in C for PPC32 https://git.kernel.org/powerpc/c/6f76a01173ccaa363739f913394d4e138d92d718 [15/22] powerpc/32: Remove verification of MSR_PR on syscall in the ASM entry https://git.kernel.org/powerpc/c/4d67facbcbdb3d9e3c9cb82e4ec47fc63d298dd8 [21/22] powerpc/32: Remove the counter in global_dbcr0 https://git.kernel.org/powerpc/c/eb595eca74067b78d36fb188b555e30f28686fc7 cheers
Re: [PATCH v5 00/22] powerpc/32: Implement C syscall entry/exit
Excerpts from Christophe Leroy's message of February 9, 2021 1:10 am: > 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. I guess it's 13% from 283. But it's very nice to use the shared C code. There might be a few more percent speedup in there we can find later. Thanks, Nick
[PATCH v5 00/22] powerpc/32: Implement C syscall entry/exit
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