aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSrivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>2013-07-29 18:55:25 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-08-07 17:02:49 -0400
commit5302c3fb2e62f4ca5e43e060491ba299f58c5231 (patch)
treee76c3698959994ac9587a9ef063361cf91577cf5 /drivers
parent8414809c6a1e8479e331e09254adb58b33a36d25 (diff)
cpufreq: Perform light-weight init/teardown during suspend/resume
Now that we have the infrastructure to perform a light-weight init/tear-down, use that in the cpufreq CPU hotplug notifier when invoked from the suspend/resume path. This also ensures that the file permissions of the cpufreq sysfs files are preserved across suspend/resume, something which commit a66b2e (cpufreq: Preserve sysfs files across suspend/resume) originally intended to do, but had to be reverted due to other problems. Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com> Acked-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/cpufreq/cpufreq.c18
-rw-r--r--drivers/cpufreq/cpufreq_stats.c2
2 files changed, 11 insertions, 9 deletions
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index e0ace3d9382c..370abb66babc 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -2040,22 +2040,26 @@ static int cpufreq_cpu_callback(struct notifier_block *nfb,
2040{ 2040{
2041 unsigned int cpu = (unsigned long)hcpu; 2041 unsigned int cpu = (unsigned long)hcpu;
2042 struct device *dev; 2042 struct device *dev;
2043 bool frozen = false;
2043 2044
2044 dev = get_cpu_device(cpu); 2045 dev = get_cpu_device(cpu);
2045 if (dev) { 2046 if (dev) {
2046 switch (action) { 2047
2048 if (action & CPU_TASKS_FROZEN)
2049 frozen = true;
2050
2051 switch (action & ~CPU_TASKS_FROZEN) {
2047 case CPU_ONLINE: 2052 case CPU_ONLINE:
2048 case CPU_ONLINE_FROZEN: 2053 __cpufreq_add_dev(dev, NULL, frozen);
2049 cpufreq_add_dev(dev, NULL);
2050 cpufreq_update_policy(cpu); 2054 cpufreq_update_policy(cpu);
2051 break; 2055 break;
2056
2052 case CPU_DOWN_PREPARE: 2057 case CPU_DOWN_PREPARE:
2053 case CPU_DOWN_PREPARE_FROZEN: 2058 __cpufreq_remove_dev(dev, NULL, frozen);
2054 __cpufreq_remove_dev(dev, NULL, false);
2055 break; 2059 break;
2060
2056 case CPU_DOWN_FAILED: 2061 case CPU_DOWN_FAILED:
2057 case CPU_DOWN_FAILED_FROZEN: 2062 __cpufreq_add_dev(dev, NULL, frozen);
2058 cpufreq_add_dev(dev, NULL);
2059 break; 2063 break;
2060 } 2064 }
2061 } 2065 }
diff --git a/drivers/cpufreq/cpufreq_stats.c b/drivers/cpufreq/cpufreq_stats.c
index bc73be225be5..cb3841355454 100644
--- a/drivers/cpufreq/cpufreq_stats.c
+++ b/drivers/cpufreq/cpufreq_stats.c
@@ -349,11 +349,9 @@ static int cpufreq_stat_cpu_callback(struct notifier_block *nfb,
349 349
350 switch (action) { 350 switch (action) {
351 case CPU_DOWN_PREPARE: 351 case CPU_DOWN_PREPARE:
352 case CPU_DOWN_PREPARE_FROZEN:
353 cpufreq_stats_free_sysfs(cpu); 352 cpufreq_stats_free_sysfs(cpu);
354 break; 353 break;
355 case CPU_DEAD: 354 case CPU_DEAD:
356 case CPU_DEAD_FROZEN:
357 cpufreq_stats_free_table(cpu); 355 cpufreq_stats_free_table(cpu);
358 break; 356 break;
359 } 357 }