aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/idle/intel_idle.c
diff options
context:
space:
mode:
authorRichard Cochran <rcochran@linutronix.de>2016-04-06 17:00:57 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2016-04-07 16:11:05 -0400
commit3e66a9ab53641a0f7a440e56f7b35bf5d77494b3 (patch)
treeee8c1d45d4691c4e45cd60302817c5b8933b3115 /drivers/idle/intel_idle.c
parent08820546e4c30c84d0a1f1a49df055e1719c07ea (diff)
intel_idle: Clean up all registered devices on exit.
This driver registers cpuidle devices when a CPU comes online, but it leaves the registrations in place when a CPU goes offline. The module exit code only unregisters the currently online CPUs, leaving the devices for offline CPUs dangling. This patch changes the driver to clean up all registrations on exit, even those from CPUs that are offline. Signed-off-by: Richard Cochran <rcochran@linutronix.de> Signed-off-by: Len Brown <len.brown@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/idle/intel_idle.c')
-rw-r--r--drivers/idle/intel_idle.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c
index 8420ba10a434..862346bd053a 100644
--- a/drivers/idle/intel_idle.c
+++ b/drivers/idle/intel_idle.c
@@ -1245,12 +1245,19 @@ static int __init intel_idle_init(void)
1245 1245
1246static void __exit intel_idle_exit(void) 1246static void __exit intel_idle_exit(void)
1247{ 1247{
1248 struct cpuidle_device *dev;
1249 int i;
1250
1248 cpu_notifier_register_begin(); 1251 cpu_notifier_register_begin();
1249 1252
1250 if (lapic_timer_reliable_states != LAPIC_TIMER_ALWAYS_RELIABLE) 1253 if (lapic_timer_reliable_states != LAPIC_TIMER_ALWAYS_RELIABLE)
1251 on_each_cpu(__setup_broadcast_timer, (void *)false, 1); 1254 on_each_cpu(__setup_broadcast_timer, (void *)false, 1);
1252 __unregister_cpu_notifier(&cpu_hotplug_notifier); 1255 __unregister_cpu_notifier(&cpu_hotplug_notifier);
1253 intel_idle_cpuidle_devices_uninit(); 1256
1257 for_each_possible_cpu(i) {
1258 dev = per_cpu_ptr(intel_idle_cpuidle_devices, i);
1259 cpuidle_unregister_device(dev);
1260 }
1254 1261
1255 cpu_notifier_register_done(); 1262 cpu_notifier_register_done();
1256 1263