diff options
-rw-r--r-- | arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c index ae9b503220ca..badce5084060 100644 --- a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c +++ b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | |||
@@ -588,6 +588,21 @@ static const struct dmi_system_id sw_any_bug_dmi_table[] = { | |||
588 | }, | 588 | }, |
589 | { } | 589 | { } |
590 | }; | 590 | }; |
591 | |||
592 | static int acpi_cpufreq_blacklist(struct cpuinfo_x86 *c) | ||
593 | { | ||
594 | /* http://www.intel.com/Assets/PDF/specupdate/314554.pdf | ||
595 | * AL30: A Machine Check Exception (MCE) Occurring during an | ||
596 | * Enhanced Intel SpeedStep Technology Ratio Change May Cause | ||
597 | * Both Processor Cores to Lock Up when HT is enabled*/ | ||
598 | if (c->x86_vendor == X86_VENDOR_INTEL) { | ||
599 | if ((c->x86 == 15) && | ||
600 | (c->x86_model == 6) && | ||
601 | (c->x86_mask == 8) && smt_capable()) | ||
602 | return -ENODEV; | ||
603 | } | ||
604 | return 0; | ||
605 | } | ||
591 | #endif | 606 | #endif |
592 | 607 | ||
593 | static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) | 608 | static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) |
@@ -602,6 +617,12 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) | |||
602 | 617 | ||
603 | dprintk("acpi_cpufreq_cpu_init\n"); | 618 | dprintk("acpi_cpufreq_cpu_init\n"); |
604 | 619 | ||
620 | #ifdef CONFIG_SMP | ||
621 | result = acpi_cpufreq_blacklist(c); | ||
622 | if (result) | ||
623 | return result; | ||
624 | #endif | ||
625 | |||
605 | data = kzalloc(sizeof(struct acpi_cpufreq_data), GFP_KERNEL); | 626 | data = kzalloc(sizeof(struct acpi_cpufreq_data), GFP_KERNEL); |
606 | if (!data) | 627 | if (!data) |
607 | return -ENOMEM; | 628 | return -ENOMEM; |