Re: [PATCH]: powerpc: clarify use of twi/isync in io macros
flat view
From: Linas Vepstas <hidden>
Date: 2006-09-19 20:10:57
On Tue, Sep 19, 2006 at 09:57:11PM +0200, Segher Boessenkool wrote:
..."before the isync has completed, and it won't complete until the branch is resolved;"...
New improved patch attched.
You shouldn't post my test and put your signed-off on it, esp. if I forgot to type half a sentence :-) Here, have one though:
My moral fiber did twinge before I hit the send button, but I confused it with a muscle spasm.
Signed-off-by: Segher Boessenkool <redacted>
-------- Clarify why twi appears in the i/o macros. Signed-off-by: Linas Vepstas <redacted> Signed-off-by: Segher Boessenkool <redacted> ---- include/asm-powerpc/io.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) Index: linux-2.6.18-rc7-git1/include/asm-powerpc/io.h ===================================================================
--- linux-2.6.18-rc7-git1.orig/include/asm-powerpc/io.h 2006-09-14 13:38:48.000000000 -0500
+++ linux-2.6.18-rc7-git1/include/asm-powerpc/io.h 2006-09-19 15:04:30.000000000 -0500@@ -278,6 +278,18 @@ static inline void iosync(void) * These routines do not perform EEH-related I/O address translation, * and should not be used directly by device drivers. Use inb/readb * instead. + * + * Read operations have additional twi & isync to make sure the read + * is actually performed (i.e. the data has come back) before we start + * executing any following instructions. + * + * A data-dependent branch followed by an isync ensures that no + * instructions after the isync in program order will be + * (speculatively) executed before the isync has completed, and + * the isync won't complete until the branch is resolved. The + * the load that the twi depends on has to complete before + * anything else is executed; in particular, it's a barrier to + * keep MMIO reads ordered before main-storage accesses. */ static inline int in_8(const volatile unsigned char __iomem *addr) {