Commit 293afe44 authored by John Villalovos's avatar John Villalovos Committed by Dave Jones

[CPUFREQ] acpi-cpufreq: blacklist Intel 0f68: Fix HT detection and put in notification message

Removing the SMT/HT check, since the Errata doesn't mention
Hyper-Threading.

Adding in a printk, so that the user knows why acpi-cpufreq refuses to
load.  Also, once system is blacklisted, don't repeat checks to see if
blacklisted.  This also causes the message to only be printed once,
rather than for each CPU.
Signed-off-by: default avatarJohn L. Villalovos <john.l.villalovos@intel.com>
Signed-off-by: default avatarDave Jones <davej@redhat.com>
parent c53614ec
...@@ -526,16 +526,22 @@ static const struct dmi_system_id sw_any_bug_dmi_table[] = { ...@@ -526,16 +526,22 @@ static const struct dmi_system_id sw_any_bug_dmi_table[] = {
static int acpi_cpufreq_blacklist(struct cpuinfo_x86 *c) static int acpi_cpufreq_blacklist(struct cpuinfo_x86 *c)
{ {
/* http://www.intel.com/Assets/PDF/specupdate/314554.pdf /* Intel Xeon Processor 7100 Series Specification Update
* http://www.intel.com/Assets/PDF/specupdate/314554.pdf
* AL30: A Machine Check Exception (MCE) Occurring during an * AL30: A Machine Check Exception (MCE) Occurring during an
* Enhanced Intel SpeedStep Technology Ratio Change May Cause * Enhanced Intel SpeedStep Technology Ratio Change May Cause
* Both Processor Cores to Lock Up when HT is enabled*/ * Both Processor Cores to Lock Up. */
if (c->x86_vendor == X86_VENDOR_INTEL) { if (c->x86_vendor == X86_VENDOR_INTEL) {
if ((c->x86 == 15) && if ((c->x86 == 15) &&
(c->x86_model == 6) && (c->x86_model == 6) &&
(c->x86_mask == 8) && smt_capable()) (c->x86_mask == 8)) {
printk(KERN_INFO "acpi-cpufreq: Intel(R) "
"Xeon(R) 7100 Errata AL30, processors may "
"lock up on frequency changes: disabling "
"acpi-cpufreq.\n");
return -ENODEV; return -ENODEV;
} }
}
return 0; return 0;
} }
#endif #endif
...@@ -549,13 +555,18 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) ...@@ -549,13 +555,18 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
unsigned int result = 0; unsigned int result = 0;
struct cpuinfo_x86 *c = &cpu_data(policy->cpu); struct cpuinfo_x86 *c = &cpu_data(policy->cpu);
struct acpi_processor_performance *perf; struct acpi_processor_performance *perf;
#ifdef CONFIG_SMP
static int blacklisted;
#endif
dprintk("acpi_cpufreq_cpu_init\n"); dprintk("acpi_cpufreq_cpu_init\n");
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
result = acpi_cpufreq_blacklist(c); if (blacklisted)
if (result) return blacklisted;
return result; blacklisted = acpi_cpufreq_blacklist(c);
if (blacklisted)
return blacklisted;
#endif #endif
data = kzalloc(sizeof(struct acpi_cpufreq_data), GFP_KERNEL); data = kzalloc(sizeof(struct acpi_cpufreq_data), GFP_KERNEL);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment