--- linux-2.6.0-test1-mm1/kernel/sched.c 2003-07-17 11:24:54.000000000 +1000 +++ linux-2.6.0-testck1/kernel/sched.c 2003-07-17 11:59:01.000000000 +1000 @@ -78,7 +78,7 @@ #define STARVATION_LIMIT (10*HZ) #define SLEEP_BUFFER (HZ/100) #define NODE_THRESHOLD 125 -#define MAX_BONUS (40 * PRIO_BONUS_RATIO / 100) +#define MAX_BONUS (MAX_USER_PRIO * PRIO_BONUS_RATIO / 100) /* * If a task is 'interactive' then we reinsert it in the active @@ -390,8 +390,6 @@ static inline void activate_task(task_t long sleep_time = jiffies - p->last_run - 1; if (sleep_time > 0) { - unsigned long runtime = jiffies - p->avg_start; - /* * Tasks that sleep a long time are categorised as idle and * will get just under interactive status with a small runtime @@ -402,6 +400,11 @@ static inline void activate_task(task_t p->sleep_avg = MIN_SLEEP_AVG * (MAX_BONUS - INTERACTIVE_DELTA - 2) / MAX_BONUS; } else { + unsigned long runtime = jiffies - p->avg_start; + + if (runtime > MAX_SLEEP_AVG) + runtime = MAX_SLEEP_AVG; + /* * This code gives a bonus to interactive tasks. *