diff options
author | Jan Beulich <jbeulich@novell.com> | 2006-08-30 13:37:10 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-08-30 19:05:15 -0400 |
commit | 61171b8dbd36b0cc34d3813a59a8e4dc2984414d (patch) | |
tree | 5c4dede0bddc19c1e564ebcd95976afcebe63a4f | |
parent | 29fe5f3bafb644c33269fb0f2a719d4809a07332 (diff) |
[PATCH] x86: fix x86 cpuid keys used in alternative_smp()
By hard-coding the cpuid keys for alternative_smp() rather than using
the symbolic constant it turned out that incorrect values were used on
both i386 (0x68 instead of 0x69) and x86-64 (0x66 instead of 0x68).
Signed-off-by: Jan Beulich <jbeulich@novell.com>
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | include/asm-i386/alternative.h | 2 | ||||
-rw-r--r-- | include/asm-x86_64/alternative.h | 3 |
2 files changed, 3 insertions, 2 deletions
diff --git a/include/asm-i386/alternative.h b/include/asm-i386/alternative.h index 96adbabec740..bb3b6317c810 100644 --- a/include/asm-i386/alternative.h +++ b/include/asm-i386/alternative.h | |||
@@ -116,7 +116,7 @@ static inline void alternatives_smp_switch(int smp) {} | |||
116 | " .align 4\n" \ | 116 | " .align 4\n" \ |
117 | " .long 661b\n" /* label */ \ | 117 | " .long 661b\n" /* label */ \ |
118 | " .long 663f\n" /* new instruction */ \ | 118 | " .long 663f\n" /* new instruction */ \ |
119 | " .byte 0x68\n" /* X86_FEATURE_UP */ \ | 119 | " .byte " __stringify(X86_FEATURE_UP) "\n" \ |
120 | " .byte 662b-661b\n" /* sourcelen */ \ | 120 | " .byte 662b-661b\n" /* sourcelen */ \ |
121 | " .byte 664f-663f\n" /* replacementlen */ \ | 121 | " .byte 664f-663f\n" /* replacementlen */ \ |
122 | ".previous\n" \ | 122 | ".previous\n" \ |
diff --git a/include/asm-x86_64/alternative.h b/include/asm-x86_64/alternative.h index aa67bfd1b3ce..709ad3f0d354 100644 --- a/include/asm-x86_64/alternative.h +++ b/include/asm-x86_64/alternative.h | |||
@@ -4,6 +4,7 @@ | |||
4 | #ifdef __KERNEL__ | 4 | #ifdef __KERNEL__ |
5 | 5 | ||
6 | #include <linux/types.h> | 6 | #include <linux/types.h> |
7 | #include <asm/cpufeature.h> | ||
7 | 8 | ||
8 | struct alt_instr { | 9 | struct alt_instr { |
9 | u8 *instr; /* original instruction */ | 10 | u8 *instr; /* original instruction */ |
@@ -130,7 +131,7 @@ static inline void alternatives_smp_switch(int smp) {} | |||
130 | " .align 8\n" \ | 131 | " .align 8\n" \ |
131 | " .quad 661b\n" /* label */ \ | 132 | " .quad 661b\n" /* label */ \ |
132 | " .quad 663f\n" /* new instruction */ \ | 133 | " .quad 663f\n" /* new instruction */ \ |
133 | " .byte 0x66\n" /* X86_FEATURE_UP */ \ | 134 | " .byte " __stringify(X86_FEATURE_UP) "\n" \ |
134 | " .byte 662b-661b\n" /* sourcelen */ \ | 135 | " .byte 662b-661b\n" /* sourcelen */ \ |
135 | " .byte 664f-663f\n" /* replacementlen */ \ | 136 | " .byte 664f-663f\n" /* replacementlen */ \ |
136 | ".previous\n" \ | 137 | ".previous\n" \ |