From: Ingo Molnar Date: Thu, 26 Feb 2009 20:21:59 +0000 (+0100) Subject: Merge branch 'sched/clock' into tracing/ftrace X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=5d0859cef29167d45dc6cf89d19712145e6005d6;p=linux-2.6-omap-h63xx.git Merge branch 'sched/clock' into tracing/ftrace Conflicts: kernel/sched_clock.c --- 5d0859cef29167d45dc6cf89d19712145e6005d6 diff --cc kernel/sched_clock.c index db69174b117,a755d023805..f7602da84c4 --- a/kernel/sched_clock.c +++ b/kernel/sched_clock.c @@@ -24,12 -24,11 +24,12 @@@ * The clock: sched_clock_cpu() is monotonic per cpu, and should be somewhat * consistent between cpus (never more than 2 jiffies difference). */ - #include - #include #include - #include - #include +#include + #include + #include + #include + #include /* * Scheduler clock - returns current time in nanosec units. @@@ -149,19 -155,13 +156,23 @@@ static void lock_double_clock(struct sc u64 sched_clock_cpu(int cpu) { - struct sched_clock_data *scd = cpu_sdc(cpu); u64 now, clock, this_clock, remote_clock; + struct sched_clock_data *scd; + + if (sched_clock_stable) + return sched_clock(); + /* + * 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; + + scd = cpu_sdc(cpu); WARN_ON_ONCE(!irqs_disabled()); now = sched_clock();