• Linus Torvalds's avatar
    x86: MMIO and gcc re-ordering issue · c1f64a58
    Linus Torvalds authored
    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: default avatarIngo Molnar <mingo@elte.hu>
    c1f64a58
io_32.h 7.92 KB