diff options
author | Gautham R Shenoy <ego@in.ibm.com> | 2007-10-15 11:00:14 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2007-10-15 11:00:14 -0400 |
commit | 638e13ac37a1a89473415f407cbffc1688a20fe2 (patch) | |
tree | c39999a223e8b272819c3676684c88d40aa47040 | |
parent | 5cb350baf580017da38199625b7365b1763d7180 (diff) |
sched: fix rt ptracer monopolizing CPU
yield() in wait_task_inactive(), can cause a high priority thread to be
scheduled back in, and there by loop forever while it is waiting for some
lower priority thread which is unfortunately still on the runqueue.
Use schedule_timeout_uninterruptible(1) instead.
Signed-off-by: Gautham R Shenoy <ego@in.ibm.com>
Credit: Oleg Nesterov <oleg@tv-sign.ru>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | kernel/sched.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 9ac99896db8..48fc74b6df5 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -1133,7 +1133,7 @@ repeat: | |||
1133 | * yield - it could be a while. | 1133 | * yield - it could be a while. |
1134 | */ | 1134 | */ |
1135 | if (unlikely(on_rq)) { | 1135 | if (unlikely(on_rq)) { |
1136 | yield(); | 1136 | schedule_timeout_uninterruptible(1); |
1137 | goto repeat; | 1137 | goto repeat; |
1138 | } | 1138 | } |
1139 | 1139 | ||