tracing: Export tracing clock functions
PATCH 1/1 tracing: Export tracing clock functions
Critical tracepoint hooks shoud never call anything that takes a lock, so they are unable to call getrawmonotonic() or ktime_get().
Export the rest of the tracing clock functions so can be used in tracepoint hooks.
--- kernel/trace/trace_clock.c | 3 +++ 1 file changed, 3 insertions(+)
kernel/trace/trace_clock.c +3 -0
@@ -56,6 +56,7 @@ u64 notrace trace_clock(void) {return local_clock (); } +EXPORT_SYMBOL_GPL (trace_clock);/* * trace_jiffy_clock(): Simply use jiffies as a clock counter.
@@ -68,6 +69,7 @@ u64 notrace trace_clock_jiffies(void) {return jiffies_64_to_clock_t (jiffies_64 -INITIAL_JIFFIES ); } +EXPORT_SYMBOL_GPL (trace_clock_jiffies);/* * trace_clock_global(): special globally coherent trace clock
@@ -123,6 +125,7 @@ u64 notrace trace_clock_global(void)return now; } +EXPORT_SYMBOL_GPL (trace_clock_global);static atomic64_t trace_counter;
Signature · 1 line
2.4.0.rc3.3.g6eb1401
Steven Rostedt
maintainerQuoted 5 lines · On Thu, 30 Apr 2015 07:36:40 -0700 Jerry Snitselaar <[email protected]> wrote:
Critical tracepoint hooks shoud never call anything that takes a lock, so they are unable to call
getrawmonotonic()orktime_get().Export the rest of the tracing clock functions so can be used in tracepoint hooks.
A little background needs to be explained here.
A customer adds their own module to do some analysis and hooks to tracepoints to do so. They were using ktime_get() as their time source, but as that grabs a seq lock, it was causing deadlocks.
The tracing clocks were made for this purpose, and I find nothing wrong with letting users add their own modules (GPL of course) and adding their own hooks to the tracepoint code. I created it for that purpose. But if they need to do any timings, they must use lockless clocks, which the trace clocks are good for.
-- Steve
Quoted 5 lines
Cc Steven Rostedt <[email protected]>Cc Ingo Molnar <[email protected]>Signed-off-by Jerry Snitselaar <[email protected]>---
PATCH v2 1/1 tracing: Export tracing clock functions
In reply to Jerry SnitselaarCritical tracepoint hooks should never call anything that takes a lock, so they are unable to call getrawmonotonic() or ktime_get().
Export the rest of the tracing clock functions so can be used in tracepoint hooks.
Background: We have a customer that adds their own module and registers a tracepoint hook to sched_wakeup. They were using ktime_get() for a time source, but it grabs a seq lock and caused a deadlock to occur.
v2: added background info and fixed typo
--- kernel/trace/trace_clock.c | 3 +++ 1 file changed, 3 insertions(+)
kernel/trace/trace_clock.c +3 -0
@@ -56,6 +56,7 @@ u64 notrace trace_clock(void) {return local_clock (); } +EXPORT_SYMBOL_GPL (trace_clock);/* * trace_jiffy_clock(): Simply use jiffies as a clock counter.
@@ -68,6 +69,7 @@ u64 notrace trace_clock_jiffies(void) {return jiffies_64_to_clock_t (jiffies_64 -INITIAL_JIFFIES ); } +EXPORT_SYMBOL_GPL (trace_clock_jiffies);/* * trace_clock_global(): special globally coherent trace clock
@@ -123,6 +125,7 @@ u64 notrace trace_clock_global(void)return now; } +EXPORT_SYMBOL_GPL (trace_clock_global);static atomic64_t trace_counter;
Signature · 1 line
2.4.0.rc3.3.g6eb1401