]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/x86/kernel/cpu/intel.c
x86: unmask CPUID levels on Intel CPUs, fix
[linux-2.6-omap-h63xx.git] / arch / x86 / kernel / cpu / intel.c
index 43c1dcf0bec7a6ead00d7e62fd4e3fce50b6f1b7..549f2ada55f584bd045e13fb1e0c65a029f317e1 100644 (file)
 
 static void __cpuinit early_init_intel(struct cpuinfo_x86 *c)
 {
-       u64 misc_enable;
-
-       /* Unmask CPUID levels if masked */
-       if (!rdmsrl_safe(MSR_IA32_MISC_ENABLE, &misc_enable) &&
-           (misc_enable & MSR_IA32_MISC_ENABLE_LIMIT_CPUID)) {
-               misc_enable &= ~MSR_IA32_MISC_ENABLE_LIMIT_CPUID;
-               wrmsrl(MSR_IA32_MISC_ENABLE, misc_enable);
-               c->cpuid_level = cpuid_eax(0);
+       /* Unmask CPUID levels if masked: */
+       if (c->x86 == 6 && c->x86_model >= 15) {
+               u64 misc_enable;
+
+               rdmsrl(MSR_IA32_MISC_ENABLE, misc_enable);
+
+               if (misc_enable & MSR_IA32_MISC_ENABLE_LIMIT_CPUID) {
+                       misc_enable &= ~MSR_IA32_MISC_ENABLE_LIMIT_CPUID;
+                       wrmsrl(MSR_IA32_MISC_ENABLE, misc_enable);
+                       c->cpuid_level = cpuid_eax(0);
+               }
        }
 
        if ((c->x86 == 0xf && c->x86_model >= 0x03) ||