Index: linux-2.6.10-ck7/kernel/sched.c
===================================================================
--- linux-2.6.10-ck7.orig/kernel/sched.c	2005-03-01 21:38:46.000000000 +1100
+++ linux-2.6.10-ck7/kernel/sched.c	2005-03-01 21:38:46.000000000 +1100
@@ -646,7 +646,7 @@ static void recalc_task_prio(task_t *p, 
 	unsigned long sleep_time = ns_diff(now, p->timestamp);
 	unsigned int rr = rr_interval(p);
 	unsigned int best_burst = burst(p);
-	if (p->flags & PF_FORKED ||
+	if (p->flags & PF_FORKED || sched_compute ||
 		(NS_TO_JIFFIES(p->runtime + sleep_time) < rr)) {
 			unsigned long ns_totalrun = p->totalrun + p->runtime;
 			unsigned long total_run = NS_TO_JIFFIES(ns_totalrun);
@@ -923,7 +923,8 @@ static void preempt(task_t *p, runqueue_
 {
 	if (p->prio > rq->curr->prio)
 		return;
-	if (p->prio == rq->curr->prio && (p->totalrun ||
+	if (p->prio == rq->curr->prio &&
+		((p->totalrun || p->slice != slice(p)) ||
 		rt_task(rq->curr)))
 			return;
 	if (!sched_compute || rq->cache_ticks >= cache_delay ||

