From: Joe Korty <joe.korty@ccur.com>

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 due to some SCHED_OTHER code in schedule() which was being run for tasks
of every policy.


---

 25-akpm/kernel/sched.c |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

diff -puN kernel/sched.c~SCHED_FIFO-fix kernel/sched.c
--- 25/kernel/sched.c~SCHED_FIFO-fix	Tue Mar 23 15:54:10 2004
+++ 25-akpm/kernel/sched.c	Tue Mar 23 15:54:10 2004
@@ -1678,7 +1678,7 @@ need_resched:
 	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)

_