From: Gautham R Shenoy 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 Credit: Oleg Nesterov Cc: Ingo Molnar Signed-off-by: Andrew Morton --- kernel/sched.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) diff -puN kernel/sched.c~rt-ptracer-can-monopolize-cpu-was-cpu-hotplug-and-real-time kernel/sched.c --- a/kernel/sched.c~rt-ptracer-can-monopolize-cpu-was-cpu-hotplug-and-real-time +++ a/kernel/sched.c @@ -1109,7 +1109,7 @@ repeat: * yield - it could be a while. */ if (unlikely(on_rq)) { - yield(); + schedule_timeout_uninterruptible(1); goto repeat; } _