ACPI: processor: finish unifying arch_acpi_processor_init_pdc()
authorAlex Chiang <achiang@hp.com>
Sun, 20 Dec 2009 19:19:29 +0000 (12:19 -0700)
committerLen Brown <len.brown@intel.com>
Tue, 22 Dec 2009 08:24:13 +0000 (03:24 -0500)
The only thing arch-specific about calling _PDC is what bits get
set in the input obj_list buffer.

There's no need for several levels of indirection to twiddle those
bits. Additionally, since we're just messing around with a buffer,
we can simplify the interface; no need to pass around the entire
struct acpi_processor * just to get at the buffer.

Cc: Tony Luck <tony.luck@intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Signed-off-by: Alex Chiang <achiang@hp.com>
Signed-off-by: Len Brown <len.brown@intel.com>
arch/ia64/include/asm/acpi.h
arch/ia64/kernel/acpi-processor.c
arch/x86/include/asm/acpi.h
arch/x86/kernel/acpi/processor.c
drivers/acpi/processor_pdc.c
include/acpi/processor.h

index 3b7888294648b1eb4e81e5f7a3a0e8dd89cb79a3..7ae58892ba8d87ee699925380bcd92d59eca06ff 100644 (file)
@@ -133,6 +133,10 @@ extern int __initdata nid_to_pxm_map[MAX_NUMNODES];
 #endif
 
 static inline bool arch_has_acpi_pdc(void) { return true; }
+static inline void arch_acpi_set_pdc_bits(u32 *buf)
+{
+       buf[2] |= ACPI_PDC_EST_CAPABILITY_SMP;
+}
 
 #define acpi_unlazy_tlb(x)
 
index ebe23f58bd6ed49474331a82ac1d2797f3a75da4..7ba5accebf66fba6bb456def0ad7ce49c6ef2f2a 100644 (file)
 #include <acpi/processor.h>
 #include <asm/acpi.h>
 
-static void init_intel_pdc(struct acpi_processor *pr)
-{
-       u32 *buf = (u32 *)pr->pdc->pointer->buffer.pointer;
-
-       buf[2] |= ACPI_PDC_EST_CAPABILITY_SMP;
-
-       return;
-}
-
-/* Initialize _PDC data based on the CPU vendor */
-void arch_acpi_processor_init_pdc(struct acpi_processor *pr)
-{
-       init_intel_pdc(pr);
-       return;
-}
-
-EXPORT_SYMBOL(arch_acpi_processor_init_pdc);
-
 void arch_acpi_processor_cleanup_pdc(struct acpi_processor *pr)
 {
        if (pr->pdc) {
index d787e6e92bd1ebcc7c4290fb58584d56c2853251..56f462cf22d2fc75cb6c8616697813ada52d53e9 100644 (file)
@@ -149,6 +149,25 @@ static inline bool arch_has_acpi_pdc(void)
                c->x86_vendor == X86_VENDOR_CENTAUR);
 }
 
+static inline void arch_acpi_set_pdc_bits(u32 *buf)
+{
+       struct cpuinfo_x86 *c = &cpu_data(0);
+
+       buf[2] |= ACPI_PDC_C_CAPABILITY_SMP;
+
+       if (cpu_has(c, X86_FEATURE_EST))
+               buf[2] |= ACPI_PDC_EST_CAPABILITY_SWSMP;
+
+       if (cpu_has(c, X86_FEATURE_ACPI))
+               buf[2] |= ACPI_PDC_T_FFH;
+
+       /*
+        * If mwait/monitor is unsupported, C2/C3_FFH will be disabled
+        */
+       if (!cpu_has(c, X86_FEATURE_MWAIT))
+               buf[2] &= ~(ACPI_PDC_C_C2C3_FFH);
+}
+
 #else /* !CONFIG_ACPI */
 
 #define acpi_lapic 0
index d722ca8cb4c7f626e9e3bed81ef67e1a78bfd46e..0f57307f8224a17637a5a1cdd61212576fe420f6 100644 (file)
 #include <acpi/processor.h>
 #include <asm/acpi.h>
 
-static void init_intel_pdc(struct acpi_processor *pr, struct cpuinfo_x86 *c)
-{
-       u32 *buf = (u32 *)pr->pdc->pointer->buffer.pointer;
-
-       buf[2] |= ACPI_PDC_C_CAPABILITY_SMP;
-
-       if (cpu_has(c, X86_FEATURE_EST))
-               buf[2] |= ACPI_PDC_EST_CAPABILITY_SWSMP;
-
-       if (cpu_has(c, X86_FEATURE_ACPI))
-               buf[2] |= ACPI_PDC_T_FFH;
-
-       /*
-        * If mwait/monitor is unsupported, C2/C3_FFH will be disabled
-        */
-       if (!cpu_has(c, X86_FEATURE_MWAIT))
-               buf[2] &= ~(ACPI_PDC_C_C2C3_FFH);
-
-       return;
-}
-
-
-/* Initialize _PDC data based on the CPU vendor */
-void arch_acpi_processor_init_pdc(struct acpi_processor *pr)
-{
-       struct cpuinfo_x86 *c = &cpu_data(pr->id);
-
-       init_intel_pdc(pr, c);
-
-       return;
-}
-
-EXPORT_SYMBOL(arch_acpi_processor_init_pdc);
-
 void arch_acpi_processor_cleanup_pdc(struct acpi_processor *pr)
 {
        if (pr->pdc) {
index ccda7c95d073b0253feb616d1721439ef2333d12..48df08ebcec42d39d42f1f64351a6e408e7990c5 100644 (file)
@@ -40,6 +40,9 @@ static void acpi_set_pdc_bits(u32 *buf)
 
        /* Enable coordination with firmware's _TSD info */
        buf[2] = ACPI_PDC_SMP_T_SWCOORD;
+
+       /* Twiddle arch-specific bits needed for _PDC */
+       arch_acpi_set_pdc_bits(buf);
 }
 
 static void acpi_processor_init_pdc(struct acpi_processor *pr)
@@ -81,9 +84,6 @@ static void acpi_processor_init_pdc(struct acpi_processor *pr)
        obj_list->pointer = obj;
        pr->pdc = obj_list;
 
-       /* Now let the arch do the bit-twiddling to buf[] */
-       arch_acpi_processor_init_pdc(pr);
-
        return;
 }
 
index a1b748a7a76639344d602204bbe98384323ab77b..50edd734aec670db909f48343ad9d5b0c03429f4 100644 (file)
@@ -257,7 +257,6 @@ int acpi_processor_notify_smm(struct module *calling_module);
 DECLARE_PER_CPU(struct acpi_processor *, processors);
 extern struct acpi_processor_errata errata;
 
-void arch_acpi_processor_init_pdc(struct acpi_processor *pr);
 void arch_acpi_processor_cleanup_pdc(struct acpi_processor *pr);
 
 #ifdef ARCH_HAS_POWER_INIT