On Mon, Oct 29, 2012 at 08:53:39AM +0100, Martin Schwidefsky wrote:

> Oops, sorry. I tested this weeks ago but it seems I never wrote a mail to
> indicate success. The current git kernel works just fine.

"Current git" being what?  Linus' tree?  linux-next?  signal.git#arch-s390?
FWIW, the relevant diff against mainline is below, linux-next already
contains it.

diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
index 3f3d9ca..3cdc0f1 100644
--- a/arch/s390/Kconfig
+++ b/arch/s390/Kconfig
@@ -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
 
diff --git a/arch/s390/include/asm/unistd.h b/arch/s390/include/asm/unistd.h
index bbbae41..ccbcab7 100644
--- a/arch/s390/include/asm/unistd.h
+++ b/arch/s390/include/asm/unistd.h
@@ -54,7 +54,6 @@
 #   define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND
 # endif
 #define __ARCH_WANT_SYS_EXECVE
-#define __ARCH_WANT_KERNEL_EXECVE
 
 /*
  * "Conditional" syscalls
diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
index ef46f66..aa8f2ba 100644
--- a/arch/s390/kernel/entry.S
+++ b/arch/s390/kernel/entry.S
@@ -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
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S
index 07d8de3..499e95e 100644
--- a/arch/s390/kernel/entry64.S
+++ b/arch/s390/kernel/entry64.S
@@ -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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to