From: Adeel Arshad <[email protected]>
Date: Fri, 03 Feb 2012 21:16:16 +0500
Subject: [PATCH] Exporting the Trace Clock to Userspace for ARM architecture

Description: To synchronise the Time Stamps of Kernel Space and User Space 
traces generated by Lttng we need to use the same clock source. So by Adding a 
new Posix Clock mapped to Trace Clock we are making this Trace Clock available 
to User Space as well.

Signed-off-by: Adeel Arshad <[email protected]>
---
 kernel/Makefile                       |    2 +
 kernel/trace-clock.c                  |   56 ++++++++++++++++++++++++++++++++++
 mach-omap2/include/mach/trace-clock.h |   16 +++++++++
 plat-omap/include/plat/trace-clock.h  |   16 +++++++++
 4 files changed, 90 insertions(+)

diff -uprN -X modified/Documentation/dontdiff orig/arch/arm/kernel/Makefile 
modified/arch/arm/kernel/Makefile
--- orig/arch/arm/kernel/Makefile       2012-02-01 18:52:11.541452077 +0500
+++ modified/arch/arm/kernel/Makefile   2012-02-01 18:25:55.281859440 +0500
@@ -39,6 +39,8 @@ obj-$(CONFIG_KGDB)            += kgdb.o
 obj-$(CONFIG_ARM_UNWIND)       += unwind.o
 obj-$(CONFIG_HAVE_TCM)         += tcm.o
 
+obj-$(CONFIG_HAVE_TRACE_CLOCK) += trace-clock.o
+
 obj-$(CONFIG_CRUNCH)           += crunch.o crunch-bits.o
 AFLAGS_crunch-bits.o           := -Wa,-mcpu=ep9312
 
diff -uprN -X modified/Documentation/dontdiff 
orig/arch/arm/kernel/trace-clock.c modified/arch/arm/kernel/trace-clock.c
--- orig/arch/arm/kernel/trace-clock.c  1970-01-01 05:00:00.000000000 +0500
+++ modified/arch/arm/kernel/trace-clock.c      2012-02-03 16:31:22.739631674 
+0500
@@ -0,0 +1,56 @@
+/*
+* arch/arm/kernel/trace-clock.c
+*
+* Exporting Trace clock to Userspace for ARM Architecture.
+*
+* Adeel Arshad <[email protected]>, January 2012
+*/
+
+#include <linux/module.h>
+#include <linux/trace-clock.h>
+#include <linux/timer.h>
+#include <linux/posix-timers.h>
+
+static int posix_get_trace(clockid_t which_clock, struct timespec *tp)
+{
+       union lttng_timespec *lts = (union lttng_timespec *) tp;
+
+       lts->lttng_ts = trace_clock_read64();
+       return 0;
+}
+
+static int posix_get_trace_freq(clockid_t which_clock, struct timespec *tp)
+{
+       union lttng_timespec *lts = (union lttng_timespec *) tp;
+
+       lts->lttng_ts = trace_clock_frequency();
+       return 0;
+}
+
+static int posix_get_trace_res(const clockid_t which_clock, struct timespec 
*tp)
+{
+       union lttng_timespec *lts = (union lttng_timespec *) tp;
+
+       lts->lttng_ts = TRACE_CLOCK_RES;
+       return 0;
+}
+
+static __init int init_trace_clock(void)
+{
+
+       struct k_clock clock_trace = {
+               .clock_getres = posix_get_trace_res,
+               .clock_get = posix_get_trace,
+       };
+       struct k_clock clock_trace_freq = {
+               .clock_getres = posix_get_trace_res,
+               .clock_get = posix_get_trace_freq,
+       };
+
+       register_posix_clock(CLOCK_TRACE, &clock_trace);
+       register_posix_clock(CLOCK_TRACE_FREQ, &clock_trace_freq);
+
+       return 0;
+}
+
+early_initcall(init_trace_clock);
diff -uprN -X modified/Documentation/dontdiff 
orig/arch/arm/mach-omap2/include/mach/trace-clock.h 
modified/arch/arm/mach-omap2/include/mach/trace-clock.h
--- orig/arch/arm/mach-omap2/include/mach/trace-clock.h 2012-02-01 
18:52:11.414609282 +0500
+++ modified/arch/arm/mach-omap2/include/mach/trace-clock.h     2012-02-03 
16:20:25.320061803 +0500
@@ -11,6 +11,22 @@
 #include <linux/timer.h>
 #include <plat/clock.h>
 
+#define TRACE_CLOCK_MIN_PROBE_DURATION 200
+#define TRACE_CLOCK_RES TRACE_CLOCK_MIN_PROBE_DURATION
+
+#ifndef CLOCK_TRACE_FREQ
+#define CLOCK_TRACE_FREQ       14
+#endif
+
+#ifndef CLOCK_TRACE
+#define CLOCK_TRACE    15
+#endif
+
+union lttng_timespec {
+       struct timespec ts;
+       u64 lttng_ts;
+};
+
 /*
  * Number of hardware clock bits. The higher order bits are expected to be 0.
  * If the hardware clock source has more than 32 bits, the bits higher than the
diff -uprN -X modified/Documentation/dontdiff 
orig/arch/arm/plat-omap/include/plat/trace-clock.h 
modified/arch/arm/plat-omap/include/plat/trace-clock.h
--- orig/arch/arm/plat-omap/include/plat/trace-clock.h  2012-02-01 
18:52:11.429012673 +0500
+++ modified/arch/arm/plat-omap/include/plat/trace-clock.h      2012-02-03 
16:24:00.458865642 +0500
@@ -11,6 +11,22 @@
 #include <linux/timer.h>
 #include <plat/clock.h>
 
+#define TRACE_CLOCK_MIN_PROBE_DURATION 200
+#define TRACE_CLOCK_RES        TRACE_CLOCK_MIN_PROBE_DURATION
+
+#ifndef CLOCK_TRACE_FREQ
+#define CLOCK_TRACE_FREQ       14
+#endif
+
+#ifndef CLOCK_TRACE
+#define CLOCK_TRACE    15
+#endif
+
+union lttng_timespec {
+       struct timespec ts;
+       u64 lttng_ts;
+};
+
 /*
  * Number of hardware clock bits. The higher order bits are expected to be 0.
  * If the hardware clock source has more than 32 bits, the bits higher than the



_______________________________________________
lttng-dev mailing list
[email protected]
http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to