2004-03-23 23:35:57

by Joe Korty

[permalink] [raw]
Subject: [PATCH] 2.6.3 Posix scheduling violation for !SCHED_OTHER

Andrew,
The following fixes a problem where a SCHED_FIFO task would on occasion
be moved to the end of its runqueue when returned to from a preemption.
Cause was do to some SCHED_OTHER code in schedule() which was being
run for tasks of every policy.

Regards,
Joe


--- 2.6.3/kernel/sched.c.orig 2004-02-17 22:59:10.000000000 -0500
+++ 2.6.3/kernel/sched.c 2004-03-23 18:34:19.000000000 -0500
@@ -1677,7 +1677,7 @@
queue = array->queue + idx;
next = list_entry(queue->next, task_t, run_list);

- if (next->activated > 0) {
+ if (!rt_task(next) && next->activated > 0) {
unsigned long long delta = now - next->timestamp;

if (next->activated == 1)


2004-03-24 00:00:38

by Ingo Molnar

[permalink] [raw]
Subject: Re: [PATCH] 2.6.3 Posix scheduling violation for !SCHED_OTHER


* Joe Korty <[email protected]> wrote:

> Andrew,
> The following fixes a problem where a SCHED_FIFO task would on
> occasion be moved to the end of its runqueue when returned to from a
> preemption. Cause was do to some SCHED_OTHER code in schedule() which
> was being run for tasks of every policy.

yes, indeed this is a bug.

> - if (next->activated > 0) {
> + if (!rt_task(next) && next->activated > 0) {

the patch looks good. Andrew, please apply.

Ingo