aboutsummaryrefslogtreecommitdiff
path: root/arch/blackfin/kernel/entry.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/blackfin/kernel/entry.S')
-rw-r--r--arch/blackfin/kernel/entry.S67
1 files changed, 9 insertions, 58 deletions
diff --git a/arch/blackfin/kernel/entry.S b/arch/blackfin/kernel/entry.S
index f27dc2292e1..4071265fc4f 100644
--- a/arch/blackfin/kernel/entry.S
+++ b/arch/blackfin/kernel/entry.S
@@ -44,65 +44,16 @@ ENTRY(_ret_from_fork)
sti r4;
#endif /* CONFIG_IPIPE */
SP += -12;
- call _schedule_tail;
+ pseudo_long_call _schedule_tail, p5;
SP += 12;
- r0 = [sp + PT_IPEND];
- cc = bittst(r0,1);
- if cc jump .Lin_kernel;
+ p1 = [sp++];
+ r0 = [sp++];
+ cc = p1 == 0;
+ if cc jump .Lfork;
+ sp += -12;
+ call (p1);
+ sp += 12;
+.Lfork:
RESTORE_CONTEXT
rti;
-.Lin_kernel:
- bitclr(r0,1);
- [sp + PT_IPEND] = r0;
- /* do a 'fake' RTI by jumping to [RETI]
- * to avoid clearing supervisor mode in child
- */
- r0 = [sp + PT_PC];
- [sp + PT_P0] = r0;
-
- RESTORE_ALL_SYS
- jump (p0);
ENDPROC(_ret_from_fork)
-
-ENTRY(_sys_fork)
- r0 = -EINVAL;
-#if (ANOMALY_05000371)
- nop;
- nop;
- nop;
-#endif
- rts;
-ENDPROC(_sys_fork)
-
-ENTRY(_sys_vfork)
- r0 = sp;
- r0 += 24;
- [--sp] = rets;
- SP += -12;
- call _bfin_vfork;
- SP += 12;
- rets = [sp++];
- rts;
-ENDPROC(_sys_vfork)
-
-ENTRY(_sys_clone)
- r0 = sp;
- r0 += 24;
- [--sp] = rets;
- SP += -12;
- call _bfin_clone;
- SP += 12;
- rets = [sp++];
- rts;
-ENDPROC(_sys_clone)
-
-ENTRY(_sys_rt_sigreturn)
- r0 = sp;
- r0 += 24;
- [--sp] = rets;
- SP += -12;
- call _do_rt_sigreturn;
- SP += 12;
- rets = [sp++];
- rts;
-ENDPROC(_sys_rt_sigreturn)