perf ftrace: Factor out check_ftrace_capable()
authorNamhyung Kim <namhyung@kernel.org>
Mon, 29 Jul 2024 00:41:25 +0000 (17:41 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 31 Jul 2024 19:58:18 +0000 (16:58 -0300)
The check is a common part of the ftrace commands, let's move it out.

Reviewed-by: Ian Rogers <irogers@google.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Changbin Du <changbin.du@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt (VMware) <rostedt@goodmis.org>
Link: https://lore.kernel.org/lkml/20240729004127.238611-3-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-ftrace.c

index 33c52eb..978608e 100644 (file)
@@ -59,6 +59,22 @@ static void ftrace__workload_exec_failed_signal(int signo __maybe_unused,
        done = true;
 }
 
+static int check_ftrace_capable(void)
+{
+       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;
+       }
+       return 0;
+}
+
 static int __write_tracing_file(const char *name, const char *val, bool append)
 {
        char *file;
@@ -586,18 +602,6 @@ static int __cmd_ftrace(struct perf_ftrace *ftrace)
                .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;
-       }
-
        select_tracer(ftrace);
 
        if (reset_tracing_files(ftrace) < 0) {
@@ -902,18 +906,6 @@ static int __cmd_latency(struct perf_ftrace *ftrace)
        };
        int buckets[NUM_BUCKET] = { };
 
-       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;
-       }
-
        trace_fd = prepare_func_latency(ftrace);
        if (trace_fd < 0)
                goto out;
@@ -1220,6 +1212,10 @@ int cmd_ftrace(int argc, const char **argv)
        signal(SIGCHLD, sig_handler);
        signal(SIGPIPE, sig_handler);
 
+       ret = check_ftrace_capable();
+       if (ret < 0)
+               return -1;
+
        ret = perf_config(perf_ftrace_config, &ftrace);
        if (ret < 0)
                return -1;