diff options
| -rw-r--r-- | arch/x86/kernel/alternative.c | 36 |
1 files changed, 13 insertions, 23 deletions
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c index 2763cb37b553..65a0c1b48696 100644 --- a/arch/x86/kernel/alternative.c +++ b/arch/x86/kernel/alternative.c | |||
| @@ -145,35 +145,25 @@ static const unsigned char *const p6_nops[ASM_NOP_MAX+1] = { | |||
| 145 | extern char __vsyscall_0; | 145 | extern char __vsyscall_0; |
| 146 | const unsigned char *const *find_nop_table(void) | 146 | const unsigned char *const *find_nop_table(void) |
| 147 | { | 147 | { |
| 148 | return boot_cpu_data.x86_vendor != X86_VENDOR_INTEL || | 148 | if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL && |
| 149 | boot_cpu_data.x86 < 6 ? k8_nops : p6_nops; | 149 | boot_cpu_has(X86_FEATURE_NOPL)) |
| 150 | return p6_nops; | ||
| 151 | else | ||
| 152 | return k8_nops; | ||
| 150 | } | 153 | } |
| 151 | 154 | ||
| 152 | #else /* CONFIG_X86_64 */ | 155 | #else /* CONFIG_X86_64 */ |
| 153 | 156 | ||
| 154 | static const struct nop { | ||
| 155 | int cpuid; | ||
| 156 | const unsigned char *const *noptable; | ||
| 157 | } noptypes[] = { | ||
| 158 | { X86_FEATURE_K8, k8_nops }, | ||
| 159 | { X86_FEATURE_K7, k7_nops }, | ||
| 160 | { X86_FEATURE_P4, p6_nops }, | ||
| 161 | { X86_FEATURE_P3, p6_nops }, | ||
| 162 | { -1, NULL } | ||
| 163 | }; | ||
| 164 | |||
| 165 | const unsigned char *const *find_nop_table(void) | 157 | const unsigned char *const *find_nop_table(void) |
| 166 | { | 158 | { |
| 167 | const unsigned char *const *noptable = intel_nops; | 159 | if (boot_cpu_has(X86_FEATURE_K8)) |
| 168 | int i; | 160 | return k8_nops; |
| 169 | 161 | else if (boot_cpu_has(X86_FEATURE_K7)) | |
| 170 | for (i = 0; noptypes[i].cpuid >= 0; i++) { | 162 | return k7_nops; |
| 171 | if (boot_cpu_has(noptypes[i].cpuid)) { | 163 | else if (boot_cpu_has(X86_FEATURE_NOPL)) |
| 172 | noptable = noptypes[i].noptable; | 164 | return p6_nops; |
| 173 | break; | 165 | else |
| 174 | } | 166 | return intel_nops; |
| 175 | } | ||
| 176 | return noptable; | ||
| 177 | } | 167 | } |
| 178 | 168 | ||
| 179 | #endif /* CONFIG_X86_64 */ | 169 | #endif /* CONFIG_X86_64 */ |
