powerpc/ftrace: add powerpc timebase as a trace clock source
authorNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Fri, 24 Apr 2015 08:54:44 +0000 (14:24 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 6 Aug 2015 06:36:23 +0000 (16:36 +1000)
Add a new powerpc-specific trace clock using the timebase register,
similar to x86-tsc. This gives us
- a fast, monotonic, hardware clock source for trace entries, and
- a clock that can be used to correlate events across cpus as well as across
  hypervisor and guests.

Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Acked-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Documentation/trace/ftrace.txt
arch/powerpc/include/asm/Kbuild
arch/powerpc/include/asm/trace_clock.h [new file with mode: 0644]
arch/powerpc/kernel/Makefile
arch/powerpc/kernel/trace_clock.c [new file with mode: 0644]

index 7ddb1e319f84d1313f9c9ca0009c9f3ae5c64ef8..87bb4aa6a6b98582e8cd4b97b707a62dc75c12ae 100644 (file)
@@ -346,6 +346,11 @@ of ftrace. Here is a list of some of the key files:
          x86-tsc: Architectures may define their own clocks. For
                   example, x86 uses its own TSC cycle clock here.
 
+         ppc-tb: This uses the powerpc timebase register value.
+                 This is in sync across CPUs and can also be used
+                 to correlate events across hypervisor/guest if
+                 tb_offset is known.
+
        To set a clock, simply echo the clock name into this file.
 
          echo global > trace_clock
index 050712e1ce41266ce274bdcdd8b6ab1722cb64fb..ab9f4e0ed4cfcfd48a8d232fe20d0482739a22c5 100644 (file)
@@ -6,5 +6,4 @@ generic-y += local64.h
 generic-y += mcs_spinlock.h
 generic-y += preempt.h
 generic-y += rwsem.h
-generic-y += trace_clock.h
 generic-y += vtime.h
diff --git a/arch/powerpc/include/asm/trace_clock.h b/arch/powerpc/include/asm/trace_clock.h
new file mode 100644 (file)
index 0000000..cf1ee75
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation.
+ *
+ * Copyright (C) 2015 Naveen N. Rao, IBM Corporation
+ */
+
+#ifndef _ASM_PPC_TRACE_CLOCK_H
+#define _ASM_PPC_TRACE_CLOCK_H
+
+#include <linux/compiler.h>
+#include <linux/types.h>
+
+extern u64 notrace trace_clock_ppc_tb(void);
+
+#define ARCH_TRACE_CLOCKS { trace_clock_ppc_tb, "ppc-tb", 0 },
+
+#endif  /* _ASM_PPC_TRACE_CLOCK_H */
index 12868b1c4e0562613a57ba956f95667f1d37e87c..ba336930d448792c235344cc9afb1a9e458f9a93 100644 (file)
@@ -118,6 +118,7 @@ obj-$(CONFIG_PPC_IO_WORKAROUNDS)    += io-workarounds.o
 obj-$(CONFIG_DYNAMIC_FTRACE)   += ftrace.o
 obj-$(CONFIG_FUNCTION_GRAPH_TRACER)    += ftrace.o
 obj-$(CONFIG_FTRACE_SYSCALLS)  += ftrace.o
+obj-$(CONFIG_TRACING)          += trace_clock.o
 
 ifneq ($(CONFIG_PPC_INDIRECT_PIO),y)
 obj-y                          += iomap.o
diff --git a/arch/powerpc/kernel/trace_clock.c b/arch/powerpc/kernel/trace_clock.c
new file mode 100644 (file)
index 0000000..4917069
--- /dev/null
@@ -0,0 +1,15 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation.
+ *
+ * Copyright (C) 2015 Naveen N. Rao, IBM Corporation
+ */
+
+#include <asm/trace_clock.h>
+#include <asm/time.h>
+
+u64 notrace trace_clock_ppc_tb(void)
+{
+       return get_tb();
+}