Messages in this thread | | | Date | Tue, 17 May 2011 10:28:35 +0800 | Subject | Re: [PATCH] sched: fix priority leakage in pick_next_highest_task_rt() | From | Yong Zhang <> |
| |
On Mon, May 16, 2011 at 8:55 PM, Hillf Danton <dhillf@gmail.com> wrote: > 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.
I don't see what kind of problem you patch will fix. And mind explaining how priority leakage could happen?
Thanks, Yong
> > 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; > } >
-- Only stand for myself
| |