|
@@ -262,36 +262,6 @@ void __switch_to_xtra(struct task_struct *prev_p, struct task_struct *next_p,
|
|
|
propagate_user_return_notify(prev_p, next_p);
|
|
|
}
|
|
|
|
|
|
-int sys_fork(struct pt_regs *regs)
|
|
|
-{
|
|
|
- return do_fork(SIGCHLD, regs->sp, regs, 0, NULL, NULL);
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * This is trivial, and on the face of it looks like it
|
|
|
- * could equally well be done in user mode.
|
|
|
- *
|
|
|
- * Not so, for quite unobvious reasons - register pressure.
|
|
|
- * In user mode vfork() cannot have a stack frame, and if
|
|
|
- * done by calling the "clone()" system call directly, you
|
|
|
- * do not have enough call-clobbered registers to hold all
|
|
|
- * the information you need.
|
|
|
- */
|
|
|
-int sys_vfork(struct pt_regs *regs)
|
|
|
-{
|
|
|
- return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->sp, regs, 0,
|
|
|
- NULL, NULL);
|
|
|
-}
|
|
|
-
|
|
|
-long
|
|
|
-sys_clone(unsigned long clone_flags, unsigned long newsp,
|
|
|
- void __user *parent_tid, void __user *child_tid, struct pt_regs *regs)
|
|
|
-{
|
|
|
- if (!newsp)
|
|
|
- newsp = regs->sp;
|
|
|
- return do_fork(clone_flags, newsp, regs, 0, parent_tid, child_tid);
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* Idle related variables and functions
|
|
|
*/
|