diff options
| author | Jiri Olsa <jolsa@redhat.com> | 2010-04-02 13:01:20 -0400 |
|---|---|---|
| committer | Steven Rostedt <rostedt@goodmis.org> | 2010-04-26 16:55:08 -0400 |
| commit | 9106b69382912ddc403a307b69bf894a6f3004e4 (patch) | |
| tree | b4a08ee1cbdfd8c43544231fa3623c45b1bf9a17 /kernel/trace/trace_functions_graph.c | |
| parent | 77a7f2e94e6998e307917fe63fa4b6d5162d44e9 (diff) | |
tracing: Add ftrace events for graph tracer
Add ftrace events for graph tracer, so the graph output could be shared
with other tracers.
Signed-off-by: Jiri Olsa <jolsa@redhat.com>
LKML-Reference: <1270227683-14631-2-git-send-email-jolsa@redhat.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel/trace/trace_functions_graph.c')
| -rw-r--r-- | kernel/trace/trace_functions_graph.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c index 669b9c31861d..db9e06bb766e 100644 --- a/kernel/trace/trace_functions_graph.c +++ b/kernel/trace/trace_functions_graph.c | |||
| @@ -40,7 +40,7 @@ struct fgraph_data { | |||
| 40 | #define TRACE_GRAPH_PRINT_OVERHEAD 0x4 | 40 | #define TRACE_GRAPH_PRINT_OVERHEAD 0x4 |
| 41 | #define TRACE_GRAPH_PRINT_PROC 0x8 | 41 | #define TRACE_GRAPH_PRINT_PROC 0x8 |
| 42 | #define TRACE_GRAPH_PRINT_DURATION 0x10 | 42 | #define TRACE_GRAPH_PRINT_DURATION 0x10 |
| 43 | #define TRACE_GRAPH_PRINT_ABS_TIME 0X20 | 43 | #define TRACE_GRAPH_PRINT_ABS_TIME 0x20 |
| 44 | 44 | ||
| 45 | static struct tracer_opt trace_opts[] = { | 45 | static struct tracer_opt trace_opts[] = { |
| 46 | /* Display overruns? (for self-debug purpose) */ | 46 | /* Display overruns? (for self-debug purpose) */ |
| @@ -1096,6 +1096,12 @@ print_graph_function(struct trace_iterator *iter) | |||
| 1096 | return TRACE_TYPE_HANDLED; | 1096 | return TRACE_TYPE_HANDLED; |
| 1097 | } | 1097 | } |
| 1098 | 1098 | ||
| 1099 | static enum print_line_t | ||
| 1100 | print_graph_function_event(struct trace_iterator *iter, int flags) | ||
| 1101 | { | ||
| 1102 | return print_graph_function(iter); | ||
| 1103 | } | ||
| 1104 | |||
| 1099 | static void print_lat_header(struct seq_file *s) | 1105 | static void print_lat_header(struct seq_file *s) |
| 1100 | { | 1106 | { |
| 1101 | static const char spaces[] = " " /* 16 spaces */ | 1107 | static const char spaces[] = " " /* 16 spaces */ |
| @@ -1199,6 +1205,16 @@ static void graph_trace_close(struct trace_iterator *iter) | |||
| 1199 | } | 1205 | } |
| 1200 | } | 1206 | } |
| 1201 | 1207 | ||
| 1208 | static struct trace_event graph_trace_entry_event = { | ||
| 1209 | .type = TRACE_GRAPH_ENT, | ||
| 1210 | .trace = print_graph_function_event, | ||
| 1211 | }; | ||
| 1212 | |||
| 1213 | static struct trace_event graph_trace_ret_event = { | ||
| 1214 | .type = TRACE_GRAPH_RET, | ||
| 1215 | .trace = print_graph_function_event, | ||
| 1216 | }; | ||
| 1217 | |||
| 1202 | static struct tracer graph_trace __read_mostly = { | 1218 | static struct tracer graph_trace __read_mostly = { |
| 1203 | .name = "function_graph", | 1219 | .name = "function_graph", |
| 1204 | .open = graph_trace_open, | 1220 | .open = graph_trace_open, |
| @@ -1220,6 +1236,16 @@ static __init int init_graph_trace(void) | |||
| 1220 | { | 1236 | { |
| 1221 | max_bytes_for_cpu = snprintf(NULL, 0, "%d", nr_cpu_ids - 1); | 1237 | max_bytes_for_cpu = snprintf(NULL, 0, "%d", nr_cpu_ids - 1); |
| 1222 | 1238 | ||
| 1239 | if (!register_ftrace_event(&graph_trace_entry_event)) { | ||
| 1240 | pr_warning("Warning: could not register graph trace events\n"); | ||
| 1241 | return 1; | ||
| 1242 | } | ||
| 1243 | |||
| 1244 | if (!register_ftrace_event(&graph_trace_ret_event)) { | ||
| 1245 | pr_warning("Warning: could not register graph trace events\n"); | ||
| 1246 | return 1; | ||
| 1247 | } | ||
| 1248 | |||
| 1223 | return register_tracer(&graph_trace); | 1249 | return register_tracer(&graph_trace); |
| 1224 | } | 1250 | } |
| 1225 | 1251 | ||
