|
@@ -145,35 +145,25 @@ static const unsigned char *const p6_nops[ASM_NOP_MAX+1] = {
|
|
extern char __vsyscall_0;
|
|
extern char __vsyscall_0;
|
|
const unsigned char *const *find_nop_table(void)
|
|
const unsigned char *const *find_nop_table(void)
|
|
{
|
|
{
|
|
- return boot_cpu_data.x86_vendor != X86_VENDOR_INTEL ||
|
|
|
|
- boot_cpu_data.x86 < 6 ? k8_nops : p6_nops;
|
|
|
|
|
|
+ if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL &&
|
|
|
|
+ boot_cpu_has(X86_FEATURE_NOPL))
|
|
|
|
+ return p6_nops;
|
|
|
|
+ else
|
|
|
|
+ return k8_nops;
|
|
}
|
|
}
|
|
|
|
|
|
#else /* CONFIG_X86_64 */
|
|
#else /* CONFIG_X86_64 */
|
|
|
|
|
|
-static const struct nop {
|
|
|
|
- int cpuid;
|
|
|
|
- const unsigned char *const *noptable;
|
|
|
|
-} noptypes[] = {
|
|
|
|
- { X86_FEATURE_K8, k8_nops },
|
|
|
|
- { X86_FEATURE_K7, k7_nops },
|
|
|
|
- { X86_FEATURE_P4, p6_nops },
|
|
|
|
- { X86_FEATURE_P3, p6_nops },
|
|
|
|
- { -1, NULL }
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
const unsigned char *const *find_nop_table(void)
|
|
const unsigned char *const *find_nop_table(void)
|
|
{
|
|
{
|
|
- const unsigned char *const *noptable = intel_nops;
|
|
|
|
- int i;
|
|
|
|
-
|
|
|
|
- for (i = 0; noptypes[i].cpuid >= 0; i++) {
|
|
|
|
- if (boot_cpu_has(noptypes[i].cpuid)) {
|
|
|
|
- noptable = noptypes[i].noptable;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return noptable;
|
|
|
|
|
|
+ if (boot_cpu_has(X86_FEATURE_K8))
|
|
|
|
+ return k8_nops;
|
|
|
|
+ else if (boot_cpu_has(X86_FEATURE_K7))
|
|
|
|
+ return k7_nops;
|
|
|
|
+ else if (boot_cpu_has(X86_FEATURE_NOPL))
|
|
|
|
+ return p6_nops;
|
|
|
|
+ else
|
|
|
|
+ return intel_nops;
|
|
}
|
|
}
|
|
|
|
|
|
#endif /* CONFIG_X86_64 */
|
|
#endif /* CONFIG_X86_64 */
|