Răsfoiți Sursa

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>
Gautham R Shenoy 18 ani în urmă
părinte
comite
638e13ac37
1 a modificat fișierele cu 1 adăugiri și 1 ștergeri
  1. 1 1
      kernel/sched.c

+ 1 - 1
kernel/sched.c

@@ -1133,7 +1133,7 @@ void wait_task_inactive(struct task_struct *p)
 	 * yield - it could be a while.
 	 */
 	if (unlikely(on_rq)) {
-		yield();
+		schedule_timeout_uninterruptible(1);
 		goto repeat;
 	}