linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] sched: fix priority leakage in pick_next_highest_task_rt()
@ 2011-05-16 12:55 Hillf Danton
  2011-05-17  2:28 ` Yong Zhang
  0 siblings, 1 reply; 6+ messages in thread
From: Hillf Danton @ 2011-05-16 12:55 UTC (permalink / raw)
  To: LKML; +Cc: Ingo Molnar, Peter Zijlstra, Mike Galbraith, Yong Zhang

When picking the second highest RT task for a given runqueue, if no
task found after scanning the queue of priority == idx, the next idx
should also be checked even in case that next is already existing, or
the window of priority leakage could be opened.

Signed-off-by: Hillf Danton <dhillf@gmail.com>
---

--- a/kernel/sched_rt.c	2011-04-27 11:48:50.000000000 +0800
+++ b/kernel/sched_rt.c	2011-05-16 19:58:42.000000000 +0800
@@ -1166,6 +1166,8 @@ static struct task_struct *pick_next_hig
 	int idx;

 	for_each_leaf_rt_rq(rt_rq, rq) {
+		struct task_struct *this;
+
 		array = &rt_rq->active;
 		idx = sched_find_first_bit(array->bitmap);
 next_idx:
@@ -1173,6 +1175,7 @@ next_idx:
 			continue;
 		if (next && next->prio < idx)
 			continue;
+		this = NULL;
 		list_for_each_entry(rt_se, array->queue + idx, run_list) {
 			struct task_struct *p;

@@ -1181,11 +1184,15 @@ next_idx:

 			p = rt_task_of(rt_se);
 			if (pick_rt_task(rq, p, cpu)) {
-				next = p;
+				this = p;
 				break;
 			}
 		}
-		if (!next) {
+		if (this != NULL)
+			next = this;
+		else {	/*
+			 * we have to check next idx even if next != NULL
+			 */
 			idx = find_next_bit(array->bitmap, MAX_RT_PRIO, idx+1);
 			goto next_idx;
 		}

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2011-05-18  2:17 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-05-16 12:55 [PATCH] sched: fix priority leakage in pick_next_highest_task_rt() Hillf Danton
2011-05-17  2:28 ` Yong Zhang
2011-05-17 14:53   ` Hillf Danton
2011-05-18  1:14     ` Steven Rostedt
2011-05-18  2:17       ` Yong Zhang
2011-05-18  2:07     ` Yong Zhang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).