X-Git-Url: http://www.pilppa.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=kernel%2Fsched_clock.c;h=819f17ac796efeeee1068efe3e6a27ac952d3a16;hb=8302294f43250dc337108c51882a6007f2b1e2e0;hp=390f33234bd007ea41da7006f252e715b6293b43;hpb=4fe70410d9a219dabb47328effccae7e7f2a6e26;p=linux-2.6-omap-h63xx.git 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 +#include #include #include #include @@ -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();