diff options
Diffstat (limited to 'kernel/trace/trace_functions_graph.c')
| -rw-r--r-- | kernel/trace/trace_functions_graph.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c index d28687e7b3a7..baeb5fe36108 100644 --- a/kernel/trace/trace_functions_graph.c +++ b/kernel/trace/trace_functions_graph.c | |||
| @@ -65,6 +65,12 @@ ftrace_push_return_trace(unsigned long ret, unsigned long func, int *depth) | |||
| 65 | if (!current->ret_stack) | 65 | if (!current->ret_stack) |
| 66 | return -EBUSY; | 66 | return -EBUSY; |
| 67 | 67 | ||
| 68 | /* | ||
| 69 | * We must make sure the ret_stack is tested before we read | ||
| 70 | * anything else. | ||
| 71 | */ | ||
| 72 | smp_rmb(); | ||
| 73 | |||
| 68 | /* The return trace stack is full */ | 74 | /* The return trace stack is full */ |
| 69 | if (current->curr_ret_stack == FTRACE_RETFUNC_DEPTH - 1) { | 75 | if (current->curr_ret_stack == FTRACE_RETFUNC_DEPTH - 1) { |
| 70 | atomic_inc(¤t->trace_overrun); | 76 | atomic_inc(¤t->trace_overrun); |
