perf: ftrace: Add set_tracing_options() to set all trace options
authorChangbin Du <changbin.du@gmail.com>
Sat, 8 Aug 2020 02:31:40 +0000 (10:31 +0800)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 14 Aug 2020 12:36:45 +0000 (09:36 -0300)
Now the __cmd_ftrace() becomes a bit long. This moves the trace option
setting code to a separate function set_tracing_options().

Suggested-by: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Changbin Du <changbin.du@gmail.com>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt (VMware) <rostedt@goodmis.org>
Link: http://lore.kernel.org/lkml/20200808023141.14227-18-changbin.du@gmail.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-ftrace.c

index 13abb73..9da38dc 100644 (file)
@@ -465,110 +465,118 @@ static int set_tracing_thresh(struct perf_ftrace *ftrace)
        return 0;
 }
 
-static int __cmd_ftrace(struct perf_ftrace *ftrace, int argc, const char **argv)
+static int set_tracing_options(struct perf_ftrace *ftrace)
 {
-       char *trace_file;
-       int trace_fd;
-       char buf[4096];
-       struct pollfd pollfd = {
-               .events = POLLIN,
-       };
-
-       if (!(perf_cap__capable(CAP_PERFMON) ||
-             perf_cap__capable(CAP_SYS_ADMIN))) {
-               pr_err("ftrace only works for %s!\n",
-#ifdef HAVE_LIBCAP_SUPPORT
-               "users with the CAP_PERFMON or CAP_SYS_ADMIN capability"
-#else
-               "root"
-#endif
-               );
-               return -1;
-       }
-
-       signal(SIGINT, sig_handler);
-       signal(SIGUSR1, sig_handler);
-       signal(SIGCHLD, sig_handler);
-       signal(SIGPIPE, sig_handler);
-
-       if (ftrace->list_avail_functions)
-               return read_tracing_file_to_stdout("available_filter_functions");
-
-       if (reset_tracing_files(ftrace) < 0) {
-               pr_err("failed to reset ftrace\n");
-               goto out;
-       }
-
-       /* reset ftrace buffer */
-       if (write_tracing_file("trace", "0") < 0)
-               goto out;
-
-       if (argc && perf_evlist__prepare_workload(ftrace->evlist,
-                               &ftrace->target, argv, false,
-                               ftrace__workload_exec_failed_signal) < 0) {
-               goto out;
-       }
-
        if (set_tracing_pid(ftrace) < 0) {
                pr_err("failed to set ftrace pid\n");
-               goto out_reset;
+               return -1;
        }
 
        if (set_tracing_cpu(ftrace) < 0) {
                pr_err("failed to set tracing cpumask\n");
-               goto out_reset;
+               return -1;
        }
 
        if (set_tracing_func_stack_trace(ftrace) < 0) {
                pr_err("failed to set tracing option func_stack_trace\n");
-               goto out_reset;
+               return -1;
        }
 
        if (set_tracing_func_irqinfo(ftrace) < 0) {
                pr_err("failed to set tracing option irq-info\n");
-               goto out_reset;
+               return -1;
        }
 
        if (set_tracing_filters(ftrace) < 0) {
                pr_err("failed to set tracing filters\n");
-               goto out_reset;
+               return -1;
        }
 
        if (set_tracing_depth(ftrace) < 0) {
                pr_err("failed to set graph depth\n");
-               goto out_reset;
+               return -1;
        }
 
        if (set_tracing_percpu_buffer_size(ftrace) < 0) {
                pr_err("failed to set tracing per-cpu buffer size\n");
-               goto out_reset;
+               return -1;
        }
 
        if (set_tracing_trace_inherit(ftrace) < 0) {
                pr_err("failed to set tracing option function-fork\n");
-               goto out_reset;
+               return -1;
        }
 
        if (set_tracing_sleep_time(ftrace) < 0) {
                pr_err("failed to set tracing option sleep-time\n");
-               goto out_reset;
+               return -1;
        }
 
        if (set_tracing_funcgraph_irqs(ftrace) < 0) {
                pr_err("failed to set tracing option funcgraph-irqs\n");
-               goto out_reset;
+               return -1;
        }
 
        if (set_tracing_funcgraph_verbose(ftrace) < 0) {
                pr_err("failed to set tracing option funcgraph-proc/funcgraph-abstime\n");
-               goto out_reset;
+               return -1;
        }
 
        if (set_tracing_thresh(ftrace) < 0) {
                pr_err("failed to set tracing thresh\n");
-               goto out_reset;
+               return -1;
+       }
+
+       return 0;
+}
+
+static int __cmd_ftrace(struct perf_ftrace *ftrace, int argc, const char **argv)
+{
+       char *trace_file;
+       int trace_fd;
+       char buf[4096];
+       struct pollfd pollfd = {
+               .events = POLLIN,
+       };
+
+       if (!(perf_cap__capable(CAP_PERFMON) ||
+             perf_cap__capable(CAP_SYS_ADMIN))) {
+               pr_err("ftrace only works for %s!\n",
+#ifdef HAVE_LIBCAP_SUPPORT
+               "users with the CAP_PERFMON or CAP_SYS_ADMIN capability"
+#else
+               "root"
+#endif
+               );
+               return -1;
        }
 
+       signal(SIGINT, sig_handler);
+       signal(SIGUSR1, sig_handler);
+       signal(SIGCHLD, sig_handler);
+       signal(SIGPIPE, sig_handler);
+
+       if (ftrace->list_avail_functions)
+               return read_tracing_file_to_stdout("available_filter_functions");
+
+       if (reset_tracing_files(ftrace) < 0) {
+               pr_err("failed to reset ftrace\n");
+               goto out;
+       }
+
+       /* reset ftrace buffer */
+       if (write_tracing_file("trace", "0") < 0)
+               goto out;
+
+       if (argc && perf_evlist__prepare_workload(ftrace->evlist,
+                               &ftrace->target, argv, false,
+                               ftrace__workload_exec_failed_signal) < 0) {
+               goto out;
+       }
+
+       if (set_tracing_options(ftrace) < 0)
+               goto out_reset;
+
        if (write_tracing_file("current_tracer", ftrace->tracer) < 0) {
                pr_err("failed to set current_tracer to %s\n", ftrace->tracer);
                goto out_reset;