diff options
author | Steven Rostedt <rostedt@goodmis.org> | 2008-11-12 00:01:27 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-11-12 11:23:36 +0100 |
commit | 47e74f2ba8fbf9fb1378e2524e6cfdc2fb37f160 (patch) | |
tree | 7d49bf91e5409c432b259c26fcadff0450dffe43 /kernel | |
parent | c1e7abbc7afc97367cd77c8f2895c2169a8f9c87 (diff) | |
download | linux-stable-47e74f2ba8fbf9fb1378e2524e6cfdc2fb37f160.tar.gz linux-stable-47e74f2ba8fbf9fb1378e2524e6cfdc2fb37f160.tar.bz2 linux-stable-47e74f2ba8fbf9fb1378e2524e6cfdc2fb37f160.zip |
ring-buffer: no preempt for sched_clock()
Impact: disable preemption when calling sched_clock()
The ring_buffer_time_stamp still uses sched_clock as its counter.
But it is a bug to call it with preemption enabled. This requirement
should not be pushed to the ring_buffer_time_stamp callers, so
the ring_buffer_time_stamp needs to disable preemption when calling
sched_clock.
Signed-off-by: Steven Rostedt <srostedt@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/trace/ring_buffer.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index b08ee9f00c8d..231db209fa82 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -51,8 +51,14 @@ void tracing_off(void) /* FIXME!!! */ u64 ring_buffer_time_stamp(int cpu) { + u64 time; + + preempt_disable_notrace(); /* shift to debug/test normalization and TIME_EXTENTS */ - return sched_clock() << DEBUG_SHIFT; + time = sched_clock() << DEBUG_SHIFT; + preempt_enable_notrace(); + + return time; } void ring_buffer_normalize_time_stamp(int cpu, u64 *ts) |