diff options
author | Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> | 2015-04-24 04:54:44 -0400 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2015-08-06 02:36:23 -0400 |
commit | 197165d44925bd0fa892990851dee4d312a44b39 (patch) | |
tree | 5a3c35443e155b69a87456624ce458ee08a4ba08 | |
parent | 35a7f41cc6bb7013e344502b03c5583d04228bd3 (diff) |
powerpc/ftrace: add powerpc timebase as a trace clock source
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>
-rw-r--r-- | Documentation/trace/ftrace.txt | 5 | ||||
-rw-r--r-- | arch/powerpc/include/asm/Kbuild | 1 | ||||
-rw-r--r-- | arch/powerpc/include/asm/trace_clock.h | 19 | ||||
-rw-r--r-- | arch/powerpc/kernel/Makefile | 1 | ||||
-rw-r--r-- | arch/powerpc/kernel/trace_clock.c | 15 |
5 files changed, 40 insertions, 1 deletions
diff --git a/Documentation/trace/ftrace.txt b/Documentation/trace/ftrace.txt index 7ddb1e319f84..87bb4aa6a6b9 100644 --- a/Documentation/trace/ftrace.txt +++ b/Documentation/trace/ftrace.txt | |||
@@ -346,6 +346,11 @@ of ftrace. Here is a list of some of the key files: | |||
346 | x86-tsc: Architectures may define their own clocks. For | 346 | x86-tsc: Architectures may define their own clocks. For |
347 | example, x86 uses its own TSC cycle clock here. | 347 | example, x86 uses its own TSC cycle clock here. |
348 | 348 | ||
349 | ppc-tb: This uses the powerpc timebase register value. | ||
350 | This is in sync across CPUs and can also be used | ||
351 | to correlate events across hypervisor/guest if | ||
352 | tb_offset is known. | ||
353 | |||
349 | To set a clock, simply echo the clock name into this file. | 354 | To set a clock, simply echo the clock name into this file. |
350 | 355 | ||
351 | echo global > trace_clock | 356 | echo global > trace_clock |
diff --git a/arch/powerpc/include/asm/Kbuild b/arch/powerpc/include/asm/Kbuild index 050712e1ce41..ab9f4e0ed4cf 100644 --- a/arch/powerpc/include/asm/Kbuild +++ b/arch/powerpc/include/asm/Kbuild | |||
@@ -6,5 +6,4 @@ generic-y += local64.h | |||
6 | generic-y += mcs_spinlock.h | 6 | generic-y += mcs_spinlock.h |
7 | generic-y += preempt.h | 7 | generic-y += preempt.h |
8 | generic-y += rwsem.h | 8 | generic-y += rwsem.h |
9 | generic-y += trace_clock.h | ||
10 | generic-y += vtime.h | 9 | 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 index 000000000000..cf1ee75ca069 --- /dev/null +++ b/arch/powerpc/include/asm/trace_clock.h | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * This program is free software; you can redistribute it and/or modify | ||
3 | * it under the terms of the GNU General Public License, version 2, as | ||
4 | * published by the Free Software Foundation. | ||
5 | * | ||
6 | * Copyright (C) 2015 Naveen N. Rao, IBM Corporation | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_PPC_TRACE_CLOCK_H | ||
10 | #define _ASM_PPC_TRACE_CLOCK_H | ||
11 | |||
12 | #include <linux/compiler.h> | ||
13 | #include <linux/types.h> | ||
14 | |||
15 | extern u64 notrace trace_clock_ppc_tb(void); | ||
16 | |||
17 | #define ARCH_TRACE_CLOCKS { trace_clock_ppc_tb, "ppc-tb", 0 }, | ||
18 | |||
19 | #endif /* _ASM_PPC_TRACE_CLOCK_H */ | ||
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index 12868b1c4e05..ba336930d448 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile | |||
@@ -118,6 +118,7 @@ obj-$(CONFIG_PPC_IO_WORKAROUNDS) += io-workarounds.o | |||
118 | obj-$(CONFIG_DYNAMIC_FTRACE) += ftrace.o | 118 | obj-$(CONFIG_DYNAMIC_FTRACE) += ftrace.o |
119 | obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o | 119 | obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o |
120 | obj-$(CONFIG_FTRACE_SYSCALLS) += ftrace.o | 120 | obj-$(CONFIG_FTRACE_SYSCALLS) += ftrace.o |
121 | obj-$(CONFIG_TRACING) += trace_clock.o | ||
121 | 122 | ||
122 | ifneq ($(CONFIG_PPC_INDIRECT_PIO),y) | 123 | ifneq ($(CONFIG_PPC_INDIRECT_PIO),y) |
123 | obj-y += iomap.o | 124 | obj-y += iomap.o |
diff --git a/arch/powerpc/kernel/trace_clock.c b/arch/powerpc/kernel/trace_clock.c new file mode 100644 index 000000000000..49170690946d --- /dev/null +++ b/arch/powerpc/kernel/trace_clock.c | |||
@@ -0,0 +1,15 @@ | |||
1 | /* | ||
2 | * This program is free software; you can redistribute it and/or modify | ||
3 | * it under the terms of the GNU General Public License, version 2, as | ||
4 | * published by the Free Software Foundation. | ||
5 | * | ||
6 | * Copyright (C) 2015 Naveen N. Rao, IBM Corporation | ||
7 | */ | ||
8 | |||
9 | #include <asm/trace_clock.h> | ||
10 | #include <asm/time.h> | ||
11 | |||
12 | u64 notrace trace_clock_ppc_tb(void) | ||
13 | { | ||
14 | return get_tb(); | ||
15 | } | ||