diff options
| -rw-r--r-- | kernel/trace/trace_functions_graph.c | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c index 32b7fb9a19df..af60eef4cbcc 100644 --- a/kernel/trace/trace_functions_graph.c +++ b/kernel/trace/trace_functions_graph.c | |||
| @@ -570,11 +570,36 @@ print_graph_function(struct trace_iterator *iter) | |||
| 570 | } | 570 | } |
| 571 | } | 571 | } |
| 572 | 572 | ||
| 573 | static void print_graph_headers(struct seq_file *s) | ||
| 574 | { | ||
| 575 | /* 1st line */ | ||
| 576 | seq_printf(s, "# "); | ||
| 577 | if (tracer_flags.val & TRACE_GRAPH_PRINT_CPU) | ||
| 578 | seq_printf(s, "CPU "); | ||
| 579 | if (tracer_flags.val & TRACE_GRAPH_PRINT_PROC) | ||
| 580 | seq_printf(s, "TASK/PID "); | ||
| 581 | if (tracer_flags.val & TRACE_GRAPH_PRINT_OVERHEAD) | ||
| 582 | seq_printf(s, "OVERHEAD/"); | ||
| 583 | seq_printf(s, "DURATION FUNCTION CALLS\n"); | ||
| 584 | |||
| 585 | /* 2nd line */ | ||
| 586 | seq_printf(s, "# "); | ||
| 587 | if (tracer_flags.val & TRACE_GRAPH_PRINT_CPU) | ||
| 588 | seq_printf(s, "| "); | ||
| 589 | if (tracer_flags.val & TRACE_GRAPH_PRINT_PROC) | ||
| 590 | seq_printf(s, "| | "); | ||
| 591 | if (tracer_flags.val & TRACE_GRAPH_PRINT_OVERHEAD) { | ||
| 592 | seq_printf(s, "| "); | ||
| 593 | seq_printf(s, "| | | | |\n"); | ||
| 594 | } else | ||
| 595 | seq_printf(s, " | | | | |\n"); | ||
| 596 | } | ||
| 573 | static struct tracer graph_trace __read_mostly = { | 597 | static struct tracer graph_trace __read_mostly = { |
| 574 | .name = "function_graph", | 598 | .name = "function_graph", |
| 575 | .init = graph_trace_init, | 599 | .init = graph_trace_init, |
| 576 | .reset = graph_trace_reset, | 600 | .reset = graph_trace_reset, |
| 577 | .print_line = print_graph_function, | 601 | .print_line = print_graph_function, |
| 602 | .print_header = print_graph_headers, | ||
| 578 | .flags = &tracer_flags, | 603 | .flags = &tracer_flags, |
| 579 | }; | 604 | }; |
| 580 | 605 | ||
