diff options
Diffstat (limited to 'kernel/trace/trace_functions_graph.c')
-rw-r--r-- | kernel/trace/trace_functions_graph.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c index 8e1a115439fa..566f7327c3aa 100644 --- a/kernel/trace/trace_functions_graph.c +++ b/kernel/trace/trace_functions_graph.c | |||
@@ -842,6 +842,10 @@ print_graph_entry_leaf(struct trace_iterator *iter, | |||
842 | 842 | ||
843 | cpu_data = per_cpu_ptr(data->cpu_data, cpu); | 843 | cpu_data = per_cpu_ptr(data->cpu_data, cpu); |
844 | 844 | ||
845 | /* If a graph tracer ignored set_graph_notrace */ | ||
846 | if (call->depth < -1) | ||
847 | call->depth += FTRACE_NOTRACE_DEPTH; | ||
848 | |||
845 | /* | 849 | /* |
846 | * Comments display at + 1 to depth. Since | 850 | * Comments display at + 1 to depth. Since |
847 | * this is a leaf function, keep the comments | 851 | * this is a leaf function, keep the comments |
@@ -850,7 +854,8 @@ print_graph_entry_leaf(struct trace_iterator *iter, | |||
850 | cpu_data->depth = call->depth - 1; | 854 | cpu_data->depth = call->depth - 1; |
851 | 855 | ||
852 | /* No need to keep this function around for this depth */ | 856 | /* No need to keep this function around for this depth */ |
853 | if (call->depth < FTRACE_RETFUNC_DEPTH) | 857 | if (call->depth < FTRACE_RETFUNC_DEPTH && |
858 | !WARN_ON_ONCE(call->depth < 0)) | ||
854 | cpu_data->enter_funcs[call->depth] = 0; | 859 | cpu_data->enter_funcs[call->depth] = 0; |
855 | } | 860 | } |
856 | 861 | ||
@@ -880,11 +885,16 @@ print_graph_entry_nested(struct trace_iterator *iter, | |||
880 | struct fgraph_cpu_data *cpu_data; | 885 | struct fgraph_cpu_data *cpu_data; |
881 | int cpu = iter->cpu; | 886 | int cpu = iter->cpu; |
882 | 887 | ||
888 | /* If a graph tracer ignored set_graph_notrace */ | ||
889 | if (call->depth < -1) | ||
890 | call->depth += FTRACE_NOTRACE_DEPTH; | ||
891 | |||
883 | cpu_data = per_cpu_ptr(data->cpu_data, cpu); | 892 | cpu_data = per_cpu_ptr(data->cpu_data, cpu); |
884 | cpu_data->depth = call->depth; | 893 | cpu_data->depth = call->depth; |
885 | 894 | ||
886 | /* Save this function pointer to see if the exit matches */ | 895 | /* Save this function pointer to see if the exit matches */ |
887 | if (call->depth < FTRACE_RETFUNC_DEPTH) | 896 | if (call->depth < FTRACE_RETFUNC_DEPTH && |
897 | !WARN_ON_ONCE(call->depth < 0)) | ||
888 | cpu_data->enter_funcs[call->depth] = call->func; | 898 | cpu_data->enter_funcs[call->depth] = call->func; |
889 | } | 899 | } |
890 | 900 | ||
@@ -1114,7 +1124,8 @@ print_graph_return(struct ftrace_graph_ret *trace, struct trace_seq *s, | |||
1114 | */ | 1124 | */ |
1115 | cpu_data->depth = trace->depth - 1; | 1125 | cpu_data->depth = trace->depth - 1; |
1116 | 1126 | ||
1117 | if (trace->depth < FTRACE_RETFUNC_DEPTH) { | 1127 | if (trace->depth < FTRACE_RETFUNC_DEPTH && |
1128 | !WARN_ON_ONCE(trace->depth < 0)) { | ||
1118 | if (cpu_data->enter_funcs[trace->depth] != trace->func) | 1129 | if (cpu_data->enter_funcs[trace->depth] != trace->func) |
1119 | func_match = 0; | 1130 | func_match = 0; |
1120 | cpu_data->enter_funcs[trace->depth] = 0; | 1131 | cpu_data->enter_funcs[trace->depth] = 0; |