]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ENGR00211169-1 [SMP]Need to update loops_per_jiffy when cpufreq is changed
authorAnson Huang <b20788@freescale.com>
Mon, 4 Jun 2012 12:50:53 +0000 (20:50 +0800)
committerLothar Waßmann <LW@KARO-electronics.de>
Fri, 24 May 2013 06:34:46 +0000 (08:34 +0200)
Need to update loops_per_jiffy when cpufreq is changed, our platform
only change the loops_per_jiffy of per_cpu cpu_data, we need to update
it to global loops_per_jiffy which is used for udelay.

Signed-off-by: Anson Huang <b20788@freescale.com>
init/calibrate.c

index 24df7976816c6ca99f3403f97444f8e49f69a0a7..ebab7b344a65a4a5893091f29e3fddbd5c3abb6a 100644 (file)
@@ -10,6 +10,7 @@
 #include <linux/timex.h>
 #include <linux/smp.h>
 #include <linux/percpu.h>
+#include <asm/cpu.h>
 
 unsigned long lpj_fine;
 unsigned long preset_lpj;
@@ -244,16 +245,14 @@ 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 (per_cpu(cpu_loops_per_jiffy, this_cpu)) {
-               lpj = per_cpu(cpu_loops_per_jiffy, this_cpu);
+       if (per_cpu(cpu_data, this_cpu).loops_per_jiffy) {
+               lpj = per_cpu(cpu_data, this_cpu).loops_per_jiffy;
                pr_info("Calibrating delay loop (skipped) "
                                "already calibrated this CPU");
        } else if (preset_lpj) {
@@ -274,7 +273,7 @@ void __cpuinit calibrate_delay(void)
                        pr_info("Calibrating delay loop... ");
                lpj = calibrate_delay_converge();
        }
-       per_cpu(cpu_loops_per_jiffy, this_cpu) = lpj;
+       per_cpu(cpu_data, this_cpu).loops_per_jiffy = lpj;
        if (!printed)
                pr_cont("%lu.%02lu BogoMIPS (lpj=%lu)\n",
                        lpj/(500000/HZ),