On Tue, Feb 17, 2009 at 10:45:18PM +0100, Oleg Nesterov wrote: > On 02/17, Paul E. McKenney wrote: > > > > On Tue, Feb 17, 2009 at 08:28:10PM +0100, Oleg Nesterov wrote: > > > > > > So the question is: is there any arch which surely needs this barrier? > > > > > > IOW, > > > int COND; > > > > > > void smp_xxx_interrupt(regs) > > > { > > > BUG_ON(!COND); > > > } > > > > > > COND = 1; > > > mb(); > > > smp_send_xxx(cpu); > > > > > > can we really hit the BUG_ON() above on some arch? > > > > If all of the above is executed by the same task, tripping the BUG_ON() > > means either a compiler or CPU bug. > > I think you misunderstood... > > smp_send_xxx() sends the ipi to another CPU, and smp_xxx_interrupt() is > the handler. You are right, I did miss that completely. :-/ I have seen hardware in which the IPI could beat the cache invalidation from the sending CPU to the interrupted CPU, and in which one or both of the CPUs would have to execute special cache-flush/invalidation/whatever instructions for the interrupted CPU to have a consistent view of the data (in your example, "COND"). But we had a little chat with the hardware designers, and in subsequent hardware, the IPI interacted with the cache-coherence protocol so as to prevent the above bug from firing. However, this was x86-based hardware, which orders writes. Weakly ordered systems would likely need a memory barrier somewhere, whether as shown above or buried in the smp_send_xxx() primitive. Thanx, Paul -- To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html