linux3.10: add patch from -stable queue to fix suspend/resume regression.
This commit is contained in:
parent
97abc59914
commit
648d88c9e5
|
@ -0,0 +1,74 @@
|
|||
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).
|
||||
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
|
||||
---
|
||||
drivers/cpufreq/cpufreq.c | 4 +++-
|
||||
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 6a015ad..ccc6eab 100644
|
||||
--- drivers/cpufreq/cpufreq.c
|
||||
+++ drivers/cpufreq/cpufreq.c
|
||||
@@ -1941,13 +1941,15 @@ static int __cpuinit cpufreq_cpu_callback(struct notifier_block *nfb,
|
||||
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;
|
||||
}
|
||||
diff --git a/drivers/cpufreq/cpufreq_stats.c b/drivers/cpufreq/cpufreq_stats.c
|
||||
index cd9e817..12225d1 100644
|
||||
--- drivers/cpufreq/cpufreq_stats.c
|
||||
+++ drivers/cpufreq/cpufreq_stats.c
|
||||
@@ -353,13 +353,11 @@ static int __cpuinit cpufreq_stat_cpu_callback(struct notifier_block *nfb,
|
||||
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;
|
||||
}
|
|
@ -2,7 +2,7 @@
|
|||
#
|
||||
pkgname=linux3.10
|
||||
version=3.10.1
|
||||
revision=1
|
||||
revision=2
|
||||
wrksrc="linux-${version}"
|
||||
maintainer="Juan RP <xtraeme@gmail.com>"
|
||||
homepage="http://www.kernel.org"
|
||||
|
|
Loading…
Reference in New Issue