tracing, function_graph: simplify test for tracing
PATCH 1/1 tracing, function_graph: simplify test for tracing
For function_graph, a calling function is to be traced only when it is enabled or it is nested in a enabled function.
Current code uses TSK_TRACE_FL_GRAPH to test whether it is nested or not. read the code, we can get this:
(trace->depth > 0) <==> (TSK_TRACE_FL_GRAPH is set)
trace->depth is more explicit to tell that it is nested. So we use trace->depth directly and simplify the code.
No functionality is changed.TSK_TRACE_FL_GRAPH is not removed now, it is left for future usage.
---
kernel/trace/trace.h +1 -1
@@ -506,7 +506,7 @@ static inline int ftrace_graph_addr(unsigned long addr) {int i; -if (!ftrace_graph_count ||test_tsk_trace_graph (current)) +if (!ftrace_graph_count)return 1 ;for (i =0 ; i < ftrace_graph_count; i++) {
kernel/trace/trace_functions_graph.c +2 -6
@@ -218,7 +218,8 @@ int trace_graph_entry(struct ftrace_graph_ent *trace)if (!ftrace_trace_task (current))return 0 ; -if (!ftrace_graph_addr (trace->func)) +/* trace it when it is-nested-in or is a function enabled. */ +if (!(trace->depth ||ftrace_graph_addr (trace->func)))return 0 ;local_irq_save (flags);
@@ -231,9 +232,6 @@ int trace_graph_entry(struct ftrace_graph_ent *trace) }else { ret =0 ; } -/* Only do the atomic if it is not already set */ -if (!test_tsk_trace_graph (current)) -set_tsk_trace_graph (current);atomic_dec (&data->disabled);local_irq_restore (flags);
@@ -281,8 +279,6 @@ void trace_graph_return(struct ftrace_graph_ret *trace) pc =preempt_count ();__trace_graph_return (tr, trace, flags, pc); } -if (!trace->depth) -clear_tsk_trace_graph (current);atomic_dec (&data->disabled);local_irq_restore (flags); }
Quoted 8 lines · Lai Jiangshan
For
function_graph, a calling function is to be traced only when it is enabled or it is nested in a enabled function.Current code uses
TSK_TRACE_FL_GRAPHto test whether it is nested or not. read the code, we can get this:
(trace->depth> 0) <==> (TSK_TRACE_FL_GRAPHis set)
Quoted 8 lines
trace->depthis more explicit to tell that it is nested. So we usetrace->depthdirectly and simplify the code.No functionality is changed.
TSK_TRACE_FL_GRAPHis not removed now, it is left for future usage.Signed-off-by Lai Jiangshan <[email protected]>---
Looks prety good to me. Nice simplification, the less checks we have in this hot path, the better.
Frederic Weisbecker
AppliedQuoted 8 lines · Lai Jiangshan
For
function_graph, a calling function is to be traced only when it is enabled or it is nested in a enabled function.Current code uses
TSK_TRACE_FL_GRAPHto test whether it is nested or not. read the code, we can get this:
(trace->depth> 0) <==> (TSK_TRACE_FL_GRAPHis set)
Quoted 8 lines
trace->depthis more explicit to tell that it is nested. So we usetrace->depthdirectly and simplify the code.No functionality is changed.
TSK_TRACE_FL_GRAPHis not removed now, it is left for future usage.Signed-off-by Lai Jiangshan <[email protected]>---
I've queued it. Thanks.
[tip:tracing/core] tracing: Simplify test for function_graph tracing start point
In reply to Lai JiangshanCommit-ID: ea2c68a08fedb5053ba312d661e47df9f4d72411 Gitweb: http://git.kernel.org/tip/ea2c68a08fedb5053ba312d661e47df9f4d72411 Author: Lai Jiangshan <[email protected]> AuthorDate: Wed, 13 Jan 2010 19:38:30 +0800 Committer: Frederic Weisbecker <[email protected]> CommitDate: Fri, 29 Jan 2010 01:05:12 +0100
tracing: Simplify test for function_graph tracing start point
In the function graph tracer, a calling function is to be traced only when it is enabled through the set_graph_function file, or when it is nested in an enabled function.
Current code uses TSK_TRACE_FL_GRAPH to test whether it is nested or not. Looking at the code, we can get this:
(trace->depth > 0) <==> (TSK_TRACE_FL_GRAPH is set)
trace->depth is more explicit to tell that it is nested. So we use trace->depth directly and simplify the code.
No functionality is changed.TSK_TRACE_FL_GRAPH is not removed yet, it is left for future usage.
LKML-Reference: <[email protected]>
--- kernel/trace/trace.h | 2 +- kernel/trace/trace_functions_graph.c | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-)
kernel/trace/trace.h +1 -1
@@ -504,7 +504,7 @@ static inline int ftrace_graph_addr(unsigned long addr) {int i; -if (!ftrace_graph_count ||test_tsk_trace_graph (current)) +if (!ftrace_graph_count)return 1 ;for (i =0 ; i < ftrace_graph_count; i++) {
kernel/trace/trace_functions_graph.c +2 -6
@@ -215,7 +215,8 @@ int trace_graph_entry(struct ftrace_graph_ent *trace)if (!ftrace_trace_task (current))return 0 ; -if (!ftrace_graph_addr (trace->func)) +/* trace it when it is-nested-in or is a function enabled. */ +if (!(trace->depth ||ftrace_graph_addr (trace->func)))return 0 ;local_irq_save (flags);
@@ -228,9 +229,6 @@ int trace_graph_entry(struct ftrace_graph_ent *trace) }else { ret =0 ; } -/* Only do the atomic if it is not already set */ -if (!test_tsk_trace_graph (current)) -set_tsk_trace_graph (current);atomic_dec (&data->disabled);local_irq_restore (flags);
@@ -278,8 +276,6 @@ void trace_graph_return(struct ftrace_graph_ret *trace) pc =preempt_count ();__trace_graph_return (tr, trace, flags, pc); } -if (!trace->depth) -clear_tsk_trace_graph (current);atomic_dec (&data->disabled);local_irq_restore (flags); }