Re: SCHED_BATCH and SCHED_BATCH numbering

From: Nick Piggin
Date: Wed Aug 04 2004 - 21:24:57 EST


Peter Williams wrote:

Nick Piggin wrote:

Peter Williams wrote:

Albert Cahalan wrote:

Are these going to be numbered consecutively, or might
they better be done like the task state? SCHED_FIFO is
in fact already treated this way in one place. One might
want to test values this way:

if(foo & (SCHED_ISO|SCHED_RR|SCHED_FIFO)) ...

(leaving aside SCHED_OTHER==0, or just translate
that single value for the ABI)

I'd like to see these get permenant allocations
soon, even if the code doesn't go into the kernel.
This is because user-space needs to know the values.




Excellent idea. The definition of rt_task() could become:

#define rt_task(p) ((p)->policy & (SCHED_RR|SCHED_FIFO))

instead of the highly dodgy:


I probably should have said "slightly" instead of "highly" here but I got carried away. :-)


#define rt_task(p) ((p)->prio < MAX_RT_PRIO)


Nothing wrong with that, is there?


It's sloppy logic in that "prio" being less than MAX_RT_PRIO is a consequence of the task being real time not the definition of it. At the moment it is a sufficient condition for identifying a task as real time but that may not always be the case.

Actually, p->prio < MAX_RT_PRIO iff rt_task(p). This can't change without horribly breaking
stuff.

But, the real issue is, what's the point of having a field, "policy", that IS the definitive indicator of the task's scheduling policy if you don't use it? An rt_task() function/macro defined in terms of the policy field with this suggested numbering scheme should always be correct.

At the moment rt_task(p) could be defined as ((p)->policy != SCHED_OTHER) but the addition of SCHED_ISO and SCHED_BATCH would break that. Another option would be (((p)->policy == SCHED_FIFO) || ((p)->policy == SCHED_RR)) but that's a little long winded and (avoiding it) is probably the reason for the current definition.


Conversely, p->prio < MAX_RT_PRIO neatly defines a task as being realtime without worrying
about what exact policy it is using. However if you add or remove scheduling policies, your
p->policy method breaks.

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