diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-05 11:04:19 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-05 11:04:19 -0700 | 
| commit | 714f83d5d9f7c785f622259dad1f4fad12d64664 (patch) | |
| tree | 20563541ae438e11d686b4d629074eb002a481b7 /kernel/sched_clock.c | |
| parent | 8901e7ffc2fa78ede7ce9826dbad68a3a25dc2dc (diff) | |
| parent | 645dae969c3b8651c5bc7c54a1835ec03820f85f (diff) | |
| download | olio-linux-3.10-714f83d5d9f7c785f622259dad1f4fad12d64664.tar.xz olio-linux-3.10-714f83d5d9f7c785f622259dad1f4fad12d64664.zip  | |
Merge branch 'tracing-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'tracing-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (413 commits)
  tracing, net: fix net tree and tracing tree merge interaction
  tracing, powerpc: fix powerpc tree and tracing tree interaction
  ring-buffer: do not remove reader page from list on ring buffer free
  function-graph: allow unregistering twice
  trace: make argument 'mem' of trace_seq_putmem() const
  tracing: add missing 'extern' keywords to trace_output.h
  tracing: provide trace_seq_reserve()
  blktrace: print out BLK_TN_MESSAGE properly
  blktrace: extract duplidate code
  blktrace: fix memory leak when freeing struct blk_io_trace
  blktrace: fix blk_probes_ref chaos
  blktrace: make classic output more classic
  blktrace: fix off-by-one bug
  blktrace: fix the original blktrace
  blktrace: fix a race when creating blk_tree_root in debugfs
  blktrace: fix timestamp in binary output
  tracing, Text Edit Lock: cleanup
  tracing: filter fix for TRACE_EVENT_FORMAT events
  ftrace: Using FTRACE_WARN_ON() to check "freed record" in ftrace_release()
  x86: kretprobe-booster interrupt emulation code fix
  ...
Fix up trivial conflicts in
 arch/parisc/include/asm/ftrace.h
 include/linux/memory.h
 kernel/extable.c
 kernel/module.c
Diffstat (limited to 'kernel/sched_clock.c')
| -rw-r--r-- | kernel/sched_clock.c | 12 | 
1 files changed, 12 insertions, 0 deletions
diff --git a/kernel/sched_clock.c b/kernel/sched_clock.c index 390f33234bd..819f17ac796 100644 --- a/kernel/sched_clock.c +++ b/kernel/sched_clock.c @@ -25,6 +25,7 @@   * consistent between cpus (never more than 2 jiffies difference).   */  #include <linux/spinlock.h> +#include <linux/hardirq.h>  #include <linux/module.h>  #include <linux/percpu.h>  #include <linux/ktime.h> @@ -154,6 +155,17 @@ u64 sched_clock_cpu(int cpu)  		return sched_clock();  	scd = cpu_sdc(cpu); + +	/* +	 * Normally this is not called in NMI context - but if it is, +	 * trying to do any locking here is totally lethal. +	 */ +	if (unlikely(in_nmi())) +		return scd->clock; + +	if (unlikely(!sched_clock_running)) +		return 0ull; +  	WARN_ON_ONCE(!irqs_disabled());  	now = sched_clock();  |