diff options
author | Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> | 2005-10-23 16:31:00 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2005-12-01 01:30:35 -0500 |
commit | 05131ecc99ea9da7f45ba3058fe8a2c1d0ceeab8 (patch) | |
tree | dec76975406874cf677d6391302f42a6da55ac38 /arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c | |
parent | d2149b542382bfc206cb28485108f6470c979566 (diff) |
[ACPI] Avoid BIOS inflicted crashes by evaluating _PDC only once
Linux invokes the AML _PDC method (Processor Driver Capabilities)
to tell the BIOS what features it can handle. While the ACPI
spec says nothing about the OS invoking _PDC multiple times,
doing so with changing bits seems to hopelessly confuse the BIOS
on multiple platforms up to and including crashing the system.
Factor out the _PDC invocation so Linux invokes it only once.
http://bugzilla.kernel.org/show_bug.cgi?id=5483
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c')
-rw-r--r-- | arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c | 12 |
1 files changed, 0 insertions, 12 deletions
diff --git a/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c b/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c index edb9873e27e3..d93023438c4f 100644 --- a/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c +++ b/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c | |||
@@ -364,22 +364,10 @@ static struct acpi_processor_performance p; | |||
364 | */ | 364 | */ |
365 | static int centrino_cpu_init_acpi(struct cpufreq_policy *policy) | 365 | static int centrino_cpu_init_acpi(struct cpufreq_policy *policy) |
366 | { | 366 | { |
367 | union acpi_object arg0 = {ACPI_TYPE_BUFFER}; | ||
368 | u32 arg0_buf[3]; | ||
369 | struct acpi_object_list arg_list = {1, &arg0}; | ||
370 | unsigned long cur_freq; | 367 | unsigned long cur_freq; |
371 | int result = 0, i; | 368 | int result = 0, i; |
372 | unsigned int cpu = policy->cpu; | 369 | unsigned int cpu = policy->cpu; |
373 | 370 | ||
374 | /* _PDC settings */ | ||
375 | arg0.buffer.length = 12; | ||
376 | arg0.buffer.pointer = (u8 *) arg0_buf; | ||
377 | arg0_buf[0] = ACPI_PDC_REVISION_ID; | ||
378 | arg0_buf[1] = 1; | ||
379 | arg0_buf[2] = ACPI_PDC_EST_CAPABILITY_SMP_MSR; | ||
380 | |||
381 | p.pdc = &arg_list; | ||
382 | |||
383 | /* register with ACPI core */ | 371 | /* register with ACPI core */ |
384 | if (acpi_processor_register_performance(&p, cpu)) { | 372 | if (acpi_processor_register_performance(&p, cpu)) { |
385 | dprintk(KERN_INFO PFX "obtaining ACPI data failed\n"); | 373 | dprintk(KERN_INFO PFX "obtaining ACPI data failed\n"); |