--- fork.c.orig Mon Sep 27 07:56:32 1999 +++ fork.c Thu May 25 16:10:48 2000 @@ -691,9 +691,11 @@ * more scheduling fairness. This is only important in the first * timeslice, on the long run the scheduling behaviour is unchanged. */ + p->counter = (current->counter + 1) >> 1; current->counter >>= 1; - p->counter = current->counter; + if (!current->counter) + current->need_resched = 1; /* * Ok, add it to the run-queues and make it * visible to the rest of the system. --- exit.c.orig Mon Sep 27 07:56:32 1999 +++ exit.c Thu May 25 16:13:31 2000 @@ -56,6 +56,9 @@ current->cmin_flt += p->min_flt + p->cmin_flt; current->cmaj_flt += p->maj_flt + p->cmaj_flt; current->cnswap += p->nswap + p->cnswap; + current->counter += p->counter; + if (current->counter >= current->priority*2) + current->counter = current->priority*2-1; free_task_struct(p); } else { printk("task releasing itself\n");