sched/preempt: Fix up missed PREEMPT_NEED_RESCHED folding
[firefly-linux-kernel-4.4.55.git] / kernel / cpu / idle.c
index 988573a9a387665dddc402af2439996aa02fd1c0..277f494c2a9ae695c9a61dd44e5a2bfe68d75b2c 100644 (file)
@@ -105,14 +105,17 @@ static void cpu_idle_loop(void)
                                __current_set_polling();
                        }
                        arch_cpu_idle_exit();
-                       /*
-                        * We need to test and propagate the TIF_NEED_RESCHED
-                        * bit here because we might not have send the
-                        * reschedule IPI to idle tasks.
-                        */
-                       if (tif_need_resched())
-                               set_preempt_need_resched();
                }
+
+               /*
+                * Since we fell out of the loop above, we know
+                * TIF_NEED_RESCHED must be set, propagate it into
+                * PREEMPT_NEED_RESCHED.
+                *
+                * This is required because for polling idle loops we will
+                * not have had an IPI to fold the state for us.
+                */
+               preempt_set_need_resched();
                tick_nohz_idle_exit();
                schedule_preempt_disabled();
        }