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 <namhy...@kernel.org>
Signed-off-by: Changbin Du <changbin...@gmail.com>
---
 tools/perf/builtin-ftrace.c | 118 +++++++++++++++++++-----------------
 1 file changed, 63 insertions(+), 55 deletions(-)

diff --git a/tools/perf/builtin-ftrace.c b/tools/perf/builtin-ftrace.c
index b07f71722b97..4551d4d4bcc5 100644
--- a/tools/perf/builtin-ftrace.c
+++ b/tools/perf/builtin-ftrace.c
@@ -463,110 +463,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;
-- 
2.25.1

Reply via email to