s390: convert to generic entry
authorSven Schnelle <svens@linux.ibm.com>
Sat, 21 Nov 2020 10:14:56 +0000 (11:14 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Tue, 19 Jan 2021 11:29:26 +0000 (12:29 +0100)
commit56e62a73702836017564eaacd5212e4d0fa1c01d
treef99a6cb9175ddddc37f36ad538555fbb5c606a6c
parentac94a2911e84a7b3d29d725f8f43b07db1c916f2
s390: convert to generic entry

This patch converts s390 to use the generic entry infrastructure from
kernel/entry/*.

There are a few special things on s390:

- PIF_PER_TRAP is moved to TIF_PER_TRAP as the generic code doesn't
  know about our PIF flags in exit_to_user_mode_loop().

- The old code had several ways to restart syscalls:

  a) PIF_SYSCALL_RESTART, which was only set during execve to force a
     restart after upgrading a process (usually qemu-kvm) to pgste page
     table extensions.

  b) PIF_SYSCALL, which is set by do_signal() to indicate that the
     current syscall should be restarted. This is changed so that
     do_signal() now also uses PIF_SYSCALL_RESTART. Continuing to use
     PIF_SYSCALL doesn't work with the generic code, and changing it
     to PIF_SYSCALL_RESTART makes PIF_SYSCALL and PIF_SYSCALL_RESTART
     more unique.

- On s390 calling sys_sigreturn or sys_rt_sigreturn is implemented by
executing a svc instruction on the process stack which causes a fault.
While handling that fault the fault code sets PIF_SYSCALL to hand over
processing to the syscall code on exit to usermode.

The patch introduces PIF_SYSCALL_RET_SET, which is set if ptrace sets
a return value for a syscall. The s390x ptrace ABI uses r2 both for the
syscall number and return value, so ptrace cannot set the syscall number +
return value at the same time. The flag makes handling that a bit easier.
do_syscall() will just skip executing the syscall if PIF_SYSCALL_RET_SET
is set.

CONFIG_DEBUG_ASCE was removd in favour of the generic CONFIG_DEBUG_ENTRY.
CR1/7/13 will be checked both on kernel entry and exit to contain the
correct asces.

Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
40 files changed:
arch/s390/Kconfig
arch/s390/Kconfig.debug
arch/s390/configs/debug_defconfig
arch/s390/configs/defconfig
arch/s390/include/asm/cputime.h
arch/s390/include/asm/elf.h
arch/s390/include/asm/entry-common.h [new file with mode: 0644]
arch/s390/include/asm/fpu/api.h
arch/s390/include/asm/idle.h
arch/s390/include/asm/lowcore.h
arch/s390/include/asm/nmi.h
arch/s390/include/asm/processor.h
arch/s390/include/asm/ptrace.h
arch/s390/include/asm/syscall.h
arch/s390/include/asm/thread_info.h
arch/s390/include/asm/uaccess.h
arch/s390/include/asm/vtime.h
arch/s390/include/uapi/asm/ptrace.h
arch/s390/kernel/Makefile
arch/s390/kernel/asm-offsets.c
arch/s390/kernel/compat_signal.c
arch/s390/kernel/entry.S
arch/s390/kernel/entry.h
arch/s390/kernel/fpu.c
arch/s390/kernel/idle.c
arch/s390/kernel/irq.c
arch/s390/kernel/nmi.c
arch/s390/kernel/process.c
arch/s390/kernel/ptrace.c
arch/s390/kernel/setup.c
arch/s390/kernel/signal.c
arch/s390/kernel/smp.c
arch/s390/kernel/sys_s390.c [deleted file]
arch/s390/kernel/syscall.c [new file with mode: 0644]
arch/s390/kernel/traps.c
arch/s390/kernel/uprobes.c
arch/s390/kvm/kvm-s390.c
arch/s390/kvm/vsie.c
arch/s390/lib/uaccess.c
arch/s390/mm/fault.c