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;
 }
 
