diff -urN 2.4.6pre2/include/linux/interrupt.h softirq-smp-fixes/include/linux/interrupt.h --- 2.4.6pre2/include/linux/interrupt.h Sat Jun 9 00:04:49 2001 +++ softirq-smp-fixes/include/linux/interrupt.h Mon Jun 11 18:54:42 2001 @@ -138,22 +138,26 @@ static inline void tasklet_disable_nosync(struct tasklet_struct *t) { atomic_inc(&t->count); + smp_mb__after_atomic_inc(); } static inline void tasklet_disable(struct tasklet_struct *t) { tasklet_disable_nosync(t); tasklet_unlock_wait(t); + smp_mb(); } static inline void tasklet_enable(struct tasklet_struct *t) { + smp_mb__before_atomic_dec(); if (atomic_dec_and_test(&t->count)) tasklet_schedule(t); } static inline void tasklet_hi_enable(struct tasklet_struct *t) { + smp_mb__before_atomic_dec(); if (atomic_dec_and_test(&t->count)) tasklet_hi_schedule(t); }