|
@@ -587,7 +587,7 @@ unlock:
|
|
|
* account when the CPU goes back to idle and evaluates the timer
|
|
|
* wheel for the next timer event.
|
|
|
*/
|
|
|
-void wake_up_idle_cpu(int cpu)
|
|
|
+static void wake_up_idle_cpu(int cpu)
|
|
|
{
|
|
|
struct rq *rq = cpu_rq(cpu);
|
|
|
|
|
@@ -617,6 +617,24 @@ void wake_up_idle_cpu(int cpu)
|
|
|
smp_send_reschedule(cpu);
|
|
|
}
|
|
|
|
|
|
+static bool wake_up_extended_nohz_cpu(int cpu)
|
|
|
+{
|
|
|
+ if (tick_nohz_extended_cpu(cpu)) {
|
|
|
+ if (cpu != smp_processor_id() ||
|
|
|
+ tick_nohz_tick_stopped())
|
|
|
+ smp_send_reschedule(cpu);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+void wake_up_nohz_cpu(int cpu)
|
|
|
+{
|
|
|
+ if (!wake_up_extended_nohz_cpu(cpu))
|
|
|
+ wake_up_idle_cpu(cpu);
|
|
|
+}
|
|
|
+
|
|
|
static inline bool got_nohz_idle_kick(void)
|
|
|
{
|
|
|
int cpu = smp_processor_id();
|