[RFC PATCH v1 00/16] powerpc/32: Implement fast syscall entry

Christophe Leroy christophe.leroy at c-s.fr
Fri Feb 8 23:52:16 AEDT 2019


The purpose of this series is to implement a fast syscall entry
on ppc32.

Unlike all other exceptions which can happen at any time and
require to preserve all registers, the syscalls do not
require the preservation of volatile registers (except LR).

Syscall entries can then be optimised with lighter entry code
than the general exception handling.

In the meantime this series refactorises the exception entry on
40x/6xx/8xx as they are pretty similar, and it takes benh series
on rationalise the settings of MSR_EE at exceptions/syscall entries
as this change pretty simplies exception entries.

On a 8xx, this series improves null_syscall selftest by 17%
On a 83xx, this series improves null_syscall selftest by 12,5%

Christophe Leroy (16):
  powerpc: CONFIG_THREAD_INFO_IN_TASK series
  powerpc/32: Refactor EXCEPTION entry macros for head_8xx.S and
    head_32.S
  powerpc/32: move LOAD_MSR_KERNEL() into head_32.h and use it
  powerpc/32: make the 6xx/8xx EXC_XFER_TEMPLATE() similar to the
    40x/booke one
  powerpc/40x: Don't use SPRN_SPRG_SCRATCH2 in EXCEPTION_PROLOG
  powerpc/40x: add exception frame marker
  powerpc/40x: Split and rename NORMAL_EXCEPTION_PROLOG
  powerpc/40x: Refactor exception entry macros by using head_32.h
  powerpc/fsl_booke: ensure SPEFloatingPointException() reenables
    interrupts
  powerpc/32: enter syscall with MSR_EE inconditionaly set
  powerpc/32: Enter exceptions with MSR_EE unset
  powerpc/32: get rid of COPY_EE in exception entry
  powerpc: Fix 32-bit handling of MSR_EE on exceptions
  powerpc/32: implement fast entry for syscalls on non BOOKE
  powerpc/32: Remove MSR_PR test when returning from syscall
  powerpc/32: don't do syscall stuff in transfer_to_handler on non BOOKE

 arch/powerpc/Kconfig                           |   1 +
 arch/powerpc/Makefile                          |   7 +
 arch/powerpc/include/asm/asm-prototypes.h      |   4 +-
 arch/powerpc/include/asm/book3s/64/mmu-hash.h  |   2 +-
 arch/powerpc/include/asm/exception-64s.h       |   4 +-
 arch/powerpc/include/asm/irq.h                 |  18 +-
 arch/powerpc/include/asm/livepatch.h           |   7 +-
 arch/powerpc/include/asm/processor.h           | 105 +---------
 arch/powerpc/include/asm/ptrace.h              |   2 +-
 arch/powerpc/include/asm/reg.h                 |   2 +-
 arch/powerpc/include/asm/smp.h                 |  17 +-
 arch/powerpc/include/asm/task_size_32.h        |  21 ++
 arch/powerpc/include/asm/task_size_64.h        |  79 ++++++++
 arch/powerpc/include/asm/thread_info.h         |  19 --
 arch/powerpc/kernel/asm-offsets.c              |  12 +-
 arch/powerpc/kernel/entry_32.S                 | 261 ++++++++++++++-----------
 arch/powerpc/kernel/entry_64.S                 |  12 +-
 arch/powerpc/kernel/epapr_hcalls.S             |   5 +-
 arch/powerpc/kernel/exceptions-64e.S           |  13 +-
 arch/powerpc/kernel/exceptions-64s.S           |   2 +-
 arch/powerpc/kernel/head_32.S                  | 182 ++++-------------
 arch/powerpc/kernel/head_32.h                  | 203 +++++++++++++++++++
 arch/powerpc/kernel/head_40x.S                 | 154 ++++-----------
 arch/powerpc/kernel/head_44x.S                 |  16 +-
 arch/powerpc/kernel/head_64.S                  |   1 +
 arch/powerpc/kernel/head_8xx.S                 | 133 ++-----------
 arch/powerpc/kernel/head_booke.h               |  44 ++---
 arch/powerpc/kernel/head_fsl_booke.S           |  44 ++---
 arch/powerpc/kernel/idle_6xx.S                 |   8 +-
 arch/powerpc/kernel/idle_book3e.S              |   2 +-
 arch/powerpc/kernel/idle_e500.S                |   8 +-
 arch/powerpc/kernel/idle_power4.S              |   2 +-
 arch/powerpc/kernel/irq.c                      | 114 ++---------
 arch/powerpc/kernel/kgdb.c                     |  28 ---
 arch/powerpc/kernel/machine_kexec_64.c         |   6 +-
 arch/powerpc/kernel/misc_32.S                  |  17 +-
 arch/powerpc/kernel/process.c                  |  63 +++---
 arch/powerpc/kernel/setup-common.c             |   2 +-
 arch/powerpc/kernel/setup_32.c                 |  26 ++-
 arch/powerpc/kernel/setup_64.c                 |  51 +----
 arch/powerpc/kernel/smp.c                      |  16 +-
 arch/powerpc/kernel/stacktrace.c               |  29 ++-
 arch/powerpc/kernel/trace/ftrace_64_mprofile.S |   6 +-
 arch/powerpc/kernel/traps.c                    |   8 +
 arch/powerpc/kvm/book3s_hv_hmi.c               |   1 +
 arch/powerpc/mm/hash_low_32.S                  |  14 +-
 arch/powerpc/net/bpf_jit32.h                   |   5 +-
 arch/powerpc/sysdev/6xx-suspend.S              |   5 +-
 arch/powerpc/xmon/xmon.c                       |   2 +-
 49 files changed, 816 insertions(+), 967 deletions(-)
 create mode 100644 arch/powerpc/include/asm/task_size_32.h
 create mode 100644 arch/powerpc/include/asm/task_size_64.h
 create mode 100644 arch/powerpc/kernel/head_32.h

-- 
2.13.3



More information about the Linuxppc-dev mailing list