From 257e0e604ff70935c7c50dadd3e961a0e82d061c Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Thu, 15 Sep 2011 15:32:06 +0200 Subject: [PATCH] --- yaml --- r: 269171 b: refs/heads/master c: 908a3283728d92df36e0c7cd63304fd35e93a8a9 h: refs/heads/master i: 269169: 915bd0c58156eb2128fda967ff2536c60de65292 269167: 1b1695b770eca47d4dccb93fb46406442de99793 v: v3 --- [refs] | 2 +- trunk/kernel/sched.c | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) 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; } /**