Messages in this thread Patch in this message | | | From | Changbin Du <> | Subject | [PATCH v2 12/15] perf ftrace: add support for tracing option 'irq-info' | Date | Sat, 27 Jun 2020 21:36:51 +0800 |
| |
This adds support to display irq context info for function tracer. To do this, just specify a '--func-irq-info' option.
Signed-off-by: Changbin Du <changbin.du@gmail.com> --- tools/perf/Documentation/perf-ftrace.txt | 3 +++ tools/perf/builtin-ftrace.c | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+)
diff --git a/tools/perf/Documentation/perf-ftrace.txt b/tools/perf/Documentation/perf-ftrace.txt index b616e05d5156..3c9eb044b7eb 100644 --- a/tools/perf/Documentation/perf-ftrace.txt +++ b/tools/perf/Documentation/perf-ftrace.txt @@ -84,6 +84,9 @@ OPTIONS --func-call-graph:: Display kernel stack trace for function tracer. +--func-irq-info:: + Display irq context info for function tracer. + -G:: --graph-funcs=:: Set graph filter on the given function (or a glob pattern). diff --git a/tools/perf/builtin-ftrace.c b/tools/perf/builtin-ftrace.c index 876c8e800425..0a1e481b66a0 100644 --- a/tools/perf/builtin-ftrace.c +++ b/tools/perf/builtin-ftrace.c @@ -42,6 +42,7 @@ struct perf_ftrace { unsigned buffer_size_kb; bool inherit; bool func_stack_trace; + bool func_irq_info; bool graph_nosleep_time; bool graph_noirqs; }; @@ -204,6 +205,7 @@ static void reset_tracing_options(struct perf_ftrace *ftrace __maybe_unused) write_tracing_option_file("func_stack_trace", "0"); write_tracing_option_file("sleep-time", "1"); write_tracing_option_file("funcgraph-irqs", "1"); + write_tracing_option_file("irq-info", "0"); } static int reset_tracing_files(struct perf_ftrace *ftrace __maybe_unused) @@ -291,6 +293,17 @@ static int set_tracing_func_stack_trace(struct perf_ftrace *ftrace) return 0; } +static int set_tracing_func_irqinfo(struct perf_ftrace *ftrace) +{ + if (!ftrace->func_irq_info) + return 0; + + if (write_tracing_option_file("irq-info", "1") < 0) + return -1; + + return 0; +} + static int reset_tracing_cpu(void) { struct perf_cpu_map *cpumap = perf_cpu_map__new(NULL); @@ -465,6 +478,11 @@ static int __cmd_ftrace(struct perf_ftrace *ftrace, int argc, const char **argv) goto out_reset; } + if (set_tracing_func_irqinfo(ftrace) < 0) { + pr_err("failed to set tracing option irq-info\n"); + goto out_reset; + } + if (set_tracing_filters(ftrace) < 0) { pr_err("failed to set tracing filters\n"); goto out_reset; @@ -661,6 +679,8 @@ int cmd_ftrace(int argc, const char **argv) "do not trace given functions", parse_filter_func), OPT_BOOLEAN(0, "func-call-graph", &ftrace.func_stack_trace, "show kernel stack trace for function tracer"), + OPT_BOOLEAN(0, "func-irq-info", &ftrace.func_irq_info, + "display irq info for function tracer"), OPT_CALLBACK_DEFAULT('G', "graph-funcs", &ftrace.graph_funcs, "func", "trace given functions using function_graph tracer", parse_filter_func, "*"), -- 2.25.1
| |