--- linux-2.6.14-old/kernel/sched.c 2006-11-29 16:22:22.000000000 -0600 +++ linux-2.6.14/kernel/sched.c 2006-11-29 11:29:34.000000000 -0600 @@ -2598,12 +2598,24 @@ if (!rq->expired_timestamp) rq->expired_timestamp = jiffies; - if (!TASK_INTERACTIVE(p) || EXPIRED_STARVING(rq)) { - enqueue_task(p, rq->expired); - if (p->static_prio < rq->best_expired_prio) + if(p->backlog_flag == 0){ + if (!TASK_INTERACTIVE(p) || EXPIRED_STARVING(rq)) { + enqueue_task(p, rq->expired); + if (p->static_prio < rq->best_expired_prio) + rq->best_expired_prio = p->static_prio; + } else + enqueue_task(p, rq->active); + } else { + if(EXPIRED_STARVING(rq)) { + enqueue_task(p,rq->expired); + if (p->static_prio < rq->best_expired_prio) rq->best_expired_prio = p->static_prio; - } else - enqueue_task(p, rq->active); + } else { + if(!TASK_INTERACTIVE(p)) + p->extrarun_flag = 1; + enqueue_task(p,rq->active); + } + } } else { /* * Prevent a too long timeslice allowing a task to monopolize