]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
s390: convert to generic kernel_execve()
authorAl Viro <viro@zeniv.linux.org.uk>
Thu, 6 Sep 2012 21:08:47 +0000 (17:08 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sat, 8 Sep 2012 15:04:41 +0000 (11:04 -0400)
same situation as with alpha and arm - only massage needed

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/s390/include/asm/unistd.h
arch/s390/kernel/entry.S
arch/s390/kernel/entry64.S

index 9afacff38edc434d764ddb4979735ab7ead97d90..3c500174459a9d4d5793474729d0217b0c077f7e 100644 (file)
 #   define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND
 # endif
 #define __ARCH_WANT_SYS_EXECVE
+#define __ARCH_WANT_KERNEL_EXECVE
 
 /*
  * "Conditional" syscalls
index 6286985a103971adab9287e83df492f85f9f3c12..7a5fe9cfeb7ab5220f1b65250c777bd0935faae8 100644 (file)
@@ -343,30 +343,14 @@ ENTRY(ret_from_fork)
 # kernel_execve function needs to deal with pt_regs that is not
 # at the usual place
 #
-ENTRY(kernel_execve)
-       stm     %r12,%r15,48(%r15)
-       lr      %r14,%r15
-       l       %r13,__LC_SVC_NEW_PSW+4
-       ahi     %r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
-       st      %r14,__SF_BACKCHAIN(%r15)
-       la      %r12,STACK_FRAME_OVERHEAD(%r15)
-       xc      0(__PT_SIZE,%r12),0(%r12)
-       l       %r1,BASED(.Ldo_execve)
-       lr      %r5,%r12
-       basr    %r14,%r1                # call do_execve
-       ltr     %r2,%r2
-       je      0f
-       ahi     %r15,(STACK_FRAME_OVERHEAD + __PT_SIZE)
-       lm      %r12,%r15,48(%r15)
-       br      %r14
-       # execve succeeded.
-0:     ssm     __LC_PGM_NEW_PSW        # disable I/O and ext. interrupts
-       l       %r15,__LC_KERNEL_STACK  # load ksp
-       ahi     %r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
-       la      %r11,STACK_FRAME_OVERHEAD(%r15)
-       mvc     0(__PT_SIZE,%r11),0(%r12)       # copy pt_regs
-       l       %r12,__LC_THREAD_INFO
+ENTRY(ret_from_kernel_execve)
+       ssm     __LC_PGM_NEW_PSW        # disable I/O and ext. interrupts
+       mvc     0(__PT_SIZE,%r2),0(%r3) # copy pt_regs
+       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
 
@@ -929,7 +913,6 @@ cleanup_idle_wait:
 .Ldo_signal:           .long   do_signal
 .Ldo_notify_resume:    .long   do_notify_resume
 .Ldo_per_trap:         .long   do_per_trap
-.Ldo_execve:           .long   do_execve
 .Ljump_table:          .long   pgm_check_table
 .Lschedule:            .long   schedule
 #ifdef CONFIG_PREEMPT
index 1f776f2edda57788d2e78fbe0ab6d8186ea36d83..aca0d450b231e7239888b8e596c6a3cd394ad502 100644 (file)
@@ -359,32 +359,14 @@ ENTRY(ret_from_fork)
        ssm     __LC_SVC_NEW_PSW        # reenable interrupts
        j       sysc_tracenogo
 
-#
-# kernel_execve function needs to deal with pt_regs that is not
-# at the usual place
-#
-ENTRY(kernel_execve)
-       stmg    %r12,%r15,96(%r15)
-       lgr     %r14,%r15
-       aghi    %r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
-       stg     %r14,__SF_BACKCHAIN(%r15)
-       la      %r12,STACK_FRAME_OVERHEAD(%r15)
-       xc      0(__PT_SIZE,%r12),0(%r12)
-       lgr     %r5,%r12
-       brasl   %r14,do_execve
-       ltgfr   %r2,%r2
-       je      0f
-       aghi    %r15,(STACK_FRAME_OVERHEAD + __PT_SIZE)
-       lmg     %r12,%r15,96(%r15)
-       br      %r14
-       # execve succeeded.
-0:     ssm     __LC_PGM_NEW_PSW        # disable I/O and ext. interrupts
-       lg      %r15,__LC_KERNEL_STACK  # load ksp
-       aghi    %r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
-       la      %r11,STACK_FRAME_OVERHEAD(%r15)
-       mvc     0(__PT_SIZE,%r11),0(%r12)       # copy pt_regs
-       lg      %r12,__LC_THREAD_INFO
+ENTRY(ret_from_kernel_execve)
+       ssm     __LC_PGM_NEW_PSW        # disable I/O and ext. interrupts
+       mvc     0(__PT_SIZE,%r2),0(%r3) # copy pt_regs
+       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