| From aae760ed21cd690fe8a6db9f3a177ad55d7e12ab Mon Sep 17 00:00:00 2001 |
| From: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com> |
| Date: Fri, 12 Jul 2013 03:45:37 +0530 |
| Subject: cpufreq: Revert commit a66b2e to fix suspend/resume regression |
| |
| From: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com> |
| |
| 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> |
| |
| --- |
| drivers/cpufreq/cpufreq.c | 4 +++- |
| drivers/cpufreq/cpufreq_stats.c | 6 ++---- |
| 2 files changed, 5 insertions(+), 5 deletions(-) |
| |
| --- a/drivers/cpufreq/cpufreq.c |
| +++ b/drivers/cpufreq/cpufreq.c |
| @@ -1837,13 +1837,15 @@ static int __cpuinit cpufreq_cpu_callbac |
| if (dev) { |
| switch (action) { |
| case CPU_ONLINE: |
| + case CPU_ONLINE_FROZEN: |
| cpufreq_add_dev(dev, NULL); |
| break; |
| case CPU_DOWN_PREPARE: |
| - case CPU_UP_CANCELED_FROZEN: |
| + case CPU_DOWN_PREPARE_FROZEN: |
| __cpufreq_remove_dev(dev, NULL); |
| break; |
| case CPU_DOWN_FAILED: |
| + case CPU_DOWN_FAILED_FROZEN: |
| cpufreq_add_dev(dev, NULL); |
| break; |
| } |
| --- a/drivers/cpufreq/cpufreq_stats.c |
| +++ b/drivers/cpufreq/cpufreq_stats.c |
| @@ -353,13 +353,11 @@ static int __cpuinit cpufreq_stat_cpu_ca |
| cpufreq_update_policy(cpu); |
| break; |
| case CPU_DOWN_PREPARE: |
| + case CPU_DOWN_PREPARE_FROZEN: |
| cpufreq_stats_free_sysfs(cpu); |
| break; |
| case CPU_DEAD: |
| - cpufreq_stats_free_table(cpu); |
| - break; |
| - case CPU_UP_CANCELED_FROZEN: |
| - cpufreq_stats_free_sysfs(cpu); |
| + case CPU_DEAD_FROZEN: |
| cpufreq_stats_free_table(cpu); |
| break; |
| } |