Commit 135c37b83c81b79a888108e3f7c5f64423d8a851
1 parent
3e41f9ba61
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
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
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 */ |