Re: MMIO and gcc re-ordering issue

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Trent Piepho
Date: Tuesday, May 27, 2008 - 11:23 am

On Tue, 27 May 2008, Linus Torvalds wrote:

Is there an issue with anything _besides_ coherent DMA?

Could one have a special version of the accessors for drivers that want to
assume they are strictly ordered vs coherent DMA memory?  That would be much
easier to get right, without slowing _everything_ down.  The problem with the
raw versions is that on some arches they are much more raw than just not being
ordered w.r.t normal memory.

__raw_writel()
No ordering beyond what the arch provides natively.  The only thing you can
assume is that reads and writes to the same location on the same CPU are
ordered.

writel()
Strictly ordered with respect to any other IO, but not to normal memory. 
(this is what Documentation/memory-barriers.txt claims).  Should probably be
strictly ordered vs locks as well.  Would be strictly ordered w.r.t. the
streaming DMA sync calls of course.

strict_writel()
Strictly ordered with respect to normal (incl. coherent DMA) memory as well.

One could even go as far as to allow a driver to "#define WANT_STRICT_IO" and
then it would get the strict versions.  Add that to any driver that uses DMA
and then worry about vetting those drivers.

It's also worth nothing that adding barriers to IO accessors doesn't mean you
never have to worry about barriers with coherent DMA.  Inherent with coherent
DMA, and driving hardware in general, there are various sequence points where
one must be sure one operation has finished before starting the next.  Making
sure you're doing with DMA memory before telling the hardware to do something
with it a common example.  Often the "telling the hardware to do something" is
done via an IO accessor function, but not always.

You can have buffer descriptors in DMA memory that describe the DMA buffers to
the hardware.  It would be critical to be finished reading a DMA buffer before
updating the descriptor to indicate that it's empty.  You could trigger a DMA
operation not by a call to an IO accessor, but with an atomic operation to a
variable shared with an ISR.  When the ISR runs it sees the change and does
the necessary IO.
--
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, 1:40 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Benjamin Herrenschmidt, (Tue May 20, 2:16 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Trent Piepho, (Tue May 20, 3:00 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Andreas Schwab, (Tue May 20, 3:00 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Benjamin Herrenschmidt, (Tue May 20, 3:02 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Trent Piepho, (Tue May 20, 3:11 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Trent Piepho, (Tue May 20, 3:21 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, David Miller, (Tue May 20, 3:39 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Andreas Schwab, (Tue May 20, 3:47 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, David Miller, (Tue May 20, 3:53 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Trent Piepho, (Tue May 20, 3:55 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Trent Piepho, (Tue May 20, 4:14 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Andreas Schwab, (Wed May 21, 1:03 am)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Benjamin Herrenschmidt, (Wed May 21, 7:00 am)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Benjamin Herrenschmidt, (Wed May 21, 7:01 am)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Trent Piepho, (Wed May 21, 12:44 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Trent Piepho, (Wed May 21, 1:25 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Benjamin Herrenschmidt, (Wed May 21, 1:41 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Trent Piepho, (Thu May 22, 3:56 pm)
Re: [PATCH] [POWERPC] Improve (in|out)_beXX() asm code, Benjamin Herrenschmidt, (Thu May 22, 9:24 pm)
MMIO and gcc re-ordering (Was: [PATCH] [POWERPC] Improve ( ..., Benjamin Herrenschmidt, (Fri May 23, 5:36 am)
Re: MMIO and gcc re-ordering (Was: [PATCH] [POWERPC] Impro ..., Benjamin Herrenschmidt, (Fri May 23, 5:50 am)
Re: MMIO and gcc re-ordering (Was: [PATCH] [POWERPC] Impro ..., Benjamin Herrenschmidt, (Fri May 23, 3:47 pm)
MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Mon May 26, 6:33 pm)
Re: MMIO and gcc re-ordering issue, David Miller, (Mon May 26, 6:40 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Mon May 26, 7:15 pm)
Re: MMIO and gcc re-ordering issue, David Miller, (Mon May 26, 7:28 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Mon May 26, 8:39 pm)
Re: MMIO and gcc re-ordering issue, Arjan van de Ven, (Mon May 26, 8:42 pm)
Re: MMIO and gcc re-ordering issue, Roland Dreier, (Mon May 26, 9:08 pm)
Re: MMIO and gcc re-ordering issue, Arjan van de Ven, (Mon May 26, 9:20 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue May 27, 12:08 am)
Re: MMIO and gcc re-ordering issue, Alan Cox, (Tue May 27, 1:24 am)
Re: MMIO and gcc re-ordering issue, Jonathan Corbet, (Tue May 27, 8:28 am)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Tue May 27, 8:35 am)
Re: MMIO and gcc re-ordering issue, Roland Dreier, (Tue May 27, 8:50 am)
Re: MMIO and gcc re-ordering issue, James Bottomley, (Tue May 27, 9:37 am)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Tue May 27, 9:47 am)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Tue May 27, 10:31 am)
Re: MMIO and gcc re-ordering issue, Roland Dreier, (Tue May 27, 10:38 am)
Re: MMIO and gcc re-ordering issue, James Bottomley, (Tue May 27, 10:53 am)
Re: MMIO and gcc re-ordering issue, Roland Dreier, (Tue May 27, 11:07 am)
Re: MMIO and gcc re-ordering issue, Roland Dreier, (Tue May 27, 11:17 am)
Re: MMIO and gcc re-ordering issue, Trent Piepho, (Tue May 27, 11:23 am)
Re: MMIO and gcc re-ordering issue, Scott Wood, (Tue May 27, 11:33 am)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue May 27, 2:10 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue May 27, 2:11 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue May 27, 2:12 pm)
Re: MMIO and gcc re-ordering issue, Chris Friesen, (Tue May 27, 2:23 pm)
Re: MMIO and gcc re-ordering issue, Roland Dreier, (Tue May 27, 2:29 pm)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Tue May 27, 2:30 pm)
Re: MMIO and gcc re-ordering issue, Roland Dreier, (Tue May 27, 2:33 pm)
Re: MMIO and gcc re-ordering issue, Alan Cox, (Tue May 27, 2:38 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue May 27, 2:38 pm)
Re: MMIO and gcc re-ordering issue, Matthew Wilcox, (Tue May 27, 2:42 pm)
Re: MMIO and gcc re-ordering issue, Alan Cox, (Tue May 27, 2:46 pm)
Re: MMIO and gcc re-ordering issue, Matthew Wilcox, (Tue May 27, 2:53 pm)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Tue May 27, 2:55 pm)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Tue May 27, 2:59 pm)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Tue May 27, 3:02 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue May 27, 3:13 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue May 27, 3:17 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue May 27, 3:19 pm)
Re: MMIO and gcc re-ordering issue, Roland Dreier, (Tue May 27, 3:39 pm)
Re: MMIO and gcc re-ordering issue, Paul Mackerras, (Tue May 27, 4:04 pm)
Re: MMIO and gcc re-ordering issue, Haavard Skinnemoen, (Wed May 28, 1:36 am)
Re: MMIO and gcc re-ordering issue, Arnd Bergmann, (Thu May 29, 12:10 am)
Re: MMIO and gcc re-ordering issue, Alan Cox, (Thu May 29, 3:46 am)
Re: MMIO and gcc re-ordering issue, Pantelis Antoniou, (Thu May 29, 4:05 am)
Re: MMIO and gcc re-ordering issue, Jes Sorensen, (Thu May 29, 7:47 am)
Re: MMIO and gcc re-ordering issue, James Bottomley, (Thu May 29, 8:01 am)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Thu May 29, 2:40 pm)
Re: MMIO and gcc re-ordering issue, Trent Piepho, (Thu May 29, 2:48 pm)
Re: MMIO and gcc re-ordering issue, Jesse Barnes, (Thu May 29, 2:53 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Thu May 29, 3:05 pm)
Re: MMIO and gcc re-ordering issue, Roland Dreier, (Thu May 29, 3:06 pm)
Re: MMIO and gcc re-ordering issue, Trent Piepho, (Thu May 29, 3:25 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Thu May 29, 6:13 pm)
Re: MMIO and gcc re-ordering issue, Trent Piepho, (Thu May 29, 6:53 pm)
Re: MMIO and gcc re-ordering issue, Paul Mackerras, (Thu May 29, 8:56 pm)
Re: MMIO and gcc re-ordering issue, Haavard Skinnemoen, (Thu May 29, 11:07 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Fri May 30, 12:24 am)
Re: MMIO and gcc re-ordering issue, Haavard Skinnemoen, (Fri May 30, 1:27 am)
Re: MMIO and gcc re-ordering issue, Geert Uytterhoeven, (Fri May 30, 2:22 am)
Re: MMIO and gcc re-ordering issue, Jes Sorensen, (Fri May 30, 2:36 am)
Re: MMIO and gcc re-ordering issue, Jes Sorensen, (Fri May 30, 2:39 am)
Re: MMIO and gcc re-ordering issue, Jes Sorensen, (Fri May 30, 2:48 am)
Re: MMIO and gcc re-ordering issue, Jesse Barnes, (Fri May 30, 10:21 am)
Re: MMIO and gcc re-ordering issue, Jeremy Higdon, (Sat May 31, 12:52 am)
Re: MMIO and gcc re-ordering issue, Jeremy Higdon, (Sat May 31, 12:57 am)
Re: MMIO and gcc re-ordering issue, Pavel Machek, (Sat May 31, 1:04 am)
Re: MMIO and gcc re-ordering issue, Pavel Machek, (Sat May 31, 1:14 am)
Re: MMIO and gcc re-ordering issue, Russell King, (Mon Jun 2, 12:24 am)
Re: MMIO and gcc re-ordering issue, Haavard Skinnemoen, (Mon Jun 2, 1:11 am)
Re: MMIO and gcc re-ordering issue, Jes Sorensen, (Mon Jun 2, 2:48 am)
Re: MMIO and gcc re-ordering issue, Jes Sorensen, (Mon Jun 2, 2:56 am)
Re: MMIO and gcc re-ordering issue, Ingo Molnar, (Mon Jun 2, 3:36 am)
Re: MMIO and gcc re-ordering issue, Scott Wood, (Mon Jun 2, 8:48 am)
Re: MMIO and gcc re-ordering issue, Jeremy Higdon, (Mon Jun 2, 2:02 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Mon Jun 2, 2:53 pm)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Mon Jun 2, 9:16 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Mon Jun 2, 9:32 pm)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Mon Jun 2, 9:33 pm)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Mon Jun 2, 11:11 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Mon Jun 2, 11:48 pm)
Re: MMIO and gcc re-ordering issue, Paul Mackerras, (Mon Jun 2, 11:53 pm)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 3, 12:18 am)
Re: MMIO and gcc re-ordering issue, Haavard Skinnemoen, (Tue Jun 3, 12:46 am)
Re: MMIO and gcc re-ordering issue, Jeremy Higdon, (Tue Jun 3, 1:15 am)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 3, 1:19 am)
Re: MMIO and gcc re-ordering issue, Jeremy Higdon, (Tue Jun 3, 1:45 am)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Tue Jun 3, 7:47 am)
Re: MMIO and gcc re-ordering issue, Jesse Barnes, (Tue Jun 3, 9:52 am)
Re: MMIO and gcc re-ordering issue, Trent Piepho, (Tue Jun 3, 11:47 am)
Re: MMIO and gcc re-ordering issue, Matthew Wilcox, (Tue Jun 3, 11:55 am)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Tue Jun 3, 12:07 pm)
Re: MMIO and gcc re-ordering issue, Trent Piepho, (Tue Jun 3, 12:43 pm)
Re: MMIO and gcc re-ordering issue, Trent Piepho, (Tue Jun 3, 12:57 pm)
Re: MMIO and gcc re-ordering issue, Matthew Wilcox, (Tue Jun 3, 2:33 pm)
Re: MMIO and gcc re-ordering issue, Matthew Wilcox, (Tue Jun 3, 2:35 pm)
Re: MMIO and gcc re-ordering issue, Trent Piepho, (Tue Jun 3, 2:44 pm)
Re: MMIO and gcc re-ordering issue, Trent Piepho, (Tue Jun 3, 2:58 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue Jun 3, 3:26 pm)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 3, 7:00 pm)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 3, 7:05 pm)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 3, 7:19 pm)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 3, 7:25 pm)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Tue Jun 3, 7:46 pm)
Re: MMIO and gcc re-ordering issue, Trent Piepho, (Tue Jun 3, 11:39 pm)
Re: MMIO and gcc re-ordering issue, Alan Cox, (Wed Jun 4, 4:47 am)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Wed Jun 4, 8:31 am)
Re: MMIO and gcc re-ordering issue, Jes Sorensen, (Thu Jun 5, 1:40 am)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Thu Jun 5, 1:43 am)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Mon Jun 9, 11:56 pm)
Re: MMIO and gcc re-ordering issue, Jesse Barnes, (Tue Jun 10, 10:41 am)
Re: MMIO and gcc re-ordering issue, James Bottomley, (Tue Jun 10, 11:10 am)
Re: MMIO and gcc re-ordering issue, Roland Dreier, (Tue Jun 10, 12:05 pm)
Re: MMIO and gcc re-ordering issue, Jesse Barnes, (Tue Jun 10, 12:19 pm)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 10, 8:29 pm)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Tue Jun 10, 8:40 pm)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 10, 9:06 pm)
Re: MMIO and gcc re-ordering issue, Paul Mackerras, (Tue Jun 10, 9:18 pm)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 10, 10:00 pm)
Re: MMIO and gcc re-ordering issue, Paul Mackerras, (Tue Jun 10, 10:13 pm)
Re: MMIO and gcc re-ordering issue, Paul Mackerras, (Tue Jun 10, 10:20 pm)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 10, 10:35 pm)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Tue Jun 10, 11:02 pm)
Re: MMIO and gcc re-ordering issue, Linus Torvalds, (Wed Jun 11, 7:46 am)
Re: MMIO and gcc re-ordering issue, Jesse Barnes, (Wed Jun 11, 9:07 am)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Thu Jun 12, 4:27 am)
Re: MMIO and gcc re-ordering issue, Paul Mackerras, (Thu Jun 12, 5:14 am)
Re: MMIO and gcc re-ordering issue, Nick Piggin, (Thu Jun 12, 6:08 am)
Re: MMIO and gcc re-ordering issue, Matthew Wilcox, (Thu Jun 12, 8:07 am)
Re: MMIO and gcc re-ordering issue, Benjamin Herrenschmidt, (Thu Jun 12, 5:07 pm)