From: Namhyung Kim <namhyung....@lge.com>

The --clock (-c) option is for controlling trace_clock.  Default to
'perf' if exists, or 'local'.

Cc: Steven Rostedt <rost...@goodmis.org>
Cc: Frederic Weisbecker <fweis...@gmail.com>
Signed-off-by: Namhyung Kim <namhy...@kernel.org>
---
 tools/perf/builtin-ftrace.c | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/tools/perf/builtin-ftrace.c b/tools/perf/builtin-ftrace.c
index ed889d4dd0ba..25a07db864b4 100644
--- a/tools/perf/builtin-ftrace.c
+++ b/tools/perf/builtin-ftrace.c
@@ -35,6 +35,7 @@ struct perf_ftrace {
        struct perf_target target;
        const char *tracer;
        const char *dirname;
+       const char *clock;
        struct pevent *pevent;
        bool show_full_info;
 };
@@ -114,6 +115,9 @@ static int reset_tracing_files(struct perf_ftrace *ftrace 
__maybe_unused)
        if (reset_tracing_cpu() < 0)
                return -1;
 
+       if (write_tracing_file("trace_clock", "local") < 0)
+               return -1;
+
        return 0;
 }
 
@@ -188,6 +192,24 @@ static int reset_tracing_cpu(void)
        return 0;
 }
 
+static int set_tracing_clock(struct perf_ftrace *ftrace)
+{
+       const char *clock = ftrace->clock;
+
+       if (clock == NULL)
+               clock = "perf";
+
+       if (!write_tracing_file("trace_clock", clock))
+               return 0;
+
+       /* exit if user specified an invalid clock */
+       if (ftrace->clock)
+               return -1;
+
+       pr_debug("'perf' clock is not supported.. falling back to 'local' 
clock\n");
+       return write_tracing_file("trace_clock", "local");
+}
+
 static int setup_tracing_files(struct perf_ftrace *ftrace)
 {
        int ret = -1;
@@ -213,6 +235,11 @@ static int setup_tracing_files(struct perf_ftrace *ftrace)
                goto out;
        }
 
+       if (set_tracing_clock(ftrace) < 0) {
+               pr_err("failed to set trace clock\n");
+               goto out;
+       }
+
        if (write_tracing_file("current_tracer", ftrace->tracer) < 0) {
                pr_err("failed to set current_tracer to %s\n", ftrace->tracer);
                goto out;
@@ -1475,6 +1502,8 @@ __cmd_ftrace_live(struct perf_ftrace *ftrace, int argc, 
const char **argv)
                    "system-wide collection from all CPUs"),
        OPT_STRING('C', "cpu", &ftrace->target.cpu_list, "cpu",
                    "list of cpus to monitor"),
+       OPT_STRING('c', "clock", &ftrace->clock, "clock",
+                   "clock to be used for tracer"),
        OPT_END()
        };
 
@@ -1517,6 +1546,8 @@ __cmd_ftrace_record(struct perf_ftrace *ftrace, int argc, 
const char **argv)
                    "list of cpus to monitor"),
        OPT_STRING('o', "output", &ftrace->dirname, "dirname",
                   "input directory name to use (default: perf.data)"),
+       OPT_STRING('c', "clock", &ftrace->clock, "clock",
+                   "clock to be used for tracer"),
        OPT_END()
        };
 
-- 
1.7.11.7

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to