Index: linux-2.6.8-rc3/kernel/sched.c
===================================================================
--- linux-2.6.8-rc3.orig/kernel/sched.c	2004-08-08 00:49:54.799156001 +1000
+++ linux-2.6.8-rc3/kernel/sched.c	2004-08-08 00:55:00.966283429 +1000
@@ -327,9 +327,11 @@
 	unsigned long sleep_time = now - p->timestamp;
 	unsigned long ns_totalrun = p->totalrun + p->runtime;
 	unsigned long total_run = NS_TO_JIFFIES(ns_totalrun);
-	if (p->flags & PF_FORKED || ((!(NS_TO_JIFFIES(p->runtime)) ||
-		!sched_interactive || sched_compute) && 
-		NS_TO_JIFFIES(p->runtime + sleep_time) < RR_INTERVAL())) {
+	if (p->flags & PF_FORKED || 
+		(NS_TO_JIFFIES(p->runtime + sleep_time) < 
+		RR_INTERVAL() / 2 || ((!sched_interactive || 
+		sched_compute) && NS_TO_JIFFIES(p->runtime + sleep_time) < 
+		RR_INTERVAL()))) {
 			p->flags &= ~PF_FORKED;
 			if (p->slice - total_run < 1) {
 				p->totalrun = 0;
@@ -591,7 +593,7 @@
 {
 	if (p->prio > rq->curr->prio)
 		return 0;
-	if (p->prio == rq->curr->prio && (p->slice < slice(p) || 
+	if (p->prio == rq->curr->prio && (p->totalrun || 
 		rt_task(rq->curr)))
 			return 0;
 	if (!sched_compute || rq->cache_ticks >= cache_delay ||

