--- linux-2.4.18/kernel/softirq.c.rml Tue Jun 11 20:24:24 2002 +++ linux-2.4.18/kernel/softirq.c Tue Jun 11 20:50:38 2002 @@ -177,11 +177,14 @@ { int cpu = smp_processor_id(); struct tasklet_struct *list; + unsigned long flags; /* Don't presume interrupt state */ - local_irq_disable(); + local_irq_save(flags); /* MSZ */ +/* MSZ local_irq_disable(); */ list = tasklet_vec[cpu].list; tasklet_vec[cpu].list = NULL; - local_irq_enable(); + local_irq_restore(flags); /* MSZ */ +/* MSZ local_irq_enable(); */ while (list) { struct tasklet_struct *t = list; @@ -199,11 +202,13 @@ tasklet_unlock(t); } - local_irq_disable(); + local_irq_save(flags); /* MSZ */ +/* MSZ local_irq_disable(); */ t->next = tasklet_vec[cpu].list; tasklet_vec[cpu].list = t; __cpu_raise_softirq(cpu, TASKLET_SOFTIRQ); - local_irq_enable(); + local_irq_restore(flags); /* MSZ */ +/* MSZ local_irq_enable(); */ } } @@ -211,11 +216,14 @@ { int cpu = smp_processor_id(); struct tasklet_struct *list; + unsigned long flags; /* Don't presume interrupt state */ - local_irq_disable(); + local_irq_save(flags); /* MSZ */ +/* MSZ local_irq_disable(); */ list = tasklet_hi_vec[cpu].list; tasklet_hi_vec[cpu].list = NULL; - local_irq_enable(); + local_irq_restore(flags); /* MSZ */ +/* MSZ local_irq_enable(); */ while (list) { struct tasklet_struct *t = list; @@ -233,11 +241,13 @@ tasklet_unlock(t); } - local_irq_disable(); + local_irq_save(flags); /* MSZ */ +/* MSZ local_irq_disable(); */ t->next = tasklet_hi_vec[cpu].list; tasklet_hi_vec[cpu].list = t; __cpu_raise_softirq(cpu, HI_SOFTIRQ); - local_irq_enable(); + local_irq_restore(flags); /* MSZ */ +/* MSZ local_irq_enable(); */ } }