aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/trace_functions_graph.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/trace/trace_functions_graph.c')
-rw-r--r--kernel/trace/trace_functions_graph.c17
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;