summaryrefslogtreecommitdiffstats
path: root/include/asm-i386/alternative.h
diff options
context:
space:
mode:
authorJoerg Roedel <joerg.roedel@amd.com>2007-05-10 22:22:14 -0700
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-05-11 08:29:32 -0700
commit6041b57c6c99dcb59524f1bb0db0628c2689a464 (patch)
tree0509eb54f13e94b08afab9fb6bd2947fca73492c /include/asm-i386/alternative.h
parent129a84de2347002f09721cda3155ccfd19fade40 (diff)
i386: work around miscompilation of alternatives code
A recent change makes my Dell 1501 hang on boot. It's an AMD MK-36. I use an x86_64 kernel. It is 100% reproducible. I debugged this problem a bit and my compiler[1]interprets the =A constraint as %rax instead of %edx:%eax on x86_64 which causes the problem. The appended patch provides a workaround for this and fixed the hang on my machine. [1] gcc version 4.1.3 20070429 (prerelease) (Debian 4.1.2-5) Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> Cc: Andi Kleen <ak@suse.de> Cc: Benny Halevy <bhalevy@panasas.com> Cc: Pete Zaitcev <zaitcev@redhat.com> Cc: "Joerg Roedel" <joerg.roedel@amd.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/asm-i386/alternative.h')
-rw-r--r--include/asm-i386/alternative.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/include/asm-i386/alternative.h b/include/asm-i386/alternative.h
index 0f70b379b02..eb7da5402bf 100644
--- a/include/asm-i386/alternative.h
+++ b/include/asm-i386/alternative.h
@@ -98,6 +98,12 @@ static inline void alternatives_smp_switch(int smp) {}
".previous" : output : [feat] "i" (feature), ##input)
/*
+ * use this macro(s) if you need more than one output parameter
+ * in alternative_io
+ */
+#define ASM_OUTPUT2(a, b) a, b
+
+/*
* Alternative inline assembly for SMP.
*
* The LOCK_PREFIX macro defined here replaces the LOCK and