diff -urN 2.4.10pre2/arch/i386/kernel/smp.c mb/arch/i386/kernel/smp.c --- 2.4.10pre2/arch/i386/kernel/smp.c Thu Aug 16 22:03:24 2001 +++ mb/arch/i386/kernel/smp.c Thu Aug 30 21:31:09 2001 @@ -468,6 +468,7 @@ spin_lock_bh(&call_lock); call_data = &data; + wmb(); /* Send a message to all other CPUs and wait for them to respond */ send_IPI_allbutself(CALL_FUNCTION_VECTOR); @@ -531,12 +532,15 @@ * Notify initiating CPU that I've grabbed the data and am * about to execute the function */ + mb(); atomic_inc(&call_data->started); /* * At this point the info structure may be out of scope unless wait==1 */ (*func)(info); - if (wait) + if (wait) { + mb(); atomic_inc(&call_data->finished); + } }