Commit:     7355690ead6d61f6344072ae61060f985060da29
Parent:     3f555c700b6c90f9ac24bc81a4f509583d906278
Author:     Ingo Molnar <[EMAIL PROTECTED]>
AuthorDate: Wed Feb 28 20:13:42 2007 -0800
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Thu Mar 1 14:53:38 2007 -0800

    [PATCH] sched: fix SMT scheduler bug
    The SMT scheduler incorrectly skips kernel threads even if they are
    runnable (but they are preempted by a higher-prio user-space task which got
    SMT-delayed by an even higher-priority task running on a sibling CPU).
    Fix this for now by only doing the SMT-nice optimization if the
    to-be-delayed task is the only runnable task.  (This should cover most of
    the real-life cases anyway.)
    This bug has been in the SMT scheduler since 2.6.17 or so, but has only
    been noticed now by the active check in the dynticks code.
    Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]>
    Cc: Michal Piotrowski <[EMAIL PROTECTED]>
    Cc: Nick Piggin <[EMAIL PROTECTED]>
    Cc: Thomas Gleixner <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
 kernel/sched.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/kernel/sched.c b/kernel/sched.c
index 0c5ebf5..5f102e6 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -3547,7 +3547,7 @@ need_resched_nonpreemptible:
        next->sleep_type = SLEEP_NORMAL;
-       if (dependent_sleeper(cpu, rq, next))
+       if (rq->nr_running == 1 && dependent_sleeper(cpu, rq, next))
                next = rq->idle;
        if (next == rq->idle)
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at

Reply via email to