diff options
author | Alex Chiang <achiang@hp.com> | 2010-02-22 14:11:39 -0500 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2010-03-14 21:17:22 -0400 |
commit | d8191fa4a33fdc817277da4f2b7f771ff605a41c (patch) | |
tree | d72667311fcaea0fbfc7c9a8e71bd6b612af215c | |
parent | 3b1da4c5d1032ebc29fec8bd8f592ba6589be8ed (diff) |
ACPI: processor: driver doesn't need to evaluate _PDC
Now that the early _PDC evaluation path knows how to correctly
evaluate _PDC on only physically present processors, there's no
need for the processor driver to evaluate it later when it loads.
To cover the hotplug case, push _PDC evaluation down into the
hotplug paths.
Cc: x86@kernel.org
Cc: Tony Luck <tony.luck@intel.com>
Acked-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: Alex Chiang <achiang@hp.com>
Signed-off-by: Len Brown <len.brown@intel.com>
-rw-r--r-- | arch/ia64/kernel/acpi.c | 3 | ||||
-rw-r--r-- | arch/x86/kernel/acpi/boot.c | 3 | ||||
-rw-r--r-- | drivers/acpi/processor_core.c | 7 | ||||
-rw-r--r-- | drivers/acpi/processor_driver.c | 3 |
4 files changed, 6 insertions, 10 deletions
diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c index a7ca07f3754e..f1c9f70b4e45 100644 --- a/arch/ia64/kernel/acpi.c +++ b/arch/ia64/kernel/acpi.c | |||
@@ -44,6 +44,7 @@ | |||
44 | #include <linux/efi.h> | 44 | #include <linux/efi.h> |
45 | #include <linux/mmzone.h> | 45 | #include <linux/mmzone.h> |
46 | #include <linux/nodemask.h> | 46 | #include <linux/nodemask.h> |
47 | #include <acpi/processor.h> | ||
47 | #include <asm/io.h> | 48 | #include <asm/io.h> |
48 | #include <asm/iosapic.h> | 49 | #include <asm/iosapic.h> |
49 | #include <asm/machvec.h> | 50 | #include <asm/machvec.h> |
@@ -907,6 +908,8 @@ int acpi_map_lsapic(acpi_handle handle, int *pcpu) | |||
907 | cpu_set(cpu, cpu_present_map); | 908 | cpu_set(cpu, cpu_present_map); |
908 | ia64_cpu_to_sapicid[cpu] = physid; | 909 | ia64_cpu_to_sapicid[cpu] = physid; |
909 | 910 | ||
911 | acpi_processor_set_pdc(handle); | ||
912 | |||
910 | *pcpu = cpu; | 913 | *pcpu = cpu; |
911 | return (0); | 914 | return (0); |
912 | } | 915 | } |
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index a54d714545ff..d635a93ae59c 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c | |||
@@ -490,6 +490,7 @@ int acpi_register_gsi(struct device *dev, u32 gsi, int trigger, int polarity) | |||
490 | * ACPI based hotplug support for CPU | 490 | * ACPI based hotplug support for CPU |
491 | */ | 491 | */ |
492 | #ifdef CONFIG_ACPI_HOTPLUG_CPU | 492 | #ifdef CONFIG_ACPI_HOTPLUG_CPU |
493 | #include <acpi/processor.h> | ||
493 | 494 | ||
494 | static void acpi_map_cpu2node(acpi_handle handle, int cpu, int physid) | 495 | static void acpi_map_cpu2node(acpi_handle handle, int cpu, int physid) |
495 | { | 496 | { |
@@ -567,6 +568,8 @@ static int __cpuinit _acpi_map_lsapic(acpi_handle handle, int *pcpu) | |||
567 | goto free_new_map; | 568 | goto free_new_map; |
568 | } | 569 | } |
569 | 570 | ||
571 | acpi_processor_set_pdc(handle); | ||
572 | |||
570 | cpu = cpumask_first(new_map); | 573 | cpu = cpumask_first(new_map); |
571 | acpi_map_cpu2node(handle, cpu, physid); | 574 | acpi_map_cpu2node(handle, cpu, physid); |
572 | 575 | ||
diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c index ef34faad6003..626c75479868 100644 --- a/drivers/acpi/processor_core.c +++ b/drivers/acpi/processor_core.c | |||
@@ -317,8 +317,6 @@ acpi_processor_eval_pdc(acpi_handle handle, struct acpi_object_list *pdc_in) | |||
317 | return status; | 317 | return status; |
318 | } | 318 | } |
319 | 319 | ||
320 | static int early_pdc_done; | ||
321 | |||
322 | void acpi_processor_set_pdc(acpi_handle handle) | 320 | void acpi_processor_set_pdc(acpi_handle handle) |
323 | { | 321 | { |
324 | struct acpi_object_list *obj_list; | 322 | struct acpi_object_list *obj_list; |
@@ -326,9 +324,6 @@ void acpi_processor_set_pdc(acpi_handle handle) | |||
326 | if (arch_has_acpi_pdc() == false) | 324 | if (arch_has_acpi_pdc() == false) |
327 | return; | 325 | return; |
328 | 326 | ||
329 | if (early_pdc_done) | ||
330 | return; | ||
331 | |||
332 | obj_list = acpi_processor_alloc_pdc(); | 327 | obj_list = acpi_processor_alloc_pdc(); |
333 | if (!obj_list) | 328 | if (!obj_list) |
334 | return; | 329 | return; |
@@ -369,6 +364,4 @@ void __init acpi_early_processor_set_pdc(void) | |||
369 | acpi_walk_namespace(ACPI_TYPE_PROCESSOR, ACPI_ROOT_OBJECT, | 364 | acpi_walk_namespace(ACPI_TYPE_PROCESSOR, ACPI_ROOT_OBJECT, |
370 | ACPI_UINT32_MAX, | 365 | ACPI_UINT32_MAX, |
371 | early_init_pdc, NULL, NULL, NULL); | 366 | early_init_pdc, NULL, NULL, NULL); |
372 | |||
373 | early_pdc_done = 1; | ||
374 | } | 367 | } |
diff --git a/drivers/acpi/processor_driver.c b/drivers/acpi/processor_driver.c index 7eedf7475f4e..b5658cdce27f 100644 --- a/drivers/acpi/processor_driver.c +++ b/drivers/acpi/processor_driver.c | |||
@@ -608,9 +608,6 @@ static int __cpuinit acpi_processor_add(struct acpi_device *device) | |||
608 | goto err_remove_fs; | 608 | goto err_remove_fs; |
609 | } | 609 | } |
610 | 610 | ||
611 | /* _PDC call should be done before doing anything else (if reqd.). */ | ||
612 | acpi_processor_set_pdc(pr->handle); | ||
613 | |||
614 | #ifdef CONFIG_CPU_FREQ | 611 | #ifdef CONFIG_CPU_FREQ |
615 | acpi_processor_ppc_has_changed(pr, 0); | 612 | acpi_processor_ppc_has_changed(pr, 0); |
616 | #endif | 613 | #endif |