aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/fork.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-06-10 22:58:10 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2009-06-10 22:58:10 -0400
commit991ec02cdca33b03a132a0cacfe6f0aa0be9aa8d (patch)
tree50b5f4e2b9f138da57f76eca44fdcc80a2fcd428 /kernel/fork.c
parent862366118026a358882eefc70238dbcc3db37aac (diff)
parent84047e360af0394ac5861d433f26bbcf30f77dd1 (diff)
Merge branch 'tracing-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'tracing-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: function-graph: always initialize task ret_stack function-graph: move initialization of new tasks up in fork function-graph: add memory barriers for accessing task's ret_stack function-graph: enable the stack after initialization of other variables function-graph: only allocate init tasks if it was not already done Manually fix trivial conflict in kernel/trace/ftrace.c
Diffstat (limited to 'kernel/fork.c')
-rw-r--r--kernel/fork.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/kernel/fork.c b/kernel/fork.c
index 5449efbc6427..bb762b4dd217 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -981,6 +981,8 @@ static struct task_struct *copy_process(unsigned long clone_flags,
981 if (!p) 981 if (!p)
982 goto fork_out; 982 goto fork_out;
983 983
984 ftrace_graph_init_task(p);
985
984 rt_mutex_init_task(p); 986 rt_mutex_init_task(p);
985 987
986#ifdef CONFIG_PROVE_LOCKING 988#ifdef CONFIG_PROVE_LOCKING
@@ -1130,8 +1132,6 @@ static struct task_struct *copy_process(unsigned long clone_flags,
1130 } 1132 }
1131 } 1133 }
1132 1134
1133 ftrace_graph_init_task(p);
1134
1135 p->pid = pid_nr(pid); 1135 p->pid = pid_nr(pid);
1136 p->tgid = p->pid; 1136 p->tgid = p->pid;
1137 if (clone_flags & CLONE_THREAD) 1137 if (clone_flags & CLONE_THREAD)
@@ -1140,7 +1140,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,
1140 if (current->nsproxy != p->nsproxy) { 1140 if (current->nsproxy != p->nsproxy) {
1141 retval = ns_cgroup_clone(p, pid); 1141 retval = ns_cgroup_clone(p, pid);
1142 if (retval) 1142 if (retval)
1143 goto bad_fork_free_graph; 1143 goto bad_fork_free_pid;
1144 } 1144 }
1145 1145
1146 p->set_child_tid = (clone_flags & CLONE_CHILD_SETTID) ? child_tidptr : NULL; 1146 p->set_child_tid = (clone_flags & CLONE_CHILD_SETTID) ? child_tidptr : NULL;
@@ -1232,7 +1232,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,
1232 spin_unlock(&current->sighand->siglock); 1232 spin_unlock(&current->sighand->siglock);
1233 write_unlock_irq(&tasklist_lock); 1233 write_unlock_irq(&tasklist_lock);
1234 retval = -ERESTARTNOINTR; 1234 retval = -ERESTARTNOINTR;
1235 goto bad_fork_free_graph; 1235 goto bad_fork_free_pid;
1236 } 1236 }
1237 1237
1238 if (clone_flags & CLONE_THREAD) { 1238 if (clone_flags & CLONE_THREAD) {
@@ -1267,8 +1267,6 @@ static struct task_struct *copy_process(unsigned long clone_flags,
1267 cgroup_post_fork(p); 1267 cgroup_post_fork(p);
1268 return p; 1268 return p;
1269 1269
1270bad_fork_free_graph:
1271 ftrace_graph_exit_task(p);
1272bad_fork_free_pid: 1270bad_fork_free_pid:
1273 if (pid != &init_struct_pid) 1271 if (pid != &init_struct_pid)
1274 free_pid(pid); 1272 free_pid(pid);