Skip to contentSkip to conversation

tracing: Export tracing clock functions

PATCH Superseded Jerry Snitselaar 2 participants 3 messages Apr 30, 2015 Tracing

lore
Share & tools
lore
#0 lore raw

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.

Cc Steven Rostedt <[email protected]>
Cc Ingo Molnar <[email protected]>
---
 kernel/trace/trace_clock.c | 3 +++
 1 file changed, 3 insertions(+)
kernel/trace/trace_clock.c +3 -0
index 57b67b1..0f06532 100644
@@ -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
maintainer
#1 lore raw
Quoted 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() or ktime_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]>

---

#2 lore raw

PATCH v2 1/1 tracing: Export tracing clock functions

In reply to Jerry Snitselaar

Critical 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

Cc Steven Rostedt <[email protected]>
Cc Ingo Molnar <[email protected]>
---
 kernel/trace/trace_clock.c | 3 +++
 1 file changed, 3 insertions(+)
kernel/trace/trace_clock.c +3 -0
index 57b67b1..0f06532 100644
@@ -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