X-Git-Url: https://git.karo-electronics.de/?a=blobdiff_plain;f=init%2Fcalibrate.c;h=24df7976816c6ca99f3403f97444f8e49f69a0a7;hb=9be08c5804ae4ad96ec22d0b1e71e630803a85ea;hp=aae2f40fea4cbea200f0658c7f6afddb60f1d934;hpb=603f2e6d378948bf5e5ac04d98673761362a3b79;p=mv-sheeva.git diff --git a/init/calibrate.c b/init/calibrate.c index aae2f40fea4..24df7976816 100644 --- a/init/calibrate.c +++ b/init/calibrate.c @@ -9,6 +9,7 @@ #include #include #include +#include unsigned long lpj_fine; unsigned long preset_lpj; @@ -243,12 +244,19 @@ recalibrate: return lpj; } +static DEFINE_PER_CPU(unsigned long, cpu_loops_per_jiffy) = { 0 }; + void __cpuinit calibrate_delay(void) { unsigned long lpj; static bool printed; + int this_cpu = smp_processor_id(); - if (preset_lpj) { + if (per_cpu(cpu_loops_per_jiffy, this_cpu)) { + lpj = per_cpu(cpu_loops_per_jiffy, this_cpu); + pr_info("Calibrating delay loop (skipped) " + "already calibrated this CPU"); + } else if (preset_lpj) { lpj = preset_lpj; if (!printed) pr_info("Calibrating delay loop (skipped) " @@ -266,6 +274,7 @@ void __cpuinit calibrate_delay(void) pr_info("Calibrating delay loop... "); lpj = calibrate_delay_converge(); } + per_cpu(cpu_loops_per_jiffy, this_cpu) = lpj; if (!printed) pr_cont("%lu.%02lu BogoMIPS (lpj=%lu)\n", lpj/(500000/HZ),