Messages in this thread Patch in this message | | | From | Andy Lutomirski <> | Subject | [PATCH 3/4] intel_idle: Fix MSRs after resume | Date | Sun, 13 Mar 2016 21:48:12 -0700 |
| |
Firmware that enables auto-promotion / auto-demotion flags we don't like will probably re-enable them after suspend/resume. Disable them again after resume so they stay fixed.
I've seen this on my Dell XPS 13 9350.
Signed-off-by: Andy Lutomirski <luto@kernel.org> --- drivers/idle/intel_idle.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c index 338df09ad60b..e3d7d8bbc843 100644 --- a/drivers/idle/intel_idle.c +++ b/drivers/idle/intel_idle.c @@ -61,6 +61,7 @@ #include <linux/notifier.h> #include <linux/cpu.h> #include <linux/module.h> +#include <linux/syscore_ops.h> #include <asm/cpu_device_id.h> #include <asm/mwait.h> #include <asm/msr.h> @@ -1026,6 +1027,15 @@ void intel_idle_state_table_update(void) return; } +static void intel_idle_resume(void) +{ + on_each_cpu(fix_this_cpu, NULL, 1); +} + +static struct syscore_ops intel_idle_syscore_ops = { + .resume = intel_idle_resume, +}; + /* * intel_idle_cpuidle_driver_init() * allocate, initialize cpuidle_states @@ -1119,6 +1129,7 @@ static int __init intel_idle_init(void) if (retval) return retval; + register_syscore_ops(&intel_idle_syscore_ops); intel_idle_cpuidle_driver_init(); retval = cpuidle_register_driver(&intel_idle_driver); if (retval) { @@ -1153,6 +1164,7 @@ static void __exit intel_idle_exit(void) { intel_idle_cpuidle_devices_uninit(); cpuidle_unregister_driver(&intel_idle_driver); + unregister_syscore_ops(&intel_idle_syscore_ops); cpu_notifier_register_begin(); -- 2.5.0
| |