diff options
Diffstat (limited to 'drivers/cpuidle')
-rw-r--r-- | drivers/cpuidle/cpuidle.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c index ee9df5e3f5eb..125150dc6e81 100644 --- a/drivers/cpuidle/cpuidle.c +++ b/drivers/cpuidle/cpuidle.c | |||
@@ -223,8 +223,14 @@ void cpuidle_uninstall_idle_handler(void) | |||
223 | { | 223 | { |
224 | if (enabled_devices) { | 224 | if (enabled_devices) { |
225 | initialized = 0; | 225 | initialized = 0; |
226 | kick_all_cpus_sync(); | 226 | wake_up_all_idle_cpus(); |
227 | } | 227 | } |
228 | |||
229 | /* | ||
230 | * Make sure external observers (such as the scheduler) | ||
231 | * are done looking at pointed idle states. | ||
232 | */ | ||
233 | synchronize_rcu(); | ||
228 | } | 234 | } |
229 | 235 | ||
230 | /** | 236 | /** |
@@ -530,11 +536,6 @@ EXPORT_SYMBOL_GPL(cpuidle_register); | |||
530 | 536 | ||
531 | #ifdef CONFIG_SMP | 537 | #ifdef CONFIG_SMP |
532 | 538 | ||
533 | static void smp_callback(void *v) | ||
534 | { | ||
535 | /* we already woke the CPU up, nothing more to do */ | ||
536 | } | ||
537 | |||
538 | /* | 539 | /* |
539 | * This function gets called when a part of the kernel has a new latency | 540 | * This function gets called when a part of the kernel has a new latency |
540 | * requirement. This means we need to get all processors out of their C-state, | 541 | * requirement. This means we need to get all processors out of their C-state, |
@@ -544,7 +545,7 @@ static void smp_callback(void *v) | |||
544 | static int cpuidle_latency_notify(struct notifier_block *b, | 545 | static int cpuidle_latency_notify(struct notifier_block *b, |
545 | unsigned long l, void *v) | 546 | unsigned long l, void *v) |
546 | { | 547 | { |
547 | smp_call_function(smp_callback, NULL, 1); | 548 | wake_up_all_idle_cpus(); |
548 | return NOTIFY_OK; | 549 | return NOTIFY_OK; |
549 | } | 550 | } |
550 | 551 | ||