All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rohan McLure <rmclure@linux.ibm.com>
To: linuxppc-dev <linuxppc-dev@lists.ozlabs.org>
Cc: Nicholas Piggin <npiggin@gmail.com>,
	Andrew Donnellan <ajd@linux.ibm.com>
Subject: Re: [PATCH v4 00/20] powerpc: Syscall wrapper and register clearing
Date: Mon, 12 Sep 2022 10:55:42 +1000	[thread overview]
Message-ID: <0417F3C5-189E-4E3A-B4A9-9B3C597CC93A@linux.ibm.com> (raw)
In-Reply-To: <20220824020548.62625-1-rmclure@linux.ibm.com>

Any comments for this revision? Hopefully these revisions address 32-bit and embedded systems appropriately.

Thanks,
Rohan

> On 24 Aug 2022, at 12:05 pm, Rohan McLure <rmclure@linux.ibm.com> wrote:
> 
> V3 available here:
> 
> Link: https://lore.kernel.org/all/4C3A8815-67FF-41EB-A703-981920CA1201@linux.ibm.com/T/
> 
> Implement a syscall wrapper, causing arguments to handlers to be passed
> via a struct pt_regs on the stack. The syscall wrapper is implemented
> for all platforms other than the Cell processor, from which SPUs expect
> the ability to directly call syscall handler symbols with the regular
> in-register calling convention.
> 
> Adopting syscall wrappers requires redefinition of architecture-specific
> syscalls and compatibility syscalls to use the SYSCALL_DEFINE and
> COMPAT_SYSCALL_DEFINE macros, as well as removal of direct-references to
> the emitted syscall-handler symbols from within the kernel. This work
> lead to the following modernisations of powerpc's syscall handlers:
> 
> - Replace syscall 82 semantics with sys_old_select and remove
>   ppc_select handler, which features direct call to both sys_old_select
>   and sys_select.
> - Use a generic fallocate compatibility syscall
> 
> Replace asm implementation of syscall table with C implementation for
> more compile-time checks.
> 
> Many compatibility syscalls are candidates to be removed in favour of
> generically defined handlers, but exhibit different parameter orderings
> and numberings due to 32-bit ABI support for 64-bit parameters. The
> parameter reorderings are however consistent with arm. A future patch
> series will serve to modernise syscalls by providing generic
> implementations featuring these reorderings.
> 
> The design of this syscall is very similar to the s390, x86 and arm64
> implementations. See also Commit 4378a7d4be30 (arm64: implement syscall wrappers).
> The motivation for this change is that it allows for the clearing of
> register state when entering the kernel via through interrupt handlers
> on 64-bit servers. This serves to reduce the influence of values in
> registers carried over from the interrupted process, e.g. syscall
> parameters from user space, or user state at the site of a pagefault.
> All values in registers are saved and zeroized at the entry to an
> interrupt handler and restored afterward. While this may sound like a
> heavy-weight mitigation, many gprs are already saved and restored on
> handling of an interrupt, and the mmap_bench benchmark on Power 9 guest,
> repeatedly invoking the pagefault handler suggests at most ~0.8%
> regression in performance. Realistic workloads are not constantly
> producing interrupts, and so this does not indicate realistic slowdown.
> 
> Using wrapped syscalls yields to a performance improvement of ~5.6% on
> the null_syscall benchmark on pseries guests, by removing the need for
> system_call_exception to allocate its own stack frame. This amortises
> the additional costs of saving and restoring non-volatile registers
> (register clearing is cheap on super scalar platforms), and so the
> final mitigation actually yields a net performance improvement of ~0.6%
> on the null_syscall benchmark.
> 
> Patch Changelog:
> 
> - Fix instances where NULLIFY_GPRS were still present
> - Minimise unrecoverable windows in entry_32.S between SRR0/1 restores
>   and RFI
> - Remove all references to syscall symbols prior to introducing syscall
>   wrapper.
> - Remove unnecessary duplication of syscall handlers with sys_... and
>   powerpc_sys_... symbols.
> - Clear non-volatile registers on Book3E systems, as some of these
>   systems feature hardware speculation, and we already unconditionally
>   restore NVGPRS.
> 
> Rohan McLure (20):
>  powerpc: Remove asmlinkage from syscall handler definitions
>  powerpc: Use generic fallocate compatibility syscall
>  powerpc/32: Remove powerpc select specialisation
>  powerpc: Provide do_ppc64_personality helper
>  powerpc: Remove direct call to personality syscall handler
>  powerpc: Remove direct call to mmap2 syscall handlers
>  powerpc: Adopt SYSCALL_DEFINE for arch-specific syscall handlers
>  powerpc: Include all arch-specific syscall prototypes
>  powerpc: Enable compile-time check for syscall handlers
>  powerpc: Use common syscall handler type
>  powerpc: Add ZEROIZE_GPRS macros for register clears
>  Revert "powerpc/syscall: Save r3 in regs->orig_r3"
>  powerpc: Provide syscall wrapper
>  powerpc/64s: Clear/restore caller gprs in syscall interrupt/return
>  powerpc/64s: Use {ZEROIZE,SAVE,REST}_GPRS macros in sc, scv 0 handlers
>  powerpc/32: Clarify interrupt restores with REST_GPR macro in
>    entry_32.S
>  powerpc/64e: Clarify register saves and clears with
>    {SAVE,ZEROIZE}_GPRS
>  powerpc/64s: Fix comment on interrupt handler prologue
>  powerpc/64s: Clear gprs on interrupt routine entry in Book3S
>  powerpc/64e: Clear gprs on interrupt routine entry
> 
> arch/powerpc/Kconfig                         |   1 +
> arch/powerpc/include/asm/compat.h            |   5 +
> arch/powerpc/include/asm/interrupt.h         |   3 +-
> arch/powerpc/include/asm/ppc_asm.h           |  22 +++
> arch/powerpc/include/asm/syscall.h           |  11 +-
> arch/powerpc/include/asm/syscall_wrapper.h   |  84 +++++++++++
> arch/powerpc/include/asm/syscalls.h          | 128 +++++++++++++----
> .../ppc32.h => include/asm/syscalls_32.h}    |   0
> arch/powerpc/include/asm/unistd.h            |   1 +
> arch/powerpc/kernel/entry_32.S               |  40 +++---
> arch/powerpc/kernel/exceptions-64e.S         |  31 ++--
> arch/powerpc/kernel/exceptions-64s.S         |  25 ++--
> arch/powerpc/kernel/interrupt_64.S           |  92 +++++-------
> arch/powerpc/kernel/signal_32.c              |   2 +-
> arch/powerpc/kernel/sys_ppc32.c              |  54 ++++---
> arch/powerpc/kernel/syscall.c                |  32 ++---
> arch/powerpc/kernel/syscalls.c               |  51 ++++---
> arch/powerpc/kernel/syscalls/syscall.tbl     |  24 ++--
> arch/powerpc/kernel/{systbl.S => systbl.c}   |  29 ++--
> arch/powerpc/kernel/vdso.c                   |   6 +-
> arch/powerpc/perf/callchain_32.c             |   2 +-
> arch/powerpc/platforms/cell/spu_callbacks.c  |   6 +-
> .../arch/powerpc/entry/syscalls/syscall.tbl  |  24 ++--
> 23 files changed, 415 insertions(+), 258 deletions(-)
> create mode 100644 arch/powerpc/include/asm/syscall_wrapper.h
> rename arch/powerpc/{kernel/ppc32.h => include/asm/syscalls_32.h} (100%)
> rename arch/powerpc/kernel/{systbl.S => systbl.c} (55%)
> 
> -- 
> 2.34.1
> 


      parent reply	other threads:[~2022-09-12  0:56 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-24  2:05 [PATCH v4 00/20] powerpc: Syscall wrapper and register clearing Rohan McLure
2022-08-24  2:05 ` [PATCH v4 01/20] powerpc: Remove asmlinkage from syscall handler definitions Rohan McLure
2022-08-25  7:04   ` Andrew Donnellan
2022-09-12  8:20   ` Nicholas Piggin
2022-08-24  2:05 ` [PATCH v4 02/20] powerpc: Use generic fallocate compatibility syscall Rohan McLure
2022-09-12  8:38   ` Nicholas Piggin
2022-09-12  9:57     ` Arnd Bergmann
2022-09-12 11:00       ` Christophe Leroy
2022-09-12 11:07         ` Arnd Bergmann
2022-08-24  2:05 ` [PATCH v4 03/20] powerpc/32: Remove powerpc select specialisation Rohan McLure
2022-09-12  9:03   ` Nicholas Piggin
2022-09-15  4:36     ` Rohan McLure
2022-08-24  2:05 ` [PATCH v4 04/20] powerpc: Provide do_ppc64_personality helper Rohan McLure
2022-09-12  9:26   ` Nicholas Piggin
2022-08-24  2:05 ` [PATCH v4 05/20] powerpc: Remove direct call to personality syscall handler Rohan McLure
2022-09-12  9:42   ` Nicholas Piggin
2022-08-24  2:05 ` [PATCH v4 06/20] powerpc: Remove direct call to mmap2 syscall handlers Rohan McLure
2022-09-12  9:47   ` Nicholas Piggin
2022-09-15  5:06     ` Rohan McLure
2022-08-24  2:05 ` [PATCH v4 07/20] powerpc: Adopt SYSCALL_DEFINE for arch-specific " Rohan McLure
2022-09-12 10:04   ` Nicholas Piggin
2022-08-24  2:05 ` [PATCH v4 08/20] powerpc: Include all arch-specific syscall prototypes Rohan McLure
2022-09-12 10:33   ` Nicholas Piggin
2022-09-13  7:09     ` Rohan McLure
2022-08-24  2:05 ` [PATCH v4 09/20] powerpc: Enable compile-time check for syscall handlers Rohan McLure
2022-09-12 10:42   ` Nicholas Piggin
2022-09-13  2:29     ` Michael Ellerman
2022-08-24  2:05 ` [PATCH v4 10/20] powerpc: Use common syscall handler type Rohan McLure
2022-09-12 10:56   ` Nicholas Piggin
2022-09-15  5:45     ` Rohan McLure
2022-09-16  1:02       ` Nicholas Piggin
2022-08-24  2:05 ` [PATCH v4 11/20] powerpc: Add ZEROIZE_GPRS macros for register clears Rohan McLure
2022-09-12 11:09   ` Nicholas Piggin
2022-09-15  5:47     ` Rohan McLure
2022-08-24  2:05 ` [PATCH v4 12/20] Revert "powerpc/syscall: Save r3 in regs->orig_r3" Rohan McLure
2022-09-12 11:14   ` Nicholas Piggin
2022-08-24  2:05 ` [PATCH v4 13/20] powerpc: Provide syscall wrapper Rohan McLure
2022-09-12 11:26   ` Nicholas Piggin
2022-08-24  2:05 ` [PATCH v4 14/20] powerpc/64s: Clear/restore caller gprs in syscall interrupt/return Rohan McLure
2022-09-12 11:47   ` Nicholas Piggin
2022-08-24  2:05 ` [PATCH v4 15/20] powerpc/64s: Use {ZEROIZE,SAVE,REST}_GPRS macros in sc, scv 0 handlers Rohan McLure
2022-09-12 11:49   ` Nicholas Piggin
2022-08-24  2:05 ` [PATCH v4 16/20] powerpc/32: Clarify interrupt restores with REST_GPR macro in entry_32.S Rohan McLure
2022-08-24  2:05 ` [PATCH v4 17/20] powerpc/64e: Clarify register saves and clears with {SAVE,ZEROIZE}_GPRS Rohan McLure
2022-09-12 12:17   ` Nicholas Piggin
2022-08-24  2:05 ` [PATCH v4 18/20] powerpc/64s: Fix comment on interrupt handler prologue Rohan McLure
2022-09-12 11:51   ` Nicholas Piggin
2022-08-24  2:05 ` [PATCH v4 19/20] powerpc/64s: Clear gprs on interrupt routine entry in Book3S Rohan McLure
2022-09-12 12:15   ` Nicholas Piggin
2022-09-15  6:55     ` Rohan McLure
2022-09-16  0:43       ` Nicholas Piggin
2022-08-24  2:05 ` [PATCH v4 20/20] powerpc/64e: Clear gprs on interrupt routine entry Rohan McLure
2022-09-12  0:55 ` Rohan McLure [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0417F3C5-189E-4E3A-B4A9-9B3C597CC93A@linux.ibm.com \
    --to=rmclure@linux.ibm.com \
    --cc=ajd@linux.ibm.com \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=npiggin@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.