summaryrefslogtreecommitdiffstats
path: root/drivers/idle
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 22:11:05 +0200
commit3e66a9ab53641a0f7a440e56f7b35bf5d77494b3 (patch)
treeee8c1d45d4691c4e45cd60302817c5b8933b3115 /drivers/idle
parent08820546e4c30c84d0a1f1a49df055e1719c07ea (diff)
downloadlinux-3e66a9ab53641a0f7a440e56f7b35bf5d77494b3.tar.bz2
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')
-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)
static void __exit intel_idle_exit(void)
{
+ struct cpuidle_device *dev;
+ int i;
+
cpu_notifier_register_begin();
if (lapic_timer_reliable_states != LAPIC_TIMER_ALWAYS_RELIABLE)
on_each_cpu(__setup_broadcast_timer, (void *)false, 1);
__unregister_cpu_notifier(&cpu_hotplug_notifier);
- intel_idle_cpuidle_devices_uninit();
+
+ for_each_possible_cpu(i) {
+ dev = per_cpu_ptr(intel_idle_cpuidle_devices, i);
+ cpuidle_unregister_device(dev);
+ }
cpu_notifier_register_done();