Commit 135c37b83c81b79a888108e3f7c5f64423d8a851

Authored by Al Viro
1 parent 3e41f9ba61

bfin: switch to generic vfork, get rid of pointless wrappers

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Showing 5 changed files with 7 additions and 54 deletions Side-by-side Diff

arch/blackfin/include/asm/unistd.h
... ... @@ -447,6 +447,7 @@
447 447 #define __ARCH_WANT_SYS_RT_SIGACTION
448 448 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
449 449 #define __ARCH_WANT_SYS_EXECVE
  450 +#define __ARCH_WANT_SYS_VFORK
450 451  
451 452 /*
452 453 * "Conditional" syscalls
arch/blackfin/kernel/entry.S
... ... @@ -57,37 +57,4 @@
57 57 RESTORE_CONTEXT
58 58 rti;
59 59 ENDPROC(_ret_from_fork)
60   -
61   -ENTRY(_sys_vfork)
62   - r0 = sp;
63   - r0 += 24;
64   - [--sp] = rets;
65   - SP += -12;
66   - pseudo_long_call _bfin_vfork, p2;
67   - SP += 12;
68   - rets = [sp++];
69   - rts;
70   -ENDPROC(_sys_vfork)
71   -
72   -ENTRY(_sys_clone)
73   - r0 = sp;
74   - r0 += 24;
75   - [--sp] = rets;
76   - SP += -12;
77   - pseudo_long_call _bfin_clone, p2;
78   - SP += 12;
79   - rets = [sp++];
80   - rts;
81   -ENDPROC(_sys_clone)
82   -
83   -ENTRY(_sys_rt_sigreturn)
84   - r0 = sp;
85   - r0 += 24;
86   - [--sp] = rets;
87   - SP += -12;
88   - pseudo_long_call _do_rt_sigreturn, p2;
89   - SP += 12;
90   - rets = [sp++];
91   - rts;
92   -ENDPROC(_sys_rt_sigreturn)
arch/blackfin/kernel/process.c
... ... @@ -127,28 +127,13 @@
127 127 {
128 128 }
129 129  
130   -asmlinkage int bfin_vfork(struct pt_regs *regs)
  130 +asmlinkage int bfin_clone(unsigned long clone_flags, unsigned long newsp)
131 131 {
132   - return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, rdusp(), regs, 0, NULL,
133   - NULL);
134   -}
135   -
136   -asmlinkage int bfin_clone(struct pt_regs *regs)
137   -{
138   - unsigned long clone_flags;
139   - unsigned long newsp;
140   -
141 132 #ifdef __ARCH_SYNC_CORE_DCACHE
142 133 if (current->nr_cpus_allowed == num_possible_cpus())
143 134 set_cpus_allowed_ptr(current, cpumask_of(smp_processor_id()));
144 135 #endif
145   -
146   - /* syscall2 puts clone_flags in r0 and usp in r1 */
147   - clone_flags = regs->r0;
148   - newsp = regs->r1;
149   - if (!newsp)
150   - newsp = rdusp();
151   - else
  136 + if (newsp)
152 137 newsp -= 12;
153 138 return do_fork(clone_flags, newsp, regs, 0, NULL, NULL);
154 139 }
... ... @@ -174,7 +159,7 @@
174 159 } else {
175 160 *childregs = *regs;
176 161 childregs->r0 = 0;
177   - p->thread.usp = usp;
  162 + p->thread.usp = usp ? : rdusp();
178 163 v[0] = v[1] = 0;
179 164 }
180 165  
arch/blackfin/kernel/signal.c
... ... @@ -82,9 +82,9 @@
82 82 return err;
83 83 }
84 84  
85   -asmlinkage int do_rt_sigreturn(unsigned long __unused)
  85 +asmlinkage int sys_rt_sigreturn(void)
86 86 {
87   - struct pt_regs *regs = (struct pt_regs *)__unused;
  87 + struct pt_regs *regs = current_pt_regs();
88 88 unsigned long usp = rdusp();
89 89 struct rt_sigframe *frame = (struct rt_sigframe *)(usp);
90 90 sigset_t set;
arch/blackfin/mach-common/entry.S
... ... @@ -1431,7 +1431,7 @@
1431 1431 .long _sys_ni_syscall /* old sys_ipc */
1432 1432 .long _sys_fsync
1433 1433 .long _sys_ni_syscall /* old sys_sigreturn */
1434   - .long _sys_clone /* 120 */
  1434 + .long _bfin_clone /* 120 */
1435 1435 .long _sys_setdomainname
1436 1436 .long _sys_newuname
1437 1437 .long _sys_ni_syscall /* old sys_modify_ldt */