Messages in this thread | | | Date | Thu, 05 Aug 2004 12:23:55 +1000 | From | Nick Piggin <> | Subject | Re: SCHED_BATCH and SCHED_BATCH numbering |
| |
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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |