diff -urN linux-2.4.19-pre7-ac2/kernel/sched.c linux/kernel/sched.c --- linux-2.4.19-pre7-ac2/kernel/sched.c Fri Apr 19 21:05:05 2002 +++ linux/kernel/sched.c Fri Apr 19 21:06:18 2002 @@ -744,14 +744,18 @@ */ asmlinkage void schedule(void) { - task_t *prev = current, *next; - runqueue_t *rq = this_rq(); + task_t *prev, *next; + runqueue_t *rq; prio_array_t *array; list_t *queue; int idx; BUG_ON(in_interrupt()); +need_resched: + prev = current; + rq = this_rq(); + release_kernel_lock(prev, smp_processor_id()); prev->sleep_timestamp = jiffies; spin_lock_irq(&rq->lock); @@ -820,6 +824,8 @@ } reacquire_kernel_lock(current); + if (need_resched()) + goto need_resched; return; }