--- linux-2.5.64-bk5/kernel/sched.c.org Wed Mar 12 08:51:11 2003 +++ linux-2.5.64-bk5/kernel/sched.c Fri Mar 14 15:27:12 2003 @@ -72,7 +72,7 @@ #define PRIO_BONUS_RATIO 25 #define INTERACTIVE_DELTA 2 #define MAX_SLEEP_AVG (10*HZ) -#define STARVATION_LIMIT (10*HZ) +#define STARVATION_LIMIT (1*HZ) #define NODE_THRESHOLD 125 /* @@ -356,6 +356,8 @@ * spends sleeping, the higher the average gets - and the * higher the priority boost gets as well. */ + if (sleep_time > MAX_TIMESLICE) + sleep_time = MAX_TIMESLICE; sleep_avg = p->sleep_avg + sleep_time; /* @@ -397,6 +399,8 @@ rq->nr_uninterruptible++; dequeue_task(p, p->array); p->array = NULL; + if (p->sleep_avg) + p->sleep_avg--; } /* @@ -1249,6 +1253,8 @@ if (!--p->time_slice) { dequeue_task(p, rq->active); set_tsk_need_resched(p); + if (TASK_INTERACTIVE(p) && p->sleep_avg > MIN_TIMESLICE) + p->sleep_avg -= MIN_TIMESLICE; p->prio = effective_prio(p); p->time_slice = task_timeslice(p); p->first_time_slice = 0;