]>
Commit | Line | Data |
---|---|---|
82094b55 AF |
1 | From: Prarit Bhargava <prarit@redhat.com> |
2 | Subject: [CPUFREQ] Create a blacklist for processors that should not load the acpi-cpufreq module. | |
3 | References: bnc#542505 | |
4 | Patch-Mainline: yes | |
5 | Commit-ID: 1a8e42fa81e62d47cc471f7764f906bb42b27a54 | |
6 | ||
7 | Signed-off-by: Thomas Renninger <trenn@suse.de> | |
8 | ||
9 | Create a blacklist for processors that should not load the acpi-cpufreq module. | |
10 | ||
11 | The initial entry in the blacklist function is the Intel 0f68 processor. It's | |
12 | specification update mentions errata AL30 which implies that cpufreq should not | |
13 | run on this processor. | |
14 | ||
15 | Signed-off-by: Prarit Bhargava <prarit@redhat.com> | |
16 | Signed-off-by: Dave Jones <davej@redhat.com> | |
17 | ||
18 | diff --git a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | |
19 | index ae9b503..badce50 100644 | |
20 | --- a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | |
21 | +++ b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | |
22 | @@ -588,6 +588,21 @@ static const struct dmi_system_id sw_any_bug_dmi_table[] = { | |
23 | }, | |
24 | { } | |
25 | }; | |
26 | + | |
27 | +static int acpi_cpufreq_blacklist(struct cpuinfo_x86 *c) | |
28 | +{ | |
29 | + /* http://www.intel.com/Assets/PDF/specupdate/314554.pdf | |
30 | + * AL30: A Machine Check Exception (MCE) Occurring during an | |
31 | + * Enhanced Intel SpeedStep Technology Ratio Change May Cause | |
32 | + * Both Processor Cores to Lock Up when HT is enabled*/ | |
33 | + if (c->x86_vendor == X86_VENDOR_INTEL) { | |
34 | + if ((c->x86 == 15) && | |
35 | + (c->x86_model == 6) && | |
36 | + (c->x86_mask == 8) && smt_capable()) | |
37 | + return -ENODEV; | |
38 | + } | |
39 | + return 0; | |
40 | +} | |
41 | #endif | |
42 | ||
43 | static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) | |
44 | @@ -602,6 +617,12 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) | |
45 | ||
46 | dprintk("acpi_cpufreq_cpu_init\n"); | |
47 | ||
48 | +#ifdef CONFIG_SMP | |
49 | + result = acpi_cpufreq_blacklist(c); | |
50 | + if (result) | |
51 | + return result; | |
52 | +#endif | |
53 | + | |
54 | data = kzalloc(sizeof(struct acpi_cpufreq_data), GFP_KERNEL); | |
55 | if (!data) | |
56 | return -ENOMEM; |