aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel/entry64.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390/kernel/entry64.S')
-rw-r--r--arch/s390/kernel/entry64.S16
1 files changed, 13 insertions, 3 deletions
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S
index 1f776f2edda..39c84e65f74 100644
--- a/arch/s390/kernel/entry64.S
+++ b/arch/s390/kernel/entry64.S
@@ -352,12 +352,22 @@ ENTRY(ret_from_fork)
352 la %r11,STACK_FRAME_OVERHEAD(%r15) 352 la %r11,STACK_FRAME_OVERHEAD(%r15)
353 lg %r12,__LC_THREAD_INFO 353 lg %r12,__LC_THREAD_INFO
354 tm __PT_PSW+1(%r11),0x01 # forking a kernel thread ? 354 tm __PT_PSW+1(%r11),0x01 # forking a kernel thread ?
355 jo 0f 355 je 1f
356 stg %r15,__PT_R15(%r11) # store stack pointer for new kthread 356 brasl %r14,schedule_tail
3570: brasl %r14,schedule_tail
358 TRACE_IRQS_ON 357 TRACE_IRQS_ON
359 ssm __LC_SVC_NEW_PSW # reenable interrupts 358 ssm __LC_SVC_NEW_PSW # reenable interrupts
360 j sysc_tracenogo 359 j sysc_tracenogo
3601: # it's a kernel thread
361 stg %r15,__PT_R15(%r11) # store stack pointer for new kthread
362 brasl %r14,schedule_tail
363 TRACE_IRQS_ON
364 ssm __LC_SVC_NEW_PSW # reenable interrupts
365 lmg %r9,%r11,__PT_R9(%r11) # load gprs
366ENTRY(kernel_thread_starter)
367 la %r2,0(%r10)
368 basr %r14,%r9
369 la %r2,0
370 br %r11 # do_exit
361 371
362# 372#
363# kernel_execve function needs to deal with pt_regs that is not 373# kernel_execve function needs to deal with pt_regs that is not