summaryrefslogtreecommitdiffstats
path: root/include/asm-i386
diff options
context:
space:
mode:
authorAndi Kleen <ak@suse.de>2006-01-11 22:45:27 +0100
committerLinus Torvalds <torvalds@g5.osdl.org>2006-01-12 04:04:58 +0100
commit487472bc01fab0625996aad37836aad931e4eda9 (patch)
treeede143ee4c756413b396911b3702068283b052f2 /include/asm-i386
parent[PATCH] x86_64: On Intel CPUs don't do an additional CPU sync before RDTSC (diff)
downloadlinux-487472bc01fab0625996aad37836aad931e4eda9.tar.xz
linux-487472bc01fab0625996aad37836aad931e4eda9.zip
[PATCH] i386: Replace broken serialize_cpu in microcode driver with correct sync_core
Passing random input values in eax to cpuid is not a good idea because the CPU will GPF for unknown ones. Use the correct x86-64 version that exists for a longer time too. This also adds a memory barrier to prevent the optimizer from reordering. Cc: tigran@veritas.com Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/asm-i386')
-rw-r--r--include/asm-i386/processor.h6
1 files changed, 4 insertions, 2 deletions
diff --git a/include/asm-i386/processor.h b/include/asm-i386/processor.h
index 53461f42b663..13ecf66b098c 100644
--- a/include/asm-i386/processor.h
+++ b/include/asm-i386/processor.h
@@ -281,9 +281,11 @@ static inline void clear_in_cr4 (unsigned long mask)
outb((data), 0x23); \
} while (0)
-static inline void serialize_cpu(void)
+/* Stop speculative execution */
+static inline void sync_core(void)
{
- __asm__ __volatile__ ("cpuid" : : : "ax", "bx", "cx", "dx");
+ int tmp;
+ asm volatile("cpuid" : "=a" (tmp) : "0" (1) : "ebx","ecx","edx","memory");
}
static inline void __monitor(const void *eax, unsigned long ecx,