diff options
| author | David S. Miller <davem@davemloft.net> | 2010-04-03 18:49:14 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2010-04-03 18:49:14 -0400 |
| commit | 87e8b821ed8db3dab03d96cd542e29666bf210aa (patch) | |
| tree | 0027060473aafbbb125655ba027319c8a1a665fc /kernel/trace/trace_functions_graph.c | |
| parent | 33cd9dfa3a13e3d8e41aef225a9f98169816723b (diff) | |
| parent | 5e11611a5d22252f3f9c169a3c9377eac0c32033 (diff) | |
Merge branch 'master' of /home/davem/src/GIT/linux-2.6/
Diffstat (limited to 'kernel/trace/trace_functions_graph.c')
| -rw-r--r-- | kernel/trace/trace_functions_graph.c | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c index e998a824e9db..e6989d9b44da 100644 --- a/kernel/trace/trace_functions_graph.c +++ b/kernel/trace/trace_functions_graph.c | |||
| @@ -188,7 +188,7 @@ static int __trace_graph_entry(struct trace_array *tr, | |||
| 188 | struct ring_buffer *buffer = tr->buffer; | 188 | struct ring_buffer *buffer = tr->buffer; |
| 189 | struct ftrace_graph_ent_entry *entry; | 189 | struct ftrace_graph_ent_entry *entry; |
| 190 | 190 | ||
| 191 | if (unlikely(__this_cpu_read(per_cpu_var(ftrace_cpu_disabled)))) | 191 | if (unlikely(__this_cpu_read(ftrace_cpu_disabled))) |
| 192 | return 0; | 192 | return 0; |
| 193 | 193 | ||
| 194 | event = trace_buffer_lock_reserve(buffer, TRACE_GRAPH_ENT, | 194 | event = trace_buffer_lock_reserve(buffer, TRACE_GRAPH_ENT, |
| @@ -237,6 +237,14 @@ int trace_graph_entry(struct ftrace_graph_ent *trace) | |||
| 237 | return ret; | 237 | return ret; |
| 238 | } | 238 | } |
| 239 | 239 | ||
| 240 | int trace_graph_thresh_entry(struct ftrace_graph_ent *trace) | ||
| 241 | { | ||
| 242 | if (tracing_thresh) | ||
| 243 | return 1; | ||
| 244 | else | ||
| 245 | return trace_graph_entry(trace); | ||
| 246 | } | ||
| 247 | |||
| 240 | static void __trace_graph_return(struct trace_array *tr, | 248 | static void __trace_graph_return(struct trace_array *tr, |
| 241 | struct ftrace_graph_ret *trace, | 249 | struct ftrace_graph_ret *trace, |
| 242 | unsigned long flags, | 250 | unsigned long flags, |
| @@ -247,7 +255,7 @@ static void __trace_graph_return(struct trace_array *tr, | |||
| 247 | struct ring_buffer *buffer = tr->buffer; | 255 | struct ring_buffer *buffer = tr->buffer; |
| 248 | struct ftrace_graph_ret_entry *entry; | 256 | struct ftrace_graph_ret_entry *entry; |
| 249 | 257 | ||
| 250 | if (unlikely(__this_cpu_read(per_cpu_var(ftrace_cpu_disabled)))) | 258 | if (unlikely(__this_cpu_read(ftrace_cpu_disabled))) |
| 251 | return; | 259 | return; |
| 252 | 260 | ||
| 253 | event = trace_buffer_lock_reserve(buffer, TRACE_GRAPH_RET, | 261 | event = trace_buffer_lock_reserve(buffer, TRACE_GRAPH_RET, |
| @@ -290,13 +298,26 @@ void set_graph_array(struct trace_array *tr) | |||
| 290 | smp_mb(); | 298 | smp_mb(); |
| 291 | } | 299 | } |
| 292 | 300 | ||
| 301 | void trace_graph_thresh_return(struct ftrace_graph_ret *trace) | ||
| 302 | { | ||
| 303 | if (tracing_thresh && | ||
| 304 | (trace->rettime - trace->calltime < tracing_thresh)) | ||
| 305 | return; | ||
| 306 | else | ||
| 307 | trace_graph_return(trace); | ||
| 308 | } | ||
| 309 | |||
| 293 | static int graph_trace_init(struct trace_array *tr) | 310 | static int graph_trace_init(struct trace_array *tr) |
| 294 | { | 311 | { |
| 295 | int ret; | 312 | int ret; |
| 296 | 313 | ||
| 297 | set_graph_array(tr); | 314 | set_graph_array(tr); |
| 298 | ret = register_ftrace_graph(&trace_graph_return, | 315 | if (tracing_thresh) |
| 299 | &trace_graph_entry); | 316 | ret = register_ftrace_graph(&trace_graph_thresh_return, |
| 317 | &trace_graph_thresh_entry); | ||
| 318 | else | ||
| 319 | ret = register_ftrace_graph(&trace_graph_return, | ||
| 320 | &trace_graph_entry); | ||
| 300 | if (ret) | 321 | if (ret) |
| 301 | return ret; | 322 | return ret; |
| 302 | tracing_start_cmdline_record(); | 323 | tracing_start_cmdline_record(); |
| @@ -920,7 +941,7 @@ print_graph_return(struct ftrace_graph_ret *trace, struct trace_seq *s, | |||
| 920 | if (!ret) | 941 | if (!ret) |
| 921 | return TRACE_TYPE_PARTIAL_LINE; | 942 | return TRACE_TYPE_PARTIAL_LINE; |
| 922 | } else { | 943 | } else { |
| 923 | ret = trace_seq_printf(s, "} (%ps)\n", (void *)trace->func); | 944 | ret = trace_seq_printf(s, "} /* %ps */\n", (void *)trace->func); |
| 924 | if (!ret) | 945 | if (!ret) |
| 925 | return TRACE_TYPE_PARTIAL_LINE; | 946 | return TRACE_TYPE_PARTIAL_LINE; |
| 926 | } | 947 | } |
