* [Question] sched/rt_mutex: re-enqueue_task on rt_mutex_setprio()
@ 2012-07-07 5:44 Namhyung Kim
2012-07-08 1:29 ` Steven Rostedt
0 siblings, 1 reply; 5+ messages in thread
From: Namhyung Kim @ 2012-07-07 5:44 UTC (permalink / raw)
To: Ingo Molnar, Peter Zijlstra; +Cc: Steven Rostedt, LKML
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? So Should the conditional be a reverse form (provided
that less number means higher priority)? Please shed some light on me.
Thanks,
Namhyung
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [Question] sched/rt_mutex: re-enqueue_task on rt_mutex_setprio() 2012-07-07 5:44 [Question] sched/rt_mutex: re-enqueue_task on rt_mutex_setprio() Namhyung Kim @ 2012-07-08 1:29 ` Steven Rostedt 2012-07-09 0:50 ` Namhyung Kim 0 siblings, 1 reply; 5+ messages in thread From: Steven Rostedt @ 2012-07-08 1:29 UTC (permalink / raw) To: Namhyung Kim; +Cc: Ingo Molnar, Peter Zijlstra, LKML 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 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Question] sched/rt_mutex: re-enqueue_task on rt_mutex_setprio() 2012-07-08 1:29 ` Steven Rostedt @ 2012-07-09 0:50 ` Namhyung Kim 2012-07-09 6:48 ` Peter Zijlstra 0 siblings, 1 reply; 5+ messages in thread From: Namhyung Kim @ 2012-07-09 0:50 UTC (permalink / raw) To: Steven Rostedt; +Cc: Ingo Molnar, Peter Zijlstra, LKML On Sat, 07 Jul 2012 21:29:19 -0400, Steven Rostedt wrote: > 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". Thanks for the explanation. (Isn't it worth getting commented?) :) Thanks, Namhyung ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Question] sched/rt_mutex: re-enqueue_task on rt_mutex_setprio() 2012-07-09 0:50 ` Namhyung Kim @ 2012-07-09 6:48 ` Peter Zijlstra 2012-07-09 7:07 ` Namhyung Kim 0 siblings, 1 reply; 5+ messages in thread From: Peter Zijlstra @ 2012-07-09 6:48 UTC (permalink / raw) To: Namhyung Kim; +Cc: Steven Rostedt, Ingo Molnar, LKML On Mon, 2012-07-09 at 09:50 +0900, Namhyung Kim wrote: > On Sat, 07 Jul 2012 21:29:19 -0400, Steven Rostedt wrote: > > 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". > > Thanks for the explanation. (Isn't it worth getting commented?) :) Possibly, note that this part is well spec'ed by POSIX, see http://pubs.opengroup.org/onlinepubs/009695299/functions/xsh_chap02_08.html SCHED_FIFO.8 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Question] sched/rt_mutex: re-enqueue_task on rt_mutex_setprio() 2012-07-09 6:48 ` Peter Zijlstra @ 2012-07-09 7:07 ` Namhyung Kim 0 siblings, 0 replies; 5+ messages in thread From: Namhyung Kim @ 2012-07-09 7:07 UTC (permalink / raw) To: Peter Zijlstra; +Cc: Steven Rostedt, Ingo Molnar, LKML On Mon, Jul 9, 2012 at 3:48 PM, Peter Zijlstra <peterz@infradead.org> wrote: > On Mon, 2012-07-09 at 09:50 +0900, Namhyung Kim wrote: >> On Sat, 07 Jul 2012 21:29:19 -0400, Steven Rostedt wrote: >> > 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". >> >> Thanks for the explanation. (Isn't it worth getting commented?) :) > > Possibly, note that this part is well spec'ed by POSIX, see > > http://pubs.opengroup.org/onlinepubs/009695299/functions/xsh_chap02_08.html > > SCHED_FIFO.8 Thanks for the pointer. I need to educate myself a lot more! Thanks, Namhyung ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-07-09 7:07 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2012-07-07 5:44 [Question] sched/rt_mutex: re-enqueue_task on rt_mutex_setprio() Namhyung Kim 2012-07-08 1:29 ` Steven Rostedt 2012-07-09 0:50 ` Namhyung Kim 2012-07-09 6:48 ` Peter Zijlstra 2012-07-09 7:07 ` Namhyung Kim
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®