aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel/entry.S
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2012-10-11 15:30:14 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2012-10-29 10:54:37 -0400
commit30dcb0996e409ee7353a8fc2fab90ad6503b0788 (patch)
treee06bc081e3c65c88ee2bdbdd2c5645e6ca834073 /arch/s390/kernel/entry.S
parentddffeb8c4d0331609ef2581d84de4d763607bd37 (diff)
s390: switch to saner kernel_execve() semantics
Acked-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/s390/kernel/entry.S')
-rw-r--r--arch/s390/kernel/entry.S32
1 files changed, 5 insertions, 27 deletions
diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
index ef46f66bc0d6..aa8f2ba6289b 100644
--- a/arch/s390/kernel/entry.S
+++ b/arch/s390/kernel/entry.S
@@ -330,40 +330,18 @@ ENTRY(ret_from_fork)
330 la %r11,STACK_FRAME_OVERHEAD(%r15) 330 la %r11,STACK_FRAME_OVERHEAD(%r15)
331 l %r12,__LC_THREAD_INFO 331 l %r12,__LC_THREAD_INFO
332 l %r13,__LC_SVC_NEW_PSW+4 332 l %r13,__LC_SVC_NEW_PSW+4
333 tm __PT_PSW+1(%r11),0x01 # forking a kernel thread ?
334 je 1f
335 l %r1,BASED(.Lschedule_tail) 333 l %r1,BASED(.Lschedule_tail)
336 basr %r14,%r1 # call schedule_tail 334 basr %r14,%r1 # call schedule_tail
337 TRACE_IRQS_ON 335 TRACE_IRQS_ON
338 ssm __LC_SVC_NEW_PSW # reenable interrupts 336 ssm __LC_SVC_NEW_PSW # reenable interrupts
339 j sysc_tracenogo 337 tm __PT_PSW+1(%r11),0x01 # forking a kernel thread ?
340 338 jne sysc_tracenogo
3411: # it's a kernel thread 339 # it's a kernel thread
342 st %r15,__PT_R15(%r11) # store stack pointer for new kthread 340 lm %r9,%r10,__PT_R9(%r11) # load gprs
343 l %r1,BASED(.Lschedule_tail)
344 basr %r14,%r1 # call schedule_tail
345 TRACE_IRQS_ON
346 ssm __LC_SVC_NEW_PSW # reenable interrupts
347 lm %r9,%r11,__PT_R9(%r11) # load gprs
348ENTRY(kernel_thread_starter) 341ENTRY(kernel_thread_starter)
349 la %r2,0(%r10) 342 la %r2,0(%r10)
350 basr %r14,%r9 343 basr %r14,%r9
351 la %r2,0 344 j sysc_tracenogo
352 br %r11 # do_exit
353
354#
355# kernel_execve function needs to deal with pt_regs that is not
356# at the usual place
357#
358ENTRY(ret_from_kernel_execve)
359 ssm __LC_PGM_NEW_PSW # disable I/O and ext. interrupts
360 lr %r15,%r2
361 lr %r11,%r2
362 ahi %r15,-STACK_FRAME_OVERHEAD
363 xc __SF_BACKCHAIN(4,%r15),__SF_BACKCHAIN(%r15)
364 l %r12,__LC_THREAD_INFO
365 ssm __LC_SVC_NEW_PSW # reenable interrupts
366 j sysc_return
367 345
368/* 346/*
369 * Program check handler routine 347 * Program check handler routine