diff options
Diffstat (limited to 'arch/i386/kernel/cpu/intel.c')
-rw-r--r-- | arch/i386/kernel/cpu/intel.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/arch/i386/kernel/cpu/intel.c b/arch/i386/kernel/cpu/intel.c index 94a95aa5227e..56fe26584957 100644 --- a/arch/i386/kernel/cpu/intel.c +++ b/arch/i386/kernel/cpu/intel.c | |||
@@ -107,7 +107,7 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c) | |||
107 | * Note that the workaround only should be initialized once... | 107 | * Note that the workaround only should be initialized once... |
108 | */ | 108 | */ |
109 | c->f00f_bug = 0; | 109 | c->f00f_bug = 0; |
110 | if ( c->x86 == 5 ) { | 110 | if (!paravirt_enabled() && c->x86 == 5) { |
111 | static int f00f_workaround_enabled = 0; | 111 | static int f00f_workaround_enabled = 0; |
112 | 112 | ||
113 | c->f00f_bug = 1; | 113 | c->f00f_bug = 1; |
@@ -195,8 +195,16 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c) | |||
195 | if ((c->x86 == 0xf && c->x86_model >= 0x03) || | 195 | if ((c->x86 == 0xf && c->x86_model >= 0x03) || |
196 | (c->x86 == 0x6 && c->x86_model >= 0x0e)) | 196 | (c->x86 == 0x6 && c->x86_model >= 0x0e)) |
197 | set_bit(X86_FEATURE_CONSTANT_TSC, c->x86_capability); | 197 | set_bit(X86_FEATURE_CONSTANT_TSC, c->x86_capability); |
198 | } | ||
199 | 198 | ||
199 | if (cpu_has_ds) { | ||
200 | unsigned int l1; | ||
201 | rdmsr(MSR_IA32_MISC_ENABLE, l1, l2); | ||
202 | if (!(l1 & (1<<11))) | ||
203 | set_bit(X86_FEATURE_BTS, c->x86_capability); | ||
204 | if (!(l1 & (1<<12))) | ||
205 | set_bit(X86_FEATURE_PEBS, c->x86_capability); | ||
206 | } | ||
207 | } | ||
200 | 208 | ||
201 | static unsigned int __cpuinit intel_size_cache(struct cpuinfo_x86 * c, unsigned int size) | 209 | static unsigned int __cpuinit intel_size_cache(struct cpuinfo_x86 * c, unsigned int size) |
202 | { | 210 | { |