|
@@ -842,6 +842,10 @@ print_graph_entry_leaf(struct trace_iterator *iter,
|
|
|
|
|
|
cpu_data = per_cpu_ptr(data->cpu_data, cpu);
|
|
|
|
|
|
+ /* If a graph tracer ignored set_graph_notrace */
|
|
|
+ if (call->depth < -1)
|
|
|
+ call->depth += FTRACE_NOTRACE_DEPTH;
|
|
|
+
|
|
|
/*
|
|
|
* Comments display at + 1 to depth. Since
|
|
|
* this is a leaf function, keep the comments
|
|
@@ -850,7 +854,8 @@ print_graph_entry_leaf(struct trace_iterator *iter,
|
|
|
cpu_data->depth = call->depth - 1;
|
|
|
|
|
|
/* No need to keep this function around for this depth */
|
|
|
- if (call->depth < FTRACE_RETFUNC_DEPTH)
|
|
|
+ if (call->depth < FTRACE_RETFUNC_DEPTH &&
|
|
|
+ !WARN_ON_ONCE(call->depth < 0))
|
|
|
cpu_data->enter_funcs[call->depth] = 0;
|
|
|
}
|
|
|
|
|
@@ -880,11 +885,16 @@ print_graph_entry_nested(struct trace_iterator *iter,
|
|
|
struct fgraph_cpu_data *cpu_data;
|
|
|
int cpu = iter->cpu;
|
|
|
|
|
|
+ /* If a graph tracer ignored set_graph_notrace */
|
|
|
+ if (call->depth < -1)
|
|
|
+ call->depth += FTRACE_NOTRACE_DEPTH;
|
|
|
+
|
|
|
cpu_data = per_cpu_ptr(data->cpu_data, cpu);
|
|
|
cpu_data->depth = call->depth;
|
|
|
|
|
|
/* Save this function pointer to see if the exit matches */
|
|
|
- if (call->depth < FTRACE_RETFUNC_DEPTH)
|
|
|
+ if (call->depth < FTRACE_RETFUNC_DEPTH &&
|
|
|
+ !WARN_ON_ONCE(call->depth < 0))
|
|
|
cpu_data->enter_funcs[call->depth] = call->func;
|
|
|
}
|
|
|
|
|
@@ -1114,7 +1124,8 @@ print_graph_return(struct ftrace_graph_ret *trace, struct trace_seq *s,
|
|
|
*/
|
|
|
cpu_data->depth = trace->depth - 1;
|
|
|
|
|
|
- if (trace->depth < FTRACE_RETFUNC_DEPTH) {
|
|
|
+ if (trace->depth < FTRACE_RETFUNC_DEPTH &&
|
|
|
+ !WARN_ON_ONCE(trace->depth < 0)) {
|
|
|
if (cpu_data->enter_funcs[trace->depth] != trace->func)
|
|
|
func_match = 0;
|
|
|
cpu_data->enter_funcs[trace->depth] = 0;
|