diff --git a/[refs] b/[refs] index eb89aedfc433..6257b8f86afa 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f0f1d32f931b705c4ee5dd374074d34edf3eae14 +refs/heads/master: 908a3283728d92df36e0c7cd63304fd35e93a8a9 diff --git a/trunk/kernel/sched.c b/trunk/kernel/sched.c index 1874c7418319..4cdc91cf48f6 100644 --- a/trunk/kernel/sched.c +++ b/trunk/kernel/sched.c @@ -5138,7 +5138,20 @@ EXPORT_SYMBOL(task_nice); */ int idle_cpu(int cpu) { - return cpu_curr(cpu) == cpu_rq(cpu)->idle; + struct rq *rq = cpu_rq(cpu); + + if (rq->curr != rq->idle) + return 0; + + if (rq->nr_running) + return 0; + +#ifdef CONFIG_SMP + if (!llist_empty(&rq->wake_list)) + return 0; +#endif + + return 1; } /**