aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Triplett <josh@joshtriplett.org>2015-06-05 15:03:34 +1000
committerMichael Ellerman <mpe@ellerman.id.au>2015-06-05 15:03:34 +1000
commit737dbabb4bdf2e04422f2b1fa02c3415feb91378 (patch)
treefe9872a7f2f88ebd0d6f379d16b1c398ea3fabc2
parent1bbe5834c796a86bc5e8b960d692d77cebfaa181 (diff)
downloadlinux-next-737dbabb4bdf2e04422f2b1fa02c3415feb91378.tar.gz
clone-support-passing-tls-argument-via-c-rather-than-pt_regs-magic-fix
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-rw-r--r--drivers/misc/kgdbts.c2
-rw-r--r--include/linux/sched.h1
-rw-r--r--kernel/fork.c13
3 files changed, 8 insertions, 8 deletions
diff --git a/drivers/misc/kgdbts.c b/drivers/misc/kgdbts.c
index 36f5d52775a98..9a60bd4d3c494 100644
--- a/drivers/misc/kgdbts.c
+++ b/drivers/misc/kgdbts.c
@@ -220,7 +220,7 @@ static unsigned long lookup_addr(char *arg)
else if (!strcmp(arg, "sys_open"))
addr = (unsigned long)do_sys_open;
else if (!strcmp(arg, "do_fork"))
- addr = (unsigned long)do_fork;
+ addr = (unsigned long)_do_fork;
else if (!strcmp(arg, "hw_break_val"))
addr = (unsigned long)&hw_break_val;
addr = (unsigned long) dereference_function_descriptor((void *)addr);
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 5b27df73797d0..96ac754b72c79 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -2523,6 +2523,7 @@ extern int do_execveat(int, struct filename *,
const char __user * const __user *,
const char __user * const __user *,
int);
+extern long _do_fork(unsigned long, unsigned long, unsigned long, int __user *, int __user *, unsigned long);
extern long do_fork(unsigned long, unsigned long, unsigned long, int __user *, int __user *);
struct task_struct *fork_idle(int);
extern pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
diff --git a/kernel/fork.c b/kernel/fork.c
index 0ea8ce9466b96..3bb13a093af52 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -1676,13 +1676,12 @@ struct task_struct *fork_idle(int cpu)
* It copies the process, and if successful kick-starts
* it and waits for it to finish using the VM if required.
*/
-static long _do_fork(
- unsigned long clone_flags,
- unsigned long stack_start,
- unsigned long stack_size,
- int __user *parent_tidptr,
- int __user *child_tidptr,
- unsigned long tls)
+long _do_fork(unsigned long clone_flags,
+ unsigned long stack_start,
+ unsigned long stack_size,
+ int __user *parent_tidptr,
+ int __user *child_tidptr,
+ unsigned long tls)
{
struct task_struct *p;
int trace = 0;