mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] sched: idle: move need_resched check after function rcu_idle_enter
@ 2015-11-21  9:02 Lianwei Wang
  2015-11-23 13:05 ` Peter Zijlstra
  2015-11-23 17:59 ` Peter Zijlstra
  0 siblings, 2 replies; 6+ messages in thread
From: Lianwei Wang @ 2015-11-21  9:02 UTC (permalink / raw)
  To: linux-kernel, linux-pm, rjw, mingo, peterz

The rcu_idle_endter may call wakeup_softirqd to set the need resched
flag on idle process. But if we don't check it after that, then the
cpu will enter idle state with RESCHED flag set and can not be woken
up by wakeup/resched call anymore.

Check need_resched after rcu_idle_enter to make sure the cpu is able
to be out of idle immediatley to run other tasks.

Signed-off-by: Lianwei Wang <lianwei.wang@gmail.com>
---
 kernel/sched/idle.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c
index 4a2ef5a02fd3..6e96a1f41041 100644
--- a/kernel/sched/idle.c
+++ b/kernel/sched/idle.c
@@ -137,21 +137,21 @@ static void cpuidle_idle_call(void)
        int next_state, entered_state;

        /*
+        * Tell the RCU framework we are entering an idle section,
+        * so no more rcu read side critical sections and one more
+        * step to the grace period
+        */
+       rcu_idle_enter();
+
+       /*
         * Check if the idle task must be rescheduled. If it is the
         * case, exit the function after re-enabling the local irq.
         */
        if (need_resched()) {
                local_irq_enable();
-               return;
+               goto exit_idle;
        }

-       /*
-        * Tell the RCU framework we are entering an idle section,
-        * so no more rcu read side critical sections and one more
-        * step to the grace period
-        */
-       rcu_idle_enter();
-
        if (cpuidle_not_available(drv, dev)) {
                default_idle_call();
                goto exit_idle;

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-11-23 20:03 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-21  9:02 [PATCH] sched: idle: move need_resched check after function rcu_idle_enter Lianwei Wang
2015-11-23 13:05 ` Peter Zijlstra
2015-11-23 17:42   ` Lianwei Wang
2015-11-23 17:57     ` Peter Zijlstra
2015-11-23 20:02       ` Lianwei Wang
2015-11-23 17:59 ` Peter Zijlstra

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®