x86: fence oostores on 64-bit
authorNick Piggin <npiggin@suse.de>
Sat, 13 Oct 2007 01:06:00 +0000 (03:06 +0200)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Sat, 13 Oct 2007 01:41:21 +0000 (18:41 -0700)
movnt* instructions are not strongly ordered with respect to other stores,
so if we are to assume stores are strongly ordered in the rest of the 64
bit code, we must fence these off (see similar examples in 32 bit code).

[ The AMD memory ordering document seems to say that nontemporal stores can
  also pass earlier regular stores, so maybe we need sfences _before_
  movnt* everywhere too? ]

Signed-off-by: Nick Piggin <npiggin@suse.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/x86/lib/copy_user_nocache_64.S

index 4620efb12f132a59cd6a2fdf8758fa5e0e88f596..5196762b3b0ea3017cbb43e97f253c68055a1a7f 100644 (file)
@@ -117,6 +117,7 @@ ENTRY(__copy_user_nocache)
        popq %rbx
        CFI_ADJUST_CFA_OFFSET -8
        CFI_RESTORE rbx
+       sfence
        ret
        CFI_RESTORE_STATE