• Sven Schnelle's avatar
    s390: convert to generic entry · 56e62a73
    Sven Schnelle authored
    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: default avatarSven Schnelle <svens@linux.ibm.com>
    Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
    56e62a73
syscall.c 4.29 KB