s390: switch to saner kernel_execve() semantics
authorAl Viro <viro@zeniv.linux.org.uk>
Thu, 11 Oct 2012 19:30:14 +0000 (15:30 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 29 Oct 2012 14:54:37 +0000 (10:54 -0400)
Acked-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/s390/Kconfig
arch/s390/include/asm/unistd.h
arch/s390/kernel/entry.S
arch/s390/kernel/entry64.S

index 3f3d9ca7a5b68fefdb333818fe6189d8c6cbf3ae..3cdc0f1978ada13e1bef8042ae427af5166c8324 100644 (file)
@@ -136,6 +136,7 @@ config S390
        select KTIME_SCALAR if 32BIT
        select HAVE_ARCH_SECCOMP_FILTER
        select GENERIC_KERNEL_THREAD
+       select GENERIC_KERNEL_EXECVE
        select HAVE_MOD_ARCH_SPECIFIC
        select MODULES_USE_ELF_RELA
 
index bbbae41fa9a555dd587831a6c7e85a8a996d963c..ccbcab7742cdfb15502d0de1337a3d752be0b21f 100644 (file)
@@ -54,7 +54,6 @@
 #   define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND
 # endif
 #define __ARCH_WANT_SYS_EXECVE
-#define __ARCH_WANT_KERNEL_EXECVE
 
 /*
  * "Conditional" syscalls
index ef46f66bc0d6bdf0caa0dc4ecaae4225f3d3b1ef..aa8f2ba6289b2da57b409cbaec0a3a596206001a 100644 (file)
@@ -330,40 +330,18 @@ ENTRY(ret_from_fork)
        la      %r11,STACK_FRAME_OVERHEAD(%r15)
        l       %r12,__LC_THREAD_INFO
        l       %r13,__LC_SVC_NEW_PSW+4
-       tm      __PT_PSW+1(%r11),0x01   # forking a kernel thread ?
-       je      1f
        l       %r1,BASED(.Lschedule_tail)
        basr    %r14,%r1                # call schedule_tail
        TRACE_IRQS_ON
        ssm     __LC_SVC_NEW_PSW        # reenable interrupts
-       j       sysc_tracenogo
-
-1:     # it's a kernel thread
-       st      %r15,__PT_R15(%r11)     # store stack pointer for new kthread
-       l       %r1,BASED(.Lschedule_tail)
-       basr    %r14,%r1                # call schedule_tail
-       TRACE_IRQS_ON
-       ssm     __LC_SVC_NEW_PSW        # reenable interrupts
-       lm      %r9,%r11,__PT_R9(%r11)  # load gprs
+       tm      __PT_PSW+1(%r11),0x01   # forking a kernel thread ?
+       jne     sysc_tracenogo
+       # it's a kernel thread
+       lm      %r9,%r10,__PT_R9(%r11)  # load gprs
 ENTRY(kernel_thread_starter)
        la      %r2,0(%r10)
        basr    %r14,%r9
-       la      %r2,0
-       br      %r11                    # do_exit
-
-#
-# kernel_execve function needs to deal with pt_regs that is not
-# at the usual place
-#
-ENTRY(ret_from_kernel_execve)
-       ssm     __LC_PGM_NEW_PSW        # disable I/O and ext. interrupts
-       lr      %r15,%r2
-       lr      %r11,%r2
-       ahi     %r15,-STACK_FRAME_OVERHEAD
-       xc      __SF_BACKCHAIN(4,%r15),__SF_BACKCHAIN(%r15)
-       l       %r12,__LC_THREAD_INFO
-       ssm     __LC_SVC_NEW_PSW        # reenable interrupts
-       j       sysc_return
+       j       sysc_tracenogo
 
 /*
  * Program check handler routine
index 07d8de353984da0fd8c8792348cebba214391c0c..499e95e90f38d9d785609a3c0ed2d1e41a5c8f15 100644 (file)
@@ -352,33 +352,17 @@ sysc_tracenogo:
 ENTRY(ret_from_fork)
        la      %r11,STACK_FRAME_OVERHEAD(%r15)
        lg      %r12,__LC_THREAD_INFO
-       tm      __PT_PSW+1(%r11),0x01   # forking a kernel thread ?
-       je      1f
        brasl   %r14,schedule_tail
        TRACE_IRQS_ON
        ssm     __LC_SVC_NEW_PSW        # reenable interrupts
-       j       sysc_tracenogo
-1:     # it's a kernel thread
-       stg     %r15,__PT_R15(%r11)     # store stack pointer for new kthread
-       brasl   %r14,schedule_tail
-       TRACE_IRQS_ON
-       ssm     __LC_SVC_NEW_PSW        # reenable interrupts
-       lmg     %r9,%r11,__PT_R9(%r11)  # load gprs
+       tm      __PT_PSW+1(%r11),0x01   # forking a kernel thread ?
+       jne     sysc_tracenogo
+       # it's a kernel thread
+       lmg     %r9,%r10,__PT_R9(%r11)  # load gprs
 ENTRY(kernel_thread_starter)
        la      %r2,0(%r10)
        basr    %r14,%r9
-       la      %r2,0
-       br      %r11                    # do_exit
-
-ENTRY(ret_from_kernel_execve)
-       ssm     __LC_PGM_NEW_PSW        # disable I/O and ext. interrupts
-       lgr     %r15,%r2
-       lgr     %r11,%r2
-       aghi    %r15,-STACK_FRAME_OVERHEAD
-       xc      __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
-       lg      %r12,__LC_THREAD_INFO
-       ssm     __LC_SVC_NEW_PSW        # reenable interrupts
-       j       sysc_return
+       j       sysc_tracenogo
 
 /*
  * Program check handler routine