diff -urN 2.4.0-test4-pre6/kernel/softirq.c vm-25/kernel/softirq.c
--- 2.4.0-test4-pre6/kernel/softirq.c	Fri Mar 10 03:22:34 2000
+++ vm-25/kernel/softirq.c	Sat Jul 15 15:12:16 2000
@@ -201,7 +201,11 @@
 	while (test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) {
 		if (in_interrupt())
 			panic("Attempt to kill tasklet from interrupt\n");
-		schedule();
+		do {
+			current->state = TASK_RUNNING;
+			current->policy |= SCHED_YIELD;
+			schedule();
+		} while (test_bit(TASKLET_STATE_SCHED, &t->state));
 	}
 	tasklet_unlock_wait(t);
 	clear_bit(TASKLET_STATE_SCHED, &t->state);