mips: switch to generic sys_fork() and sys_clone()
we still need the wrappers to store callee-saved registers in pt_regs, but once that done we can jump to kernel/fork.c variants. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -83,41 +83,7 @@ SYSCALL_DEFINE6(mips_mmap2, unsigned long, addr, unsigned long, len,
|
||||
}
|
||||
|
||||
save_static_function(sys_fork);
|
||||
static int __used noinline
|
||||
_sys_fork(nabi_no_regargs struct pt_regs regs)
|
||||
{
|
||||
return do_fork(SIGCHLD, 0, 0, NULL, NULL);
|
||||
}
|
||||
|
||||
save_static_function(sys_clone);
|
||||
static int __used noinline
|
||||
_sys_clone(nabi_no_regargs struct pt_regs regs)
|
||||
{
|
||||
unsigned long clone_flags;
|
||||
unsigned long newsp;
|
||||
int __user *parent_tidptr, *child_tidptr;
|
||||
|
||||
clone_flags = regs.regs[4];
|
||||
newsp = regs.regs[5];
|
||||
parent_tidptr = (int __user *) regs.regs[6];
|
||||
#ifdef CONFIG_32BIT
|
||||
/* We need to fetch the fifth argument off the stack. */
|
||||
child_tidptr = NULL;
|
||||
if (clone_flags & (CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID)) {
|
||||
int __user *__user *usp = (int __user *__user *) regs.regs[29];
|
||||
if (regs.regs[2] == __NR_syscall) {
|
||||
if (get_user (child_tidptr, &usp[5]))
|
||||
return -EFAULT;
|
||||
}
|
||||
else if (get_user (child_tidptr, &usp[4]))
|
||||
return -EFAULT;
|
||||
}
|
||||
#else
|
||||
child_tidptr = (int __user *) regs.regs[8];
|
||||
#endif
|
||||
return do_fork(clone_flags, newsp, 0,
|
||||
parent_tidptr, child_tidptr);
|
||||
}
|
||||
|
||||
SYSCALL_DEFINE1(set_thread_area, unsigned long, addr)
|
||||
{
|
||||
|
Reference in New Issue
Block a user