|
@@ -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
|