• Paul Mackerras's avatar
    powerpc: Add compiler memory barrier to mtmsr macro · 4c75f84f
    Paul Mackerras authored
    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: default avatarPaul Mackerras <paulus@samba.org>
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    4c75f84f
hw_irq.h 3.69 KB