lkml.org 
[lkml]   [2020]   [Aug]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v8 17/18] perf: ftrace: Add set_tracing_options() to set all trace options
    Date
    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>
    ---
    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 13abb737fd12..9da38dc8b542 100644
    --- a/tools/perf/builtin-ftrace.c
    +++ b/tools/perf/builtin-ftrace.c
    @@ -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;
    --
    2.25.1
    \
     
     \ /
      Last update: 2020-08-08 04:40    [W:3.412 / U:0.088 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site