Re: [Question] sched/rt_mutex: re-enqueue_task onrt_mutex_setprio()

From: Steven Rostedt
Date: Sat Jul 07 2012 - 21:30:29 EST


On Sat, 2012-07-07 at 14:44 +0900, Namhyung Kim wrote:
> Hi,
>
> I have a question on the code below:
>
> void rt_mutex_setprio(struct task_struct *p, int prio)
> {
> ...
> if (on_rq)
> enqueue_task(rq, p, oldprio < prio ? ENQUEUE_HEAD : 0);
>
> When enqueueing @p with new @prio, it seems put @p at the head of a
> rq if appropriate. I guess it's the case of boosting @p with higher
> priority, right?

Actually, no. We put @p at the head of the queue when unboosting. If a
task is going from a high priority into a lower priority, it is still
treated as "important" for that priority, and is put to the front of the
queue (it was just higher than everything else on that queue). But if we
are boosting a task from a low priority, why put it to the head of other
tasks of its new priority, when those tasks were just higher than this
task, and this task is now just an "equal".

-- Steve

> So Should the conditional be a reverse form (provided
> that less number means higher priority)? Please shed some light on me.
>
> Thanks,
> Namhyung


--
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/