linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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;
as well as URLs for NNTP newsgroup(s).