[POWERPC] Add "memory" clobber to MMIO accessors

Gcc might re-order MMIO accessors vs. surrounding consistent
memory accesses, which is a "bad thing", and could break drivers.
This fixes it by adding a "memory" clobber to the MMIO accessors,
which should prevent gcc from doing that reordering.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>

authored by Benjamin Herrenschmidt and committed by Paul Mackerras cfab3bdf 732bee4c

+7 -5
+7 -5
include/asm-powerpc/io.h
··· 100 100 { \ 101 101 type ret; \ 102 102 __asm__ __volatile__("sync;" insn ";twi 0,%0,0;isync" \ 103 - : "=r" (ret) : "r" (addr), "m" (*addr)); \ 103 + : "=r" (ret) : "r" (addr), "m" (*addr) : "memory"); \ 104 104 return ret; \ 105 105 } 106 106 ··· 108 108 static inline void name(volatile type __iomem *addr, type val) \ 109 109 { \ 110 110 __asm__ __volatile__("sync;" insn \ 111 - : "=m" (*addr) : "r" (val), "r" (addr)); \ 112 - IO_SET_SYNC_FLAG(); \ 111 + : "=m" (*addr) : "r" (val), "r" (addr) : "memory"); \ 112 + IO_SET_SYNC_FLAG(); \ 113 113 } 114 114 115 115 ··· 333 333 " .long 3b,5b\n" \ 334 334 ".previous" \ 335 335 : "=&r" (x) \ 336 - : "r" (port + _IO_BASE)); \ 336 + : "r" (port + _IO_BASE) \ 337 + : "memory"); \ 337 338 return x; \ 338 339 } 339 340 ··· 351 350 " .long 0b,2b\n" \ 352 351 " .long 1b,2b\n" \ 353 352 ".previous" \ 354 - : : "r" (val), "r" (port + _IO_BASE)); \ 353 + : : "r" (val), "r" (port + _IO_BASE) \ 354 + : "memory"); \ 355 355 } 356 356 357 357 __do_in_asm(_rec_inb, "lbzx")