linux_dsm_epyc7002/arch/powerpc
Nicholas Piggin 965dd3ad30 powerpc/64/syscall: Remove non-volatile GPR save optimisation
powerpc has an optimisation where interrupts avoid saving the
non-volatile (or callee saved) registers to the interrupt stack frame
if they are not required.

Two problems with this are that an interrupt does not always know
whether it will need non-volatiles; and if it does need them, they can
only be saved from the entry-scoped asm code (because we don't control
what the C compiler does with these registers).

system calls are the most difficult: some system calls always require
all registers (e.g., fork, to copy regs into the child). Sometimes
registers are only required under certain conditions (e.g., tracing,
signal delivery). These cases require ugly logic in the call
chains (e.g., ppc_fork), and require a lot of logic to be implemented
in asm.

So remove the optimisation for system calls, and always save NVGPRs on
entry. Modern high performance CPUs are not so sensitive, because the
stores are dense in cache and can be hidden by other expensive work in
the syscall path -- the null syscall selftests benchmark on POWER9 is
not slowed (124.40ns before and 123.64ns after, i.e., within the
noise).

Other interrupts retain the NVGPR optimisation for now.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200225173541.1549955-24-npiggin@gmail.com
2020-04-01 13:42:13 +11:00
..
boot powerpc/boot: Delete unneeded .globl _zimage_start 2020-03-27 15:50:06 +11:00
configs virtio: fixes, cleanups 2020-02-07 12:26:34 -08:00
crypto crypto: remove CRYPTO_TFM_RES_BAD_KEY_LEN 2020-01-09 11:30:53 +08:00
include powerpc/64s/exception: Avoid touching the stack in hdecrementer 2020-04-01 13:42:12 +11:00
kernel powerpc/64/syscall: Remove non-volatile GPR save optimisation 2020-04-01 13:42:13 +11:00
kexec powerpc: Avoid clang warnings around setjmp and longjmp 2019-11-25 21:45:43 +11:00
kvm powerpc/64s/exception: Move KVM test to common code 2020-04-01 13:42:11 +11:00
lib powerpc/sstep: Fix DS operand in ld encoding to appropriate value 2020-03-25 12:06:46 +11:00
math-emu treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
mm powerpc/32s: reorder Linux PTE bits to better match Hash PTE bits. 2020-03-25 12:09:27 +11:00
net treewide: Use sizeof_field() macro 2019-12-09 10:36:44 -08:00
oprofile powerpc updates for 5.6 2020-02-04 13:06:46 +00:00
perf powerpc/8xx: Use alternative scratch registers in DTLB miss handler 2020-01-27 22:36:16 +11:00
platforms powerpc/pseries: Handle UE event for memcpy_mcsafe 2020-03-27 14:59:35 +11:00
purgatory treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 441 2019-06-05 17:37:17 +02:00
sysdev powerpc/xive: Add a debugfs file to dump internal XIVE state 2020-03-27 00:20:38 +11:00
tools powerpc: Do not consider weak unresolved symbol relocations as bad 2020-01-31 20:17:22 +11:00
xmon powerpc/xmon: Add ASCII dump to d1,d2,d4,d8 commands. 2020-03-27 00:49:44 +11:00
Kbuild powerpc/kexec: Move kexec files into a dedicated subdir. 2019-11-21 15:41:34 +11:00
Kconfig powerpc updates for 5.6 2020-02-04 13:06:46 +00:00
Kconfig.debug powerpc/ptdump: Only enable PPC_CHECK_WX with STRICT_KERNEL_RWX 2020-01-23 21:31:13 +11:00
Makefile powerpc/Makefile: Mark phony targets as PHONY 2020-03-04 22:44:27 +11:00
Makefile.postlink powerpc: Do not consider weak unresolved symbol relocations as bad 2020-01-31 20:17:22 +11:00