--- 2.4.10pre2aa1/arch/i386/kernel/smp.c.~1~ Thu Aug 16 22:03:24 2001 +++ 2.4.10pre2aa1/arch/i386/kernel/smp.c Thu Aug 30 01:19:40 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); + } }