powerpc: Add compiler memory barrier to mtmsr macro
authorPaul Mackerras <paulus@samba.org>
Fri, 12 Jun 2009 02:00:50 +0000 (02:00 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Mon, 15 Jun 2009 03:27:37 +0000 (13:27 +1000)
commit4c75f84f2c781beb230031234ed961d28771a764
treebae42cc387d0fdbc206729f2163b3eebefb9a85c
parente8d1673b9720ec72d85916c6b7d5d476abb2c861
powerpc: Add compiler memory barrier to mtmsr macro

On 32-bit non-Book E, local_irq_restore() turns into just mtmsr(),
which doesn't currently have a compiler memory barrier.  This means
that accesses to memory inside a local_irq_save/restore section,
or a spin_lock_irqsave/spin_unlock_irqrestore section on UP, can
be reordered by the compiler to occur outside that section.

To fix this, this adds a compiler memory barrier to mtmsr for both
32-bit and 64-bit.  Having a compiler memory barrier in mtmsr makes
sense because it will almost always be changing something about the
context in which memory accesses are done, so in general we don't want
memory accesses getting moved from one side of an mtmsr to the other.

With the barrier in mtmsr(), some of the explicit barriers in
hw_irq.h are now redundant, so this removes them.

Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/include/asm/hw_irq.h
arch/powerpc/include/asm/reg.h