Dominik Brodowski wrote:
Might this be worth something more explicit than a "dprintk", such as printk(KERN_INFO "Intel(R) Xeon(R) 7100 processors are broken and may lock " "up on frequency changes: disabling acpi-cpufreq.\n")
Sure, np. I was just following what I thought the rest of the code was doing. I like a printk better than a dprintk myself ....
New patch. P.
diff --git a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c index ae9b503..6e9c2b3 100644 --- a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c +++ b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c @@ -590,6 +590,24 @@ static const struct dmi_system_id sw_any_bug_dmi_table[] = { }; #endif +static int acpi_cpufreq_blacklist(struct cpuinfo_x86 *c) +{ + /* http://www.intel.com/Assets/PDF/specupdate/314554.pdf + * AL30 â??A Machine Check Exception (MCE) Occurring during an + * Enhanced Intel SpeedStep® Technology Ratio Change May Cause + * Both Processor Cores to Lock Up */ + if (c->x86_vendor == X86_VENDOR_INTEL) { + if ((c->x86 == 15) && (c->x86_model == 6) && + (c->x86_mask == 8)) { + printk(KERN_INFO "Intel(R) Xeon(R) 7100 processors " + "are broken and may lock up on frequency " + "changes: disabling acpi-cpufreq.\n"); + return -ENODEV; + } + } + return 0; +} + static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) { unsigned int i; @@ -602,6 +620,10 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) dprintk("acpi_cpufreq_cpu_init\n"); + result = acpi_cpufreq_blacklist(c); + if (result) + return result; + data = kzalloc(sizeof(struct acpi_cpufreq_data), GFP_KERNEL); if (!data) return -ENOMEM;