x86: MMIO and gcc re-ordering issue
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 27 May 2008 16:47:13 +0000 (09:47 -0700)
committerIngo Molnar <mingo@elte.hu>
Mon, 2 Jun 2008 10:29:31 +0000 (12:29 +0200)
commitc1f64a58003fd2efaa725a857e269a15f765791a
tree68a09bddb1c16fbcc748df41ddca4edb4442cb56
parent1beee8dc8cf58e3f605bd7b34d7a39939be7d8d2
x86: MMIO and gcc re-ordering issue

On Tue, 27 May 2008, Linus Torvalds wrote:
>
> Expecting people to fix up all drivers is simply not going to happen. And
> serializing things shouldn't be *that* expensive. People who cannot take
> the expense can continue to use the magic __raw_writel() etc stuff.

Of course, for non-x86, you kind of have to expect drivers to be
well-behaved, so non-x86 can probably avoid this simply because there are
less relevant drivers involved.

Here's a UNTESTED patch for x86 that may or may not compile and work, and
which serializes (on a compiler level) the IO accesses against regular
memory accesses.

__read[bwlq]()/__write[bwlq]() are not serialized with a :"memory"
barrier, although since they still use "asm volatile" I suspect that i
practice they are probably serial too. Did not look very closely at any
generated code (only did a trivial test to see that the code looks
*roughly* correct).

Signed-off-by: Ingo Molnar <mingo@elte.hu>
include/asm-x86/io.h
include/asm-x86/io_32.h
include/asm-x86/io_64.h