Will replace the misnomed cpu_idle_wait() function which is copied a gazillion times all over arch/*
Showing the changes to kernel (1 of 2 files). Show all
Unified · Split
| @@ -795,3 +795,26 @@ void on_each_cpu_cond(bool (*cond_func)(int cpu, void *info), · 794 unmodified lines | |||
| 795 | } | 795 | } |
| 796 | } | 796 | } |
| 797 | EXPORT_SYMBOL(on_each_cpu_cond); | 797 | EXPORT_SYMBOL(on_each_cpu_cond); |
| 798 | |||
| 799 | static void do_nothing(void *unused) | ||
| 800 | { | ||
| 801 | } | ||
| 802 | |||
| 803 | /** | ||
| 804 | * kick_all_cpus_sync - Force all cpus out of idle | ||
| 805 | * | ||
| 806 | * Used to synchronize the update of pm_idle function pointer. It's | ||
| 807 | * called after the pointer is updated and returns after the dummy | ||
| 808 | * callback function has been executed on all cpus. The execution of | ||
| 809 | * the function can only happen on the remote cpus after they have | ||
| 810 | * left the idle function which had been called via pm_idle function | ||
| 811 | * pointer. So it's guaranteed that nothing uses the previous pointer | ||
| 812 | * anymore. | ||
| 813 | */ | ||
| 814 | void kick_all_cpus_sync(void) | ||
| 815 | { | ||
| 816 | /* Make sure the change is visible before we kick the cpus */ | ||
| 817 | smp_mb(); | ||
| 818 | smp_call_function(do_nothing, NULL, 1); | ||
| 819 | } | ||
| 820 | EXPORT_SYMBOL_GPL(kick_all_cpus_sync); | ||