Re: MMIO and gcc re-ordering issue

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Paul Mackerras <paulus@...>
Cc: Linus Torvalds <torvalds@...>, Matthew Wilcox <matthew@...>, Trent Piepho <tpiepho@...>, Russell King <rmk+lkml@...>, Benjamin Herrenschmidt <benh@...>, David Miller <davem@...>, <linux-arch@...>, <scottwood@...>, <linuxppc-dev@...>, <alan@...>, <linux-kernel@...>
Date: Wednesday, June 11, 2008 - 1:35 am

On Wednesday 11 June 2008 15:13, Paul Mackerras wrote:

But this is a case where you really should be scared, so FUD is
completely appropriate.

At least, I don't see how it is at all worse than FUD about how much
slower everything will be with stronger ordering, and how nobody will
be able to do anything about it. In reality, for most devices it will
not be measurable, and for some like network or disk might use a bit
of a tweak in one or two fastpaths.

If the driver author honestly does not know the code well enough to
say whether a particular ordering is allowed or not, then it should
just not be allowed.


Anyway, what do I win if I give you a concrete example?

I found one in the first file I picked out of my grep: drivers/net/s2io.c

        if (test_and_set_bit(__S2IO_STATE_LINK_TASK, &(nic->state))) {
                /* The card is being reset, no point doing anything */
                goto out_unlock;
        }

...
                val64 = readq(&bar0->adapter_control);
                val64 |= ADAPTER_LED_ON;
                writeq(val64, &bar0->adapter_control);
                s2io_link(nic, LINK_UP);
        } else {
                if (CARDS_WITH_FAULTY_LINK_INDICATORS(nic->device_type,
                                                      subid)) {
                        val64 = readq(&bar0->gpio_control);
                        val64 &= ~GPIO_CTRL_GPIO_0;
                        writeq(val64, &bar0->gpio_control);
                        val64 = readq(&bar0->gpio_control);
                }
                /* turn off LED */
                val64 = readq(&bar0->adapter_control);
                val64 = val64 &(~ADAPTER_LED_ON);
                writeq(val64, &bar0->adapter_control);
                s2io_link(nic, LINK_DOWN);
        }
        clear_bit(__S2IO_STATE_LINK_TASK, &(nic->state));

Now I can't say definitively that this is going to be wrong on
powerpc, because I don't know the code well enough. But I'd be
90% sure that the unlock is not supposed to be visible to
other CPUs before the writeqs are queued to the card. On x86 it
wouldn't be.



If the relaxed writel and explicit barriers are not well documented and
well understood, then they should not be used.

And if the memory ordering issues are not well understood, then it
should be done with locking and strongly ordered IO accessors.



*You* don't have to watch it, the maintainer does. And if they can't
understand the barriers, then it should not be converted to use them.
Unless you want to take over maintainership. And if you do, then you
should be watching all changes that go into it.



And with the strongly ordered scheme, there is much smaller set of
gotchas again, and it behaves the same as the x86 it was developed on,
and you don't get confused by the list of rules: IO access is either
strongly ordered or weakly ordered.
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Trent Piepho, (Tue May 20, 4:40 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Andreas Schwab, (Tue May 20, 6:00 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Trent Piepho, (Tue May 20, 6:11 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Andreas Schwab, (Tue May 20, 6:47 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Trent Piepho, (Tue May 20, 7:14 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Andreas Schwab, (Wed May 21, 4:03 am)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Trent Piepho, (Wed May 21, 4:25 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Benjamin Herrenschmidt, (Tue May 20, 5:16 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Trent Piepho, (Tue May 20, 6:00 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Benjamin Herrenschmidt, (Wed May 21, 10:00 am)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Trent Piepho, (Wed May 21, 3:44 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Benjamin Herrenschmidt, (Wed May 21, 4:41 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Trent Piepho, (Tue May 20, 6:55 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Benjamin Herrenschmidt, (Wed May 21, 10:01 am)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, David Miller, (Tue May 20, 6:39 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, David Miller, (Tue May 20, 6:53 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Benjamin Herrenschmidt, (Fri May 23, 12:24 am)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Trent Piepho, (Thu May 22, 6:56 pm)
MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Mon May 26, 9:33 pm)
Re: MMIO and gcc re-ordering issue, Jonathan Corbet, (Tue May 27, 11:28 am)
Re: MMIO and gcc re-ordering issue, David Miller, (Mon May 26, 9:40 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Mon May 26, 10:15 pm)
Re: MMIO and gcc re-ordering issue, David Miller, (Mon May 26, 10:28 pm)
Re: MMIO and gcc re-ordering issue, Alan Cox, (Tue May 27, 4:24 am)
Re: MMIO and gcc re-ordering issue, Arjan van de Ven, (Mon May 26, 11:42 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue May 27, 3:08 am)
Re: MMIO and gcc re-ordering issue, Roland Dreier, (Tue May 27, 11:50 am)
Re: MMIO and gcc re-ordering issue, Pavel Machek, (Sat May 31, 4:04 am)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue May 27, 5:11 pm)
Re: MMIO and gcc re-ordering issue, Roland Dreier, (Tue May 27, 5:33 pm)
Re: MMIO and gcc re-ordering issue, Jes Sorensen, (Thu May 29, 10:47 am)
Re: MMIO and gcc re-ordering issue, Jeremy Higdon, (Sat May 31, 3:52 am)
Re: MMIO and gcc re-ordering issue, Jes Sorensen, (Mon Jun 2, 5:56 am)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 3, 12:33 am)
Re: MMIO and gcc re-ordering issue, Jesse Barnes, (Tue Jun 3, 12:52 pm)
Re: MMIO and gcc re-ordering issue, Jes Sorensen, (Thu Jun 5, 4:40 am)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Thu Jun 5, 4:43 am)
Re: MMIO and gcc re-ordering issue, Matthew Wilcox, (Thu Jun 12, 11:07 am)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Thu Jun 12, 8:07 pm)
Re: MMIO and gcc re-ordering issue, Jeremy Higdon, (Tue Jun 3, 4:15 am)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 3, 4:19 am)
Re: MMIO and gcc re-ordering issue, Jeremy Higdon, (Tue Jun 3, 4:45 am)
Re: MMIO and gcc re-ordering issue, Jeremy Higdon, (Mon Jun 2, 5:02 pm)
Re: MMIO and gcc re-ordering issue, Roland Dreier, (Thu May 29, 6:06 pm)
Re: MMIO and gcc re-ordering issue, Trent Piepho, (Thu May 29, 6:25 pm)
Re: MMIO and gcc re-ordering issue, Paul Mackerras, (Thu May 29, 11:56 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Thu May 29, 5:40 pm)
Re: MMIO and gcc re-ordering issue, Jes Sorensen, (Fri May 30, 5:48 am)
Re: MMIO and gcc re-ordering issue, Pavel Machek, (Sat May 31, 4:14 am)
Re: MMIO and gcc re-ordering issue, Jes Sorensen, (Mon Jun 2, 5:48 am)
Re: MMIO and gcc re-ordering issue, Jesse Barnes, (Thu May 29, 5:53 pm)
Re: MMIO and gcc re-ordering issue, Jes Sorensen, (Fri May 30, 5:39 am)
Re: MMIO and gcc re-ordering issue, Trent Piepho, (Thu May 29, 5:48 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Thu May 29, 6:05 pm)
Re: MMIO and gcc re-ordering issue, Trent Piepho, (Thu May 29, 9:53 pm)
Re: MMIO and gcc re-ordering issue, James Bottomley, (Thu May 29, 11:01 am)
Re: MMIO and gcc re-ordering issue, Jes Sorensen, (Fri May 30, 5:36 am)
Re: MMIO and gcc re-ordering issue, Jesse Barnes, (Fri May 30, 1:21 pm)
Re: MMIO and gcc re-ordering issue, Jeremy Higdon, (Sat May 31, 3:57 am)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue May 27, 6:13 pm)
Re: MMIO and gcc re-ordering issue, Roland Dreier, (Tue May 27, 6:39 pm)
Re: MMIO and gcc re-ordering issue, James Bottomley, (Tue May 27, 12:37 pm)
Re: MMIO and gcc re-ordering issue, Roland Dreier, (Tue May 27, 1:38 pm)
Re: MMIO and gcc re-ordering issue, James Bottomley, (Tue May 27, 1:53 pm)
Re: MMIO and gcc re-ordering issue, Roland Dreier, (Tue May 27, 2:07 pm)
Re: MMIO and gcc re-ordering issue, Chris Friesen, (Tue May 27, 5:23 pm)
Re: MMIO and gcc re-ordering issue, Paul Mackerras, (Tue May 27, 7:04 pm)
Re: MMIO and gcc re-ordering issue, Roland Dreier, (Tue May 27, 5:29 pm)
Re: MMIO and gcc re-ordering issue, Roland Dreier, (Tue May 27, 2:17 pm)
Re: MMIO and gcc re-ordering issue, Roland Dreier, (Tue May 27, 12:08 am)
Re: MMIO and gcc re-ordering issue, Arjan van de Ven, (Tue May 27, 12:20 am)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Mon May 26, 11:39 pm)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Tue May 27, 11:35 am)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue May 27, 5:10 pm)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Tue May 27, 5:30 pm)
Re: MMIO and gcc re-ordering issue, Alan Cox, (Tue May 27, 5:38 pm)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Tue May 27, 5:59 pm)
Re: MMIO and gcc re-ordering issue, Matthew Wilcox, (Tue May 27, 5:53 pm)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Tue May 27, 6:02 pm)
Re: MMIO and gcc re-ordering issue, Alan Cox, (Tue May 27, 5:46 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue May 27, 5:38 pm)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Tue May 27, 5:55 pm)
Re: MMIO and gcc re-ordering issue, Russell King, (Mon Jun 2, 3:24 am)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 3, 12:16 am)
Re: MMIO and gcc re-ordering issue, Trent Piepho, (Tue Jun 3, 3:43 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue Jun 3, 6:26 pm)
Re: MMIO and gcc re-ordering issue, Matthew Wilcox, (Tue Jun 3, 5:33 pm)
Re: MMIO and gcc re-ordering issue, Trent Piepho, (Tue Jun 3, 5:44 pm)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 3, 10:25 pm)
Re: MMIO and gcc re-ordering issue, Trent Piepho, (Wed Jun 4, 2:39 am)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Tue Jun 3, 10:47 am)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 3, 10:19 pm)
Re: MMIO and gcc re-ordering issue, Trent Piepho, (Tue Jun 3, 2:47 pm)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Tue Jun 3, 3:07 pm)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 10, 2:56 am)
Re: MMIO and gcc re-ordering issue, Paul Mackerras, (Wed Jun 11, 1:20 am)
Re: MMIO and gcc re-ordering issue, Paul Mackerras, (Wed Jun 11, 12:18 am)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Wed Jun 11, 1:00 am)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Wed Jun 11, 10:46 am)
Re: MMIO and gcc re-ordering issue, Paul Mackerras, (Wed Jun 11, 1:13 am)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Wed Jun 11, 1:35 am)
Re: MMIO and gcc re-ordering issue, Paul Mackerras, (Thu Jun 12, 8:14 am)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Thu Jun 12, 9:08 am)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Wed Jun 11, 2:02 am)
Re: MMIO and gcc re-ordering issue, Jesse Barnes, (Tue Jun 10, 1:41 pm)
Re: MMIO and gcc re-ordering issue, James Bottomley, (Tue Jun 10, 2:10 pm)
Re: MMIO and gcc re-ordering issue, Roland Dreier, (Tue Jun 10, 3:05 pm)
Re: MMIO and gcc re-ordering issue, Jesse Barnes, (Tue Jun 10, 3:19 pm)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 10, 11:29 pm)
Re: MMIO and gcc re-ordering issue, Jesse Barnes, (Wed Jun 11, 12:07 pm)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Thu Jun 12, 7:27 am)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue Jun 10, 11:40 pm)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Wed Jun 11, 12:06 am)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 3, 10:05 pm)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Tue Jun 3, 10:46 pm)
Re: MMIO and gcc re-ordering issue, Alan Cox, (Wed Jun 4, 7:47 am)
Re: MMIO and gcc re-ordering issue, Matthew Wilcox, (Tue Jun 3, 2:55 pm)
Re: MMIO and gcc re-ordering issue, Trent Piepho, (Tue Jun 3, 3:57 pm)
Re: MMIO and gcc re-ordering issue, Matthew Wilcox, (Tue Jun 3, 5:35 pm)
Re: MMIO and gcc re-ordering issue, Trent Piepho, (Tue Jun 3, 5:58 pm)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 3, 10:00 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue Jun 3, 12:32 am)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 3, 2:11 am)
Re: MMIO and gcc re-ordering issue, Paul Mackerras, (Tue Jun 3, 2:53 am)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 3, 3:18 am)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue Jun 3, 2:48 am)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue May 27, 6:19 pm)
Re: MMIO and gcc re-ordering issue, Arnd Bergmann, (Thu May 29, 3:10 am)
Re: MMIO and gcc re-ordering issue, Alan Cox, (Thu May 29, 6:46 am)
Re: MMIO and gcc re-ordering issue, Matthew Wilcox, (Tue May 27, 5:42 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue May 27, 6:17 pm)
Re: MMIO and gcc re-ordering issue, Haavard Skinnemoen, (Wed May 28, 4:36 am)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Thu May 29, 9:13 pm)
Re: MMIO and gcc re-ordering issue, Haavard Skinnemoen, (Fri May 30, 2:07 am)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Fri May 30, 3:24 am)
Re: MMIO and gcc re-ordering issue, Haavard Skinnemoen, (Fri May 30, 4:27 am)
Re: MMIO and gcc re-ordering issue, Geert Uytterhoeven, (Fri May 30, 5:22 am)
Re: MMIO and gcc re-ordering issue, Haavard Skinnemoen, (Mon Jun 2, 4:11 am)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Wed Jun 4, 11:31 am)
Re: MMIO and gcc re-ordering issue, Scott Wood, (Mon Jun 2, 11:48 am)
Re: MMIO and gcc re-ordering issue, Haavard Skinnemoen, (Tue Jun 3, 3:46 am)
Re: MMIO and gcc re-ordering issue, Pantelis Antoniou, (Thu May 29, 7:05 am)
Re: MMIO and gcc re-ordering issue, Trent Piepho, (Tue May 27, 2:23 pm)
Re: MMIO and gcc re-ordering issue, Scott Wood, (Tue May 27, 2:33 pm)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Tue May 27, 12:47 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue May 27, 5:12 pm)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Tue May 27, 1:31 pm)
Re: MMIO and gcc re-ordering issue, Ingo Molnar, (Mon Jun 2, 6:36 am)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Mon Jun 2, 5:53 pm)
MMIO and gcc re-ordering (Was: [PATCH] [POWERPC] Improve (in..., Benjamin Herrenschmidt, (Fri May 23, 8:36 am)
Re: MMIO and gcc re-ordering (Was: [PATCH] [POWERPC] Improve..., Benjamin Herrenschmidt, (Fri May 23, 8:50 am)
Re: MMIO and gcc re-ordering (Was: [PATCH] [POWERPC] Improve..., Benjamin Herrenschmidt, (Fri May 23, 6:47 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Benjamin Herrenschmidt, (Tue May 20, 6:02 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Trent Piepho, (Tue May 20, 6:21 pm)