diff options
Diffstat (limited to 'arch/x86/kernel/cpu/intel.c')
| -rw-r--r-- | arch/x86/kernel/cpu/intel.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c index df86bc8c859..fc73a34ba8c 100644 --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c | |||
| @@ -29,10 +29,10 @@ | |||
| 29 | 29 | ||
| 30 | static void __cpuinit early_init_intel(struct cpuinfo_x86 *c) | 30 | static void __cpuinit early_init_intel(struct cpuinfo_x86 *c) |
| 31 | { | 31 | { |
| 32 | u64 misc_enable; | ||
| 33 | |||
| 32 | /* Unmask CPUID levels if masked: */ | 34 | /* Unmask CPUID levels if masked: */ |
| 33 | if (c->x86 > 6 || (c->x86 == 6 && c->x86_model >= 0xd)) { | 35 | if (c->x86 > 6 || (c->x86 == 6 && c->x86_model >= 0xd)) { |
| 34 | u64 misc_enable; | ||
| 35 | |||
| 36 | rdmsrl(MSR_IA32_MISC_ENABLE, misc_enable); | 36 | rdmsrl(MSR_IA32_MISC_ENABLE, misc_enable); |
| 37 | 37 | ||
| 38 | if (misc_enable & MSR_IA32_MISC_ENABLE_LIMIT_CPUID) { | 38 | if (misc_enable & MSR_IA32_MISC_ENABLE_LIMIT_CPUID) { |
| @@ -118,8 +118,6 @@ static void __cpuinit early_init_intel(struct cpuinfo_x86 *c) | |||
| 118 | * (model 2) with the same problem. | 118 | * (model 2) with the same problem. |
| 119 | */ | 119 | */ |
| 120 | if (c->x86 == 15) { | 120 | if (c->x86 == 15) { |
| 121 | u64 misc_enable; | ||
| 122 | |||
| 123 | rdmsrl(MSR_IA32_MISC_ENABLE, misc_enable); | 121 | rdmsrl(MSR_IA32_MISC_ENABLE, misc_enable); |
| 124 | 122 | ||
| 125 | if (misc_enable & MSR_IA32_MISC_ENABLE_FAST_STRING) { | 123 | if (misc_enable & MSR_IA32_MISC_ENABLE_FAST_STRING) { |
| @@ -130,6 +128,19 @@ static void __cpuinit early_init_intel(struct cpuinfo_x86 *c) | |||
| 130 | } | 128 | } |
| 131 | } | 129 | } |
| 132 | #endif | 130 | #endif |
| 131 | |||
| 132 | /* | ||
| 133 | * If fast string is not enabled in IA32_MISC_ENABLE for any reason, | ||
| 134 | * clear the fast string and enhanced fast string CPU capabilities. | ||
| 135 | */ | ||
| 136 | if (c->x86 > 6 || (c->x86 == 6 && c->x86_model >= 0xd)) { | ||
| 137 | rdmsrl(MSR_IA32_MISC_ENABLE, misc_enable); | ||
| 138 | if (!(misc_enable & MSR_IA32_MISC_ENABLE_FAST_STRING)) { | ||
| 139 | printk(KERN_INFO "Disabled fast string operations\n"); | ||
| 140 | setup_clear_cpu_cap(X86_FEATURE_REP_GOOD); | ||
| 141 | setup_clear_cpu_cap(X86_FEATURE_ERMS); | ||
| 142 | } | ||
| 143 | } | ||
| 133 | } | 144 | } |
| 134 | 145 | ||
| 135 | #ifdef CONFIG_X86_32 | 146 | #ifdef CONFIG_X86_32 |
