cpufreq: Revert "cpufreq: Don't iterate over all CPUs when suspending and resuming...
authorMark Brown <broonie@linaro.org>
Mon, 9 Mar 2015 12:25:38 +0000 (12:25 +0000)
committerMark Brown <broonie@kernel.org>
Mon, 9 Mar 2015 12:26:10 +0000 (12:26 +0000)
This reverts commit 212df5dd3212092602119d03a2f5d3a27be77ce4.

The commit it's fixing has too many other dependencies.

Signed-off-by: Mark Brown <broonie@linaro.org>
drivers/cpufreq/cpufreq.c

index ae9d9dc6b79bcb9eff65f58451d36ba7858b87bc..d444bfe83f133d454e232a2c1c3eb3ceaf05121c 100644 (file)
@@ -1293,6 +1293,7 @@ static struct subsys_interface cpufreq_interface = {
 void cpufreq_suspend(void)
 {
        struct cpufreq_policy *policy;
+       int cpu;
 
        if (!cpufreq_driver)
                return;
@@ -1302,15 +1303,20 @@ void cpufreq_suspend(void)
 
        pr_debug("%s: Suspending Governors\n", __func__);
 
-       policy = cpufreq_cpu_get(0);
+       for_each_possible_cpu(cpu) {
+               if (!cpu_online(cpu))
+                       continue;
+
+               policy = cpufreq_cpu_get(cpu);
 
-       if (__cpufreq_governor(policy, CPUFREQ_GOV_STOP))
-               pr_err("%s: Failed to stop governor for policy: %p\n",
-                       __func__, policy);
-       else if (cpufreq_driver->suspend
-           && cpufreq_driver->suspend(policy))
-               pr_err("%s: Failed to suspend driver: %p\n", __func__,
-                       policy);
+               if (__cpufreq_governor(policy, CPUFREQ_GOV_STOP))
+                       pr_err("%s: Failed to stop governor for policy: %p\n",
+                               __func__, policy);
+               else if (cpufreq_driver->suspend
+                   && cpufreq_driver->suspend(policy))
+                       pr_err("%s: Failed to suspend driver: %p\n", __func__,
+                               policy);
+       }
 
        cpufreq_suspended = true;
 }
@@ -1324,6 +1330,7 @@ void cpufreq_suspend(void)
 void cpufreq_resume(void)
 {
        struct cpufreq_policy *policy;
+       int cpu;
 
        if (!cpufreq_driver)
                return;
@@ -1335,18 +1342,29 @@ void cpufreq_resume(void)
 
        cpufreq_suspended = false;
 
-       policy = cpufreq_cpu_get(0);
-
-       if (__cpufreq_governor(policy, CPUFREQ_GOV_START)
-           || __cpufreq_governor(policy, CPUFREQ_GOV_LIMITS))
-               pr_err("%s: Failed to start governor for policy: %p\n",
-                       __func__, policy);
-       else if (cpufreq_driver->resume
-           && cpufreq_driver->resume(policy))
-               pr_err("%s: Failed to resume driver: %p\n", __func__,
-                       policy);
+       for_each_possible_cpu(cpu) {
+               if (!cpu_online(cpu))
+                       continue;
 
-       schedule_work(&policy->update);
+               policy = cpufreq_cpu_get(cpu);
+
+               if (__cpufreq_governor(policy, CPUFREQ_GOV_START)
+                   || __cpufreq_governor(policy, CPUFREQ_GOV_LIMITS))
+                       pr_err("%s: Failed to start governor for policy: %p\n",
+                               __func__, policy);
+               else if (cpufreq_driver->resume
+                   && cpufreq_driver->resume(policy))
+                       pr_err("%s: Failed to resume driver: %p\n", __func__,
+                               policy);
+
+               /*
+                * schedule call cpufreq_update_policy() for boot CPU, i.e. last
+                * policy in list. It will verify that the current freq is in
+                * sync with what we believe it to be.
+                */
+               if (cpu == 0)
+                       schedule_work(&policy->update);
+       }
 }
 
 /**