aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/ftrace.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/trace/ftrace.c')
-rw-r--r--kernel/trace/ftrace.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index ebff62ef40be..20e066065eb3 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -2739,15 +2739,20 @@ void unregister_ftrace_graph(void)
2739void ftrace_graph_init_task(struct task_struct *t) 2739void ftrace_graph_init_task(struct task_struct *t)
2740{ 2740{
2741 if (atomic_read(&ftrace_graph_active)) { 2741 if (atomic_read(&ftrace_graph_active)) {
2742 t->ret_stack = kmalloc(FTRACE_RETFUNC_DEPTH 2742 struct ftrace_ret_stack *ret_stack;
2743
2744 ret_stack = kmalloc(FTRACE_RETFUNC_DEPTH
2743 * sizeof(struct ftrace_ret_stack), 2745 * sizeof(struct ftrace_ret_stack),
2744 GFP_KERNEL); 2746 GFP_KERNEL);
2745 if (!t->ret_stack) 2747 if (!ret_stack)
2746 return; 2748 return;
2747 t->curr_ret_stack = -1; 2749 t->curr_ret_stack = -1;
2748 atomic_set(&t->tracing_graph_pause, 0); 2750 atomic_set(&t->tracing_graph_pause, 0);
2749 atomic_set(&t->trace_overrun, 0); 2751 atomic_set(&t->trace_overrun, 0);
2750 t->ftrace_timestamp = 0; 2752 t->ftrace_timestamp = 0;
2753 /* make curr_ret_stack visable before we add the ret_stack */
2754 smp_wmb();
2755 t->ret_stack = ret_stack;
2751 } else 2756 } else
2752 t->ret_stack = NULL; 2757 t->ret_stack = NULL;
2753} 2758}