Commit ff2a9112 authored by Christian Brauner's avatar Christian Brauner

fork: remove do_fork()

Now that all architectures have been switched to use _do_fork() and the new
struct kernel_clone_args calling convention we can remove the legacy
do_fork() helper completely. The calling convention used to be brittle and
do_fork() didn't buy us anything. The only calling convention accepted
should be based on struct kernel_clone_args going forward. It's cleaner and
uniform.

Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Cc: "Peter Zijlstra (Intel)" <peterz@infradead.org>
Signed-off-by: default avatarChristian Brauner <christian.brauner@ubuntu.com>
parent adc7092e
...@@ -96,7 +96,6 @@ extern void exit_files(struct task_struct *); ...@@ -96,7 +96,6 @@ extern void exit_files(struct task_struct *);
extern void exit_itimers(struct signal_struct *); extern void exit_itimers(struct signal_struct *);
extern long _do_fork(struct kernel_clone_args *kargs); extern long _do_fork(struct kernel_clone_args *kargs);
extern long do_fork(unsigned long, unsigned long, unsigned long, int __user *, int __user *);
struct task_struct *fork_idle(int); struct task_struct *fork_idle(int);
struct mm_struct *copy_init_mm(void); struct mm_struct *copy_init_mm(void);
extern pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags); extern pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
......
...@@ -2493,29 +2493,6 @@ long _do_fork(struct kernel_clone_args *args) ...@@ -2493,29 +2493,6 @@ long _do_fork(struct kernel_clone_args *args)
return nr; return nr;
} }
#ifndef CONFIG_HAVE_COPY_THREAD_TLS
/* For compatibility with architectures that call do_fork directly rather than
* using the syscall entry points below. */
long do_fork(unsigned long clone_flags,
unsigned long stack_start,
unsigned long stack_size,
int __user *parent_tidptr,
int __user *child_tidptr)
{
struct kernel_clone_args args = {
.flags = (lower_32_bits(clone_flags) & ~CSIGNAL),
.pidfd = parent_tidptr,
.child_tid = child_tidptr,
.parent_tid = parent_tidptr,
.exit_signal = (lower_32_bits(clone_flags) & CSIGNAL),
.stack = stack_start,
.stack_size = stack_size,
};
return _do_fork(&args);
}
#endif
/* /*
* Create a kernel thread. * Create a kernel thread.
*/ */
...@@ -2923,7 +2900,7 @@ static int unshare_fd(unsigned long unshare_flags, struct files_struct **new_fdp ...@@ -2923,7 +2900,7 @@ static int unshare_fd(unsigned long unshare_flags, struct files_struct **new_fdp
/* /*
* unshare allows a process to 'unshare' part of the process * unshare allows a process to 'unshare' part of the process
* context which was originally shared using clone. copy_* * context which was originally shared using clone. copy_*
* functions used by do_fork() cannot be used here directly * functions used by _do_fork() cannot be used here directly
* because they modify an inactive task_struct that is being * because they modify an inactive task_struct that is being
* constructed. Here we are modifying the current, active, * constructed. Here we are modifying the current, active,
* task_struct. * task_struct.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment