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
