diff options
Diffstat (limited to 'arch/x86')
| -rw-r--r-- | arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | 23 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/cpufreq/longhaul.c | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/cpufreq/powernow-k8.c | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/cpufreq/speedstep-ich.c | 19 |
4 files changed, 26 insertions, 20 deletions
diff --git a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c index 7d5c3b0ea8da..8b581d3905cb 100644 --- a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c +++ b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | |||
| @@ -526,15 +526,21 @@ static const struct dmi_system_id sw_any_bug_dmi_table[] = { | |||
| 526 | 526 | ||
| 527 | static int acpi_cpufreq_blacklist(struct cpuinfo_x86 *c) | 527 | static int acpi_cpufreq_blacklist(struct cpuinfo_x86 *c) |
| 528 | { | 528 | { |
| 529 | /* http://www.intel.com/Assets/PDF/specupdate/314554.pdf | 529 | /* Intel Xeon Processor 7100 Series Specification Update |
| 530 | * http://www.intel.com/Assets/PDF/specupdate/314554.pdf | ||
| 530 | * AL30: A Machine Check Exception (MCE) Occurring during an | 531 | * AL30: A Machine Check Exception (MCE) Occurring during an |
| 531 | * Enhanced Intel SpeedStep Technology Ratio Change May Cause | 532 | * Enhanced Intel SpeedStep Technology Ratio Change May Cause |
| 532 | * Both Processor Cores to Lock Up when HT is enabled*/ | 533 | * Both Processor Cores to Lock Up. */ |
| 533 | if (c->x86_vendor == X86_VENDOR_INTEL) { | 534 | if (c->x86_vendor == X86_VENDOR_INTEL) { |
| 534 | if ((c->x86 == 15) && | 535 | if ((c->x86 == 15) && |
| 535 | (c->x86_model == 6) && | 536 | (c->x86_model == 6) && |
| 536 | (c->x86_mask == 8) && smt_capable()) | 537 | (c->x86_mask == 8)) { |
| 538 | printk(KERN_INFO "acpi-cpufreq: Intel(R) " | ||
| 539 | "Xeon(R) 7100 Errata AL30, processors may " | ||
| 540 | "lock up on frequency changes: disabling " | ||
| 541 | "acpi-cpufreq.\n"); | ||
| 537 | return -ENODEV; | 542 | return -ENODEV; |
| 543 | } | ||
| 538 | } | 544 | } |
| 539 | return 0; | 545 | return 0; |
| 540 | } | 546 | } |
| @@ -549,13 +555,18 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) | |||
| 549 | unsigned int result = 0; | 555 | unsigned int result = 0; |
| 550 | struct cpuinfo_x86 *c = &cpu_data(policy->cpu); | 556 | struct cpuinfo_x86 *c = &cpu_data(policy->cpu); |
| 551 | struct acpi_processor_performance *perf; | 557 | struct acpi_processor_performance *perf; |
| 558 | #ifdef CONFIG_SMP | ||
| 559 | static int blacklisted; | ||
| 560 | #endif | ||
| 552 | 561 | ||
| 553 | dprintk("acpi_cpufreq_cpu_init\n"); | 562 | dprintk("acpi_cpufreq_cpu_init\n"); |
| 554 | 563 | ||
| 555 | #ifdef CONFIG_SMP | 564 | #ifdef CONFIG_SMP |
| 556 | result = acpi_cpufreq_blacklist(c); | 565 | if (blacklisted) |
| 557 | if (result) | 566 | return blacklisted; |
| 558 | return result; | 567 | blacklisted = acpi_cpufreq_blacklist(c); |
| 568 | if (blacklisted) | ||
| 569 | return blacklisted; | ||
| 559 | #endif | 570 | #endif |
| 560 | 571 | ||
| 561 | data = kzalloc(sizeof(struct acpi_cpufreq_data), GFP_KERNEL); | 572 | data = kzalloc(sizeof(struct acpi_cpufreq_data), GFP_KERNEL); |
diff --git a/arch/x86/kernel/cpu/cpufreq/longhaul.c b/arch/x86/kernel/cpu/cpufreq/longhaul.c index ce2ed3e4aad9..cabd2fa3fc93 100644 --- a/arch/x86/kernel/cpu/cpufreq/longhaul.c +++ b/arch/x86/kernel/cpu/cpufreq/longhaul.c | |||
| @@ -813,7 +813,7 @@ static int __init longhaul_cpu_init(struct cpufreq_policy *policy) | |||
| 813 | memcpy(eblcr, samuel2_eblcr, sizeof(samuel2_eblcr)); | 813 | memcpy(eblcr, samuel2_eblcr, sizeof(samuel2_eblcr)); |
| 814 | break; | 814 | break; |
| 815 | case 1 ... 15: | 815 | case 1 ... 15: |
| 816 | longhaul_version = TYPE_LONGHAUL_V1; | 816 | longhaul_version = TYPE_LONGHAUL_V2; |
| 817 | if (c->x86_mask < 8) { | 817 | if (c->x86_mask < 8) { |
| 818 | cpu_model = CPU_SAMUEL2; | 818 | cpu_model = CPU_SAMUEL2; |
| 819 | cpuname = "C3 'Samuel 2' [C5B]"; | 819 | cpuname = "C3 'Samuel 2' [C5B]"; |
diff --git a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c index 6394aa5c7985..3f12dabeab52 100644 --- a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c +++ b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c | |||
| @@ -1022,7 +1022,7 @@ static int get_transition_latency(struct powernow_k8_data *data) | |||
| 1022 | * set it to 1 to avoid problems in the future. | 1022 | * set it to 1 to avoid problems in the future. |
| 1023 | * For all others it's a BIOS bug. | 1023 | * For all others it's a BIOS bug. |
| 1024 | */ | 1024 | */ |
| 1025 | if (!boot_cpu_data.x86 == 0x11) | 1025 | if (boot_cpu_data.x86 != 0x11) |
| 1026 | printk(KERN_ERR FW_WARN PFX "Invalid zero transition " | 1026 | printk(KERN_ERR FW_WARN PFX "Invalid zero transition " |
| 1027 | "latency\n"); | 1027 | "latency\n"); |
| 1028 | max_latency = 1; | 1028 | max_latency = 1; |
diff --git a/arch/x86/kernel/cpu/cpufreq/speedstep-ich.c b/arch/x86/kernel/cpu/cpufreq/speedstep-ich.c index 6911e91fb4f6..3ae5a7a3a500 100644 --- a/arch/x86/kernel/cpu/cpufreq/speedstep-ich.c +++ b/arch/x86/kernel/cpu/cpufreq/speedstep-ich.c | |||
| @@ -232,28 +232,23 @@ static unsigned int speedstep_detect_chipset(void) | |||
| 232 | return 0; | 232 | return 0; |
| 233 | } | 233 | } |
| 234 | 234 | ||
| 235 | struct get_freq_data { | 235 | static void get_freq_data(void *_speed) |
| 236 | unsigned int speed; | ||
| 237 | unsigned int processor; | ||
| 238 | }; | ||
| 239 | |||
| 240 | static void get_freq_data(void *_data) | ||
| 241 | { | 236 | { |
| 242 | struct get_freq_data *data = _data; | 237 | unsigned int *speed = _speed; |
| 243 | 238 | ||
| 244 | data->speed = speedstep_get_frequency(data->processor); | 239 | *speed = speedstep_get_frequency(speedstep_processor); |
| 245 | } | 240 | } |
| 246 | 241 | ||
| 247 | static unsigned int speedstep_get(unsigned int cpu) | 242 | static unsigned int speedstep_get(unsigned int cpu) |
| 248 | { | 243 | { |
| 249 | struct get_freq_data data = { .processor = cpu }; | 244 | unsigned int speed; |
| 250 | 245 | ||
| 251 | /* You're supposed to ensure CPU is online. */ | 246 | /* You're supposed to ensure CPU is online. */ |
| 252 | if (smp_call_function_single(cpu, get_freq_data, &data, 1) != 0) | 247 | if (smp_call_function_single(cpu, get_freq_data, &speed, 1) != 0) |
| 253 | BUG(); | 248 | BUG(); |
| 254 | 249 | ||
| 255 | dprintk("detected %u kHz as current frequency\n", data.speed); | 250 | dprintk("detected %u kHz as current frequency\n", speed); |
| 256 | return data.speed; | 251 | return speed; |
| 257 | } | 252 | } |
| 258 | 253 | ||
| 259 | /** | 254 | /** |
