Commit 749230b06a753a22f6ed96e5dd60815d6ab12865
Committed by
Steven Rostedt
1 parent
199abfab40
Exists in
master
and in
6 other branches
tracing, function_graph: Add context-info support for function_graph tracer
The function_graph tracer does not follow global context-info option. Adding TRACE_ITER_CONTEXT_INFO trace_flags check to enable it. With following commands: # echo function_graph > ./current_tracer # echo 0 > options/context-info # cat trace This is what it looked like before: # tracer: function_graph # # TIME CPU DURATION FUNCTION CALLS # | | | | | | | | 1) 0.079 us | } /* __vma_link_rb */ 1) 0.056 us | copy_page_range(); 1) | security_vm_enough_memory() { ... This is what it looks like now: # tracer: function_graph # } /* update_ts_time_stats */ timekeeping_max_deferment(); ... Signed-off-by: Jiri Olsa <jolsa@redhat.com> Link: http://lkml.kernel.org/r/1307113131-10045-6-git-send-email-jolsa@redhat.com Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Showing 1 changed file with 31 additions and 22 deletions Side-by-side Diff
kernel/trace/trace_functions_graph.c
... | ... | @@ -613,28 +613,30 @@ |
613 | 613 | addr >= (unsigned long)__irqentry_text_end) |
614 | 614 | return TRACE_TYPE_UNHANDLED; |
615 | 615 | |
616 | - /* Absolute time */ | |
617 | - if (flags & TRACE_GRAPH_PRINT_ABS_TIME) { | |
618 | - ret = print_graph_abs_time(iter->ts, s); | |
619 | - if (!ret) | |
620 | - return TRACE_TYPE_PARTIAL_LINE; | |
621 | - } | |
616 | + if (trace_flags & TRACE_ITER_CONTEXT_INFO) { | |
617 | + /* Absolute time */ | |
618 | + if (flags & TRACE_GRAPH_PRINT_ABS_TIME) { | |
619 | + ret = print_graph_abs_time(iter->ts, s); | |
620 | + if (!ret) | |
621 | + return TRACE_TYPE_PARTIAL_LINE; | |
622 | + } | |
622 | 623 | |
623 | - /* Cpu */ | |
624 | - if (flags & TRACE_GRAPH_PRINT_CPU) { | |
625 | - ret = print_graph_cpu(s, cpu); | |
626 | - if (ret == TRACE_TYPE_PARTIAL_LINE) | |
627 | - return TRACE_TYPE_PARTIAL_LINE; | |
628 | - } | |
624 | + /* Cpu */ | |
625 | + if (flags & TRACE_GRAPH_PRINT_CPU) { | |
626 | + ret = print_graph_cpu(s, cpu); | |
627 | + if (ret == TRACE_TYPE_PARTIAL_LINE) | |
628 | + return TRACE_TYPE_PARTIAL_LINE; | |
629 | + } | |
629 | 630 | |
630 | - /* Proc */ | |
631 | - if (flags & TRACE_GRAPH_PRINT_PROC) { | |
632 | - ret = print_graph_proc(s, pid); | |
633 | - if (ret == TRACE_TYPE_PARTIAL_LINE) | |
634 | - return TRACE_TYPE_PARTIAL_LINE; | |
635 | - ret = trace_seq_printf(s, " | "); | |
636 | - if (!ret) | |
637 | - return TRACE_TYPE_PARTIAL_LINE; | |
631 | + /* Proc */ | |
632 | + if (flags & TRACE_GRAPH_PRINT_PROC) { | |
633 | + ret = print_graph_proc(s, pid); | |
634 | + if (ret == TRACE_TYPE_PARTIAL_LINE) | |
635 | + return TRACE_TYPE_PARTIAL_LINE; | |
636 | + ret = trace_seq_printf(s, " | "); | |
637 | + if (!ret) | |
638 | + return TRACE_TYPE_PARTIAL_LINE; | |
639 | + } | |
638 | 640 | } |
639 | 641 | |
640 | 642 | /* No overhead */ |
... | ... | @@ -710,8 +712,9 @@ |
710 | 712 | { |
711 | 713 | int ret = -1; |
712 | 714 | |
713 | - if (!(flags & TRACE_GRAPH_PRINT_DURATION)) | |
714 | - return TRACE_TYPE_HANDLED; | |
715 | + if (!(flags & TRACE_GRAPH_PRINT_DURATION) || | |
716 | + !(trace_flags & TRACE_ITER_CONTEXT_INFO)) | |
717 | + return TRACE_TYPE_HANDLED; | |
715 | 718 | |
716 | 719 | /* No real adata, just filling the column with spaces */ |
717 | 720 | switch (duration) { |
... | ... | @@ -879,6 +882,9 @@ |
879 | 882 | return TRACE_TYPE_PARTIAL_LINE; |
880 | 883 | } |
881 | 884 | |
885 | + if (!(trace_flags & TRACE_ITER_CONTEXT_INFO)) | |
886 | + return 0; | |
887 | + | |
882 | 888 | /* Absolute time */ |
883 | 889 | if (flags & TRACE_GRAPH_PRINT_ABS_TIME) { |
884 | 890 | ret = print_graph_abs_time(iter->ts, s); |
... | ... | @@ -1345,6 +1351,9 @@ |
1345 | 1351 | void print_graph_headers_flags(struct seq_file *s, u32 flags) |
1346 | 1352 | { |
1347 | 1353 | struct trace_iterator *iter = s->private; |
1354 | + | |
1355 | + if (!(trace_flags & TRACE_ITER_CONTEXT_INFO)) | |
1356 | + return; | |
1348 | 1357 | |
1349 | 1358 | if (trace_flags & TRACE_ITER_LATENCY_FMT) { |
1350 | 1359 | /* print nothing if the buffers are empty */ |