|
@@ -199,7 +199,19 @@ void __init arch_init_ideal_nops(void)
|
|
|
{
|
|
|
switch (boot_cpu_data.x86_vendor) {
|
|
|
case X86_VENDOR_INTEL:
|
|
|
- if (boot_cpu_has(X86_FEATURE_NOPL)) {
|
|
|
+ /*
|
|
|
+ * Due to a decoder implementation quirk, some
|
|
|
+ * specific Intel CPUs actually perform better with
|
|
|
+ * the "k8_nops" than with the SDM-recommended NOPs.
|
|
|
+ */
|
|
|
+ if (boot_cpu_data.x86 == 6 &&
|
|
|
+ boot_cpu_data.x86_model >= 0x0f &&
|
|
|
+ boot_cpu_data.x86_model != 0x1c &&
|
|
|
+ boot_cpu_data.x86_model != 0x26 &&
|
|
|
+ boot_cpu_data.x86_model != 0x27 &&
|
|
|
+ boot_cpu_data.x86_model < 0x30) {
|
|
|
+ ideal_nops = k8_nops;
|
|
|
+ } else if (boot_cpu_has(X86_FEATURE_NOPL)) {
|
|
|
ideal_nops = p6_nops;
|
|
|
} else {
|
|
|
#ifdef CONFIG_X86_64
|