+++ /dev/null
-From 2167e2399dc5e69c62db56d933e9c8cbe107620a Mon Sep 17 00:00:00 2001
-From: Bjørn Mork <bjorn@mork.no>
-Date: Tue, 3 Dec 2013 12:14:32 +0100
-Subject: cpufreq: fix garbage kobjects on errors during suspend/resume
-
-From: Bjørn Mork <bjorn@mork.no>
-
-commit 2167e2399dc5e69c62db56d933e9c8cbe107620a upstream.
-
-This is effectively a revert of commit 5302c3fb2e62 ("cpufreq: Perform
-light-weight init/teardown during suspend/resume"), which enabled
-suspend/resume optimizations leaving the sysfs files in place.
-
-Errors during suspend/resume are not handled properly, leaving
-dead sysfs attributes in case of failures. There are are number of
-functions with special code for the "frozen" case, and all these
-need to also have special error handling.
-
-The problem is easy to demonstrate by making cpufreq_driver->init()
-or cpufreq_driver->get() fail during resume.
-
-The code is too complex for a simple fix, with split code paths
-in multiple blocks within a number of functions. It is therefore
-best to revert the patch enabling this code until the error handling
-is in place.
-
-Examples of problems resulting from resume errors:
-
-WARNING: CPU: 0 PID: 6055 at fs/sysfs/file.c:343 sysfs_open_file+0x77/0x212()
-missing sysfs attribute operations for kobject: (null)
-Modules linked in: [stripped as irrelevant]
-CPU: 0 PID: 6055 Comm: grep Tainted: G D 3.13.0-rc2 #153
-Hardware name: LENOVO 2776LEG/2776LEG, BIOS 6EET55WW (3.15 ) 12/19/2011
- 0000000000000009 ffff8802327ebb78 ffffffff81380b0e 0000000000000006
- ffff8802327ebbc8 ffff8802327ebbb8 ffffffff81038635 0000000000000000
- ffffffff811823c7 ffff88021a19e688 ffff88021a19e688 ffff8802302f9310
-Call Trace:
- [<ffffffff81380b0e>] dump_stack+0x55/0x76
- [<ffffffff81038635>] warn_slowpath_common+0x7c/0x96
- [<ffffffff811823c7>] ? sysfs_open_file+0x77/0x212
- [<ffffffff810386e3>] warn_slowpath_fmt+0x41/0x43
- [<ffffffff81182dec>] ? sysfs_get_active+0x6b/0x82
- [<ffffffff81182382>] ? sysfs_open_file+0x32/0x212
- [<ffffffff811823c7>] sysfs_open_file+0x77/0x212
- [<ffffffff81182350>] ? sysfs_schedule_callback+0x1ac/0x1ac
- [<ffffffff81122562>] do_dentry_open+0x17c/0x257
- [<ffffffff8112267e>] finish_open+0x41/0x4f
- [<ffffffff81130225>] do_last+0x80c/0x9ba
- [<ffffffff8112dbbd>] ? inode_permission+0x40/0x42
- [<ffffffff81130606>] path_openat+0x233/0x4a1
- [<ffffffff81130b7e>] do_filp_open+0x35/0x85
- [<ffffffff8113b787>] ? __alloc_fd+0x172/0x184
- [<ffffffff811232ea>] do_sys_open+0x6b/0xfa
- [<ffffffff811233a7>] SyS_openat+0xf/0x11
- [<ffffffff8138c812>] system_call_fastpath+0x16/0x1b
-
-The failure to restore cpufreq devices on cancelled hibernation is
-not a new bug. It is caused by the ACPI _PPC call failing unless the
-hibernate is completed. This makes the acpi_cpufreq driver fail its
-init.
-
-Previously, the cpufreq device could be restored by offlining the
-cpu temporarily. And as a complete hibernation cycle would do this,
-it would be automatically restored most of the time. But after
-commit 5302c3fb2e62 the leftover sysfs attributes will block any
-device add action. Therefore offlining and onlining CPU 1 will no
-longer restore the cpufreq object, and a complete suspend/resume
-cycle will replace it with garbage.
-
-Fixes: 5302c3fb2e62 ("cpufreq: Perform light-weight init/teardown during suspend/resume")
-Signed-off-by: Bjørn Mork <bjorn@mork.no>
-Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/cpufreq/cpufreq.c | 3 ---
- 1 file changed, 3 deletions(-)
-
---- a/drivers/cpufreq/cpufreq.c
-+++ b/drivers/cpufreq/cpufreq.c
-@@ -2044,9 +2044,6 @@ static int cpufreq_cpu_callback(struct n
- dev = get_cpu_device(cpu);
- if (dev) {
-
-- if (action & CPU_TASKS_FROZEN)
-- frozen = true;
--
- switch (action & ~CPU_TASKS_FROZEN) {
- case CPU_ONLINE:
- __cpufreq_add_dev(dev, NULL, frozen);