Index: linux-2.6.8.1-ck5/kernel/sched.c =================================================================== --- linux-2.6.8.1-ck5.orig/kernel/sched.c 2004-09-07 09:14:30.815590192 +1000 +++ linux-2.6.8.1-ck5/kernel/sched.c 2004-09-07 09:15:51.446332456 +1000 @@ -354,10 +354,10 @@ static void recalc_task_prio(task_t *p, unsigned int rr = rr_interval(p); unsigned int best_burst = burst(p); unsigned int minrun = rr * (p->burst + 1) / (best_burst + 1) ? : 1; - if (p->flags & PF_FORKED || + if (p->flags & PF_FORKED || (p->mm && (NS_TO_JIFFIES(p->runtime + sleep_time) < minrun || ((!sched_interactive || sched_compute) && - NS_TO_JIFFIES(p->runtime + sleep_time) < rr))) { + 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); p->flags &= ~PF_FORKED; @@ -381,7 +381,7 @@ static void recalc_task_prio(task_t *p, } else { if (NS_TO_JIFFIES(p->totalrun) > (best_burst - p->burst) * rr) dec_burst(p); - else if (!(p->flags & PF_UISLEEP)) + else if (!(p->flags & PF_UISLEEP || p->totalrun)) inc_burst(p); p->runtime = 0; p->totalrun = 0;