From 648d88c9e5c7279517862020ffad8ddf97eec645 Mon Sep 17 00:00:00 2001 From: Juan RP Date: Wed, 17 Jul 2013 10:07:35 +0200 Subject: [PATCH] linux3.10: add patch from -stable queue to fix suspend/resume regression. --- .../patches/suspend-regression.patch | 74 +++++++++++++++++++ srcpkgs/linux3.10/template | 2 +- 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 srcpkgs/linux3.10/patches/suspend-regression.patch diff --git a/srcpkgs/linux3.10/patches/suspend-regression.patch b/srcpkgs/linux3.10/patches/suspend-regression.patch new file mode 100644 index 0000000000..e0bc2c70b6 --- /dev/null +++ b/srcpkgs/linux3.10/patches/suspend-regression.patch @@ -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 +--- + 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; + } diff --git a/srcpkgs/linux3.10/template b/srcpkgs/linux3.10/template index 7615066dd5..cd2c1fbe66 100644 --- a/srcpkgs/linux3.10/template +++ b/srcpkgs/linux3.10/template @@ -2,7 +2,7 @@ # pkgname=linux3.10 version=3.10.1 -revision=1 +revision=2 wrksrc="linux-${version}" maintainer="Juan RP " homepage="http://www.kernel.org"