diff options
author | Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com> | 2013-07-11 18:15:37 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-07-25 17:07:23 -0400 |
commit | 9d3ce4af3be0235d4cf41ea9fd774205a32e58a2 (patch) | |
tree | b98102246d1dab3b467e5b4af89b0289b1fb8efb /drivers/cpufreq | |
parent | 382b9efb7be2d07e51f0a491ecd0a985e1ceb86e (diff) |
cpufreq: Revert commit a66b2e to fix suspend/resume regression
commit aae760ed21cd690fe8a6db9f3a177ad55d7e12ab upstream.
commit a66b2e (cpufreq: Preserve sysfs files across suspend/resume)
has unfortunately caused several things in the cpufreq subsystem to
break subtly after a suspend/resume cycle.
The intention of that patch was to retain the file permissions of the
cpufreq related sysfs files across suspend/resume. To achieve that,
the commit completely removed the calls to cpufreq_add_dev() and
__cpufreq_remove_dev() during suspend/resume transitions. But the
problem is that those functions do 2 kinds of things:
1. Low-level initialization/tear-down that are critical to the
correct functioning of cpufreq-core.
2. Kobject and sysfs related initialization/teardown.
Ideally we should have reorganized the code to cleanly separate these
two responsibilities, and skipped only the sysfs related parts during
suspend/resume. Since we skipped the entire callbacks instead (which
also included some CPU and cpufreq-specific critical components),
cpufreq subsystem started behaving erratically after suspend/resume.
So revert the commit to fix the regression. We'll revisit and address
the original goal of that commit separately, since it involves quite a
bit of careful code reorganization and appears to be non-trivial.
(While reverting the commit, note that another commit f51e1eb
(cpufreq: Fix cpufreq regression after suspend/resume) already
reverted part of the original set of changes. So revert only the
remaining ones).
Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Tested-by: Paul Bolle <pebolle@tiscali.nl>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/cpufreq')
-rw-r--r-- | drivers/cpufreq/cpufreq.c | 4 | ||||
-rw-r--r-- | drivers/cpufreq/cpufreq_stats.c | 6 |
2 files changed, 5 insertions, 5 deletions
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index 2d53f47d1747..178fe7a69056 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c | |||
@@ -1837,13 +1837,15 @@ static int __cpuinit cpufreq_cpu_callback(struct notifier_block *nfb, | |||
1837 | if (dev) { | 1837 | if (dev) { |
1838 | switch (action) { | 1838 | switch (action) { |
1839 | case CPU_ONLINE: | 1839 | case CPU_ONLINE: |
1840 | case CPU_ONLINE_FROZEN: | ||
1840 | cpufreq_add_dev(dev, NULL); | 1841 | cpufreq_add_dev(dev, NULL); |
1841 | break; | 1842 | break; |
1842 | case CPU_DOWN_PREPARE: | 1843 | case CPU_DOWN_PREPARE: |
1843 | case CPU_UP_CANCELED_FROZEN: | 1844 | case CPU_DOWN_PREPARE_FROZEN: |
1844 | __cpufreq_remove_dev(dev, NULL); | 1845 | __cpufreq_remove_dev(dev, NULL); |
1845 | break; | 1846 | break; |
1846 | case CPU_DOWN_FAILED: | 1847 | case CPU_DOWN_FAILED: |
1848 | case CPU_DOWN_FAILED_FROZEN: | ||
1847 | cpufreq_add_dev(dev, NULL); | 1849 | cpufreq_add_dev(dev, NULL); |
1848 | break; | 1850 | break; |
1849 | } | 1851 | } |
diff --git a/drivers/cpufreq/cpufreq_stats.c b/drivers/cpufreq/cpufreq_stats.c index 591b6fb641b2..bfd6273fd873 100644 --- a/drivers/cpufreq/cpufreq_stats.c +++ b/drivers/cpufreq/cpufreq_stats.c | |||
@@ -353,13 +353,11 @@ static int __cpuinit cpufreq_stat_cpu_callback(struct notifier_block *nfb, | |||
353 | cpufreq_update_policy(cpu); | 353 | cpufreq_update_policy(cpu); |
354 | break; | 354 | break; |
355 | case CPU_DOWN_PREPARE: | 355 | case CPU_DOWN_PREPARE: |
356 | case CPU_DOWN_PREPARE_FROZEN: | ||
356 | cpufreq_stats_free_sysfs(cpu); | 357 | cpufreq_stats_free_sysfs(cpu); |
357 | break; | 358 | break; |
358 | case CPU_DEAD: | 359 | case CPU_DEAD: |
359 | cpufreq_stats_free_table(cpu); | 360 | case CPU_DEAD_FROZEN: |
360 | break; | ||
361 | case CPU_UP_CANCELED_FROZEN: | ||
362 | cpufreq_stats_free_sysfs(cpu); | ||
363 | cpufreq_stats_free_table(cpu); | 361 | cpufreq_stats_free_table(cpu); |
364 | break; | 362 | break; |
365 | } | 363 | } |