Re: Bug in scheduler when using rt_mutex

From: Mike Galbraith
Date: Wed Jan 19 2011 - 00:41:06 EST


On Wed, 2011-01-19 at 12:35 +0800, Yong Zhang wrote:

> cfs_rq->curr != se is always true.

If that were always true, we'd illegally enqueue a running task.

if (running)
p->sched_class->set_curr_task(rq);
==> set_curr_task_fair(rq);
==> struct sched_entity *se = &rq->curr->se;
==> set_next_entity(cfs_rq_of(se), se);
==> cfs_rq->curr = se;
(prevents running entity from being enqueued below)
if (on_rq) {
enqueue_task(rq, p, oldprio < prio ? ENQUEUE_HEAD : 0);

check_class_changed(rq, p, prev_class, oldprio, running);
}

-Mike

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/