From ed9cbcd40004904dbe61ccc16d6106a7de38c998 Mon Sep 17 00:00:00 2001 From: Zhao Yakui Date: Tue, 20 Nov 2007 14:20:21 -0500 Subject: Revert "speedstep-lib.c: fix frequency multiplier for Pentium4 models 0&1" For P4 model < 2, The MSR_FBC_REGISTER_ID ratio is undefined. Revert the commit that was added to handle that case, as it results in random MHz displayed. Something else will have to be done to properly handle model < 2. //commit 3e4159ab35c88aef5e063ba78796b277b762a30a //Author: matthias.christian //Date: Sat Feb 5 23:09:38 2005 +0000 // // [PATCH] speedstep-lib.c: fix frequency multiplier for Pentium4 models 0&1 // // The Pentium4 models 0&1 have a longer MSR_EBC_FREQUENCY_ID register as the // models 2&3, so the bit shift must be bigger. // // Signed-off-by: Matthias-Christian Ott // Signed-off-by: Dominik Brodowski // Signed-off-by: Andrew Morton // Signed-off-by: Linus Torvalds // // BKrev: 42055232eWM-NgjhZVir44mp5GXktQ http://bugzilla.kernel.org/show_bug.cgi?id=7186 Signed-off-by: Zhao Yakui Signed-off-by: Len Brown --- arch/x86/kernel/cpu/cpufreq/speedstep-lib.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'arch') diff --git a/arch/x86/kernel/cpu/cpufreq/speedstep-lib.c b/arch/x86/kernel/cpu/cpufreq/speedstep-lib.c index 76c3ab0da468..98d4fdb7dc04 100644 --- a/arch/x86/kernel/cpu/cpufreq/speedstep-lib.c +++ b/arch/x86/kernel/cpu/cpufreq/speedstep-lib.c @@ -189,10 +189,7 @@ static unsigned int pentium4_get_frequency(void) printk(KERN_DEBUG "speedstep-lib: couldn't detect FSB speed. Please send an e-mail to \n"); /* Multiplier. */ - if (c->x86_model < 2) - mult = msr_lo >> 27; - else - mult = msr_lo >> 24; + mult = msr_lo >> 24; dprintk("P4 - FSB %u kHz; Multiplier %u; Speed %u kHz\n", fsb, mult, (fsb * mult)); -- cgit v1.2.3 From 2fdf07417e57136cf6baedf9508e2169a059ebea Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Thu, 13 Dec 2007 08:33:59 +0000 Subject: acpi: make __acpi_map_table() and __init function .. as it it used only during early boot. Signed-off-by: Jan Beulich arch/ia64/kernel/acpi.c | 2 +- arch/x86/kernel/acpi/boot.c | 4 ++-- drivers/acpi/osl.c | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) Signed-off-by: Len Brown --- arch/ia64/kernel/acpi.c | 2 +- arch/x86/kernel/acpi/boot.c | 4 ++-- drivers/acpi/osl.c | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) (limited to 'arch') diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c index 00b5d08f6da8..f932c486836a 100644 --- a/arch/ia64/kernel/acpi.c +++ b/arch/ia64/kernel/acpi.c @@ -152,7 +152,7 @@ int acpi_request_vector(u32 int_type) return vector; } -char *__acpi_map_table(unsigned long phys_addr, unsigned long size) +char *__init __acpi_map_table(unsigned long phys_addr, unsigned long size) { return __va(phys_addr); } diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index 0ca27c7b0e8d..b595522dd799 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c @@ -106,7 +106,7 @@ enum acpi_irq_model_id acpi_irq_model = ACPI_IRQ_MODEL_PIC; #ifdef CONFIG_X86_64 /* rely on all ACPI tables being in the direct mapping */ -char *__acpi_map_table(unsigned long phys_addr, unsigned long size) +char *__init __acpi_map_table(unsigned long phys_addr, unsigned long size) { if (!phys_addr || !size) return NULL; @@ -131,7 +131,7 @@ char *__acpi_map_table(unsigned long phys_addr, unsigned long size) * from the fixed base. That's why we start at FIX_IO_APIC_BASE_END and * count idx down while incrementing the phys address. */ -char *__acpi_map_table(unsigned long phys, unsigned long size) +char *__init __acpi_map_table(unsigned long phys, unsigned long size) { unsigned long base, offset, mapped_size; int idx; diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index e3a673a00845..82525d9cccb0 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c @@ -211,7 +211,8 @@ acpi_physical_address __init acpi_os_get_root_pointer(void) return acpi_find_rsdp(); } -void __iomem *acpi_os_map_memory(acpi_physical_address phys, acpi_size size) +void __iomem *__init_refok +acpi_os_map_memory(acpi_physical_address phys, acpi_size size) { if (phys > ULONG_MAX) { printk(KERN_ERR PREFIX "Cannot map memory that high\n"); -- cgit v1.2.3 From 239665a3bb0a2234980f918913add31bc536cfd1 Mon Sep 17 00:00:00 2001 From: Len Brown Date: Fri, 23 Nov 2007 20:08:02 -0500 Subject: ACPI: tables: complete searching upon RSDP w/ bad checksum. ACPI tables follow a tree structure in memory. The root of the tree is the RSDP (Root System Description Pointer). To find the RSDP, the OS searches for the signature "RSD PTR " in well known physical memory locations. Then the OS computes a table checksum to verify that the signature is really part of a valid table header. Some systems have a proper signature but an invalid checksum; followed elsewhere by a proper signature with valid checksum. http://bugzilla.kernel.org/show_bug.cgi?id=9444 The Linux RSDP scanning code bailed out on those systems and as a result they booted with ACPI disabled. Fix this by deleting the Linux RSDP scanning code and plugging in the ACPICA RSDP scanning code. Signed-off-by: Len Brown --- arch/ia64/kernel/acpi.c | 26 ++++++++++++++------------ arch/x86/kernel/acpi/boot.c | 40 ---------------------------------------- arch/x86/kernel/srat_32.c | 2 +- drivers/acpi/osl.c | 8 ++++++-- drivers/acpi/tables/Makefile | 2 +- drivers/acpi/tables/tbxfroot.c | 4 +--- include/linux/acpi.h | 1 - 7 files changed, 23 insertions(+), 60 deletions(-) (limited to 'arch') diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c index 897e2083a3b1..63d6dcdc2e2a 100644 --- a/arch/ia64/kernel/acpi.c +++ b/arch/ia64/kernel/acpi.c @@ -69,6 +69,20 @@ unsigned int acpi_cpei_phys_cpuid; unsigned long acpi_wakeup_address = 0; +#ifdef CONFIG_IA64_GENERIC +static unsigned long __init acpi_find_rsdp(void) +{ + unsigned long rsdp_phys = 0; + + if (efi.acpi20 != EFI_INVALID_TABLE_ADDR) + rsdp_phys = efi.acpi20; + else if (efi.acpi != EFI_INVALID_TABLE_ADDR) + printk(KERN_WARNING PREFIX + "v1.0/r0.71 tables no longer supported\n"); + return rsdp_phys; +} +#endif + const char __init * acpi_get_sysname(void) { @@ -631,18 +645,6 @@ static int __init acpi_parse_fadt(struct acpi_table_header *table) return 0; } -unsigned long __init acpi_find_rsdp(void) -{ - unsigned long rsdp_phys = 0; - - if (efi.acpi20 != EFI_INVALID_TABLE_ADDR) - rsdp_phys = efi.acpi20; - else if (efi.acpi != EFI_INVALID_TABLE_ADDR) - printk(KERN_WARNING PREFIX - "v1.0/r0.71 tables no longer supported\n"); - return rsdp_phys; -} - int __init acpi_boot_init(void) { diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index 0ca27c7b0e8d..719c74b0141a 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c @@ -581,25 +581,6 @@ int acpi_unregister_ioapic(acpi_handle handle, u32 gsi_base) EXPORT_SYMBOL(acpi_unregister_ioapic); -static unsigned long __init -acpi_scan_rsdp(unsigned long start, unsigned long length) -{ - unsigned long offset = 0; - unsigned long sig_len = sizeof("RSD PTR ") - 1; - - /* - * Scan all 16-byte boundaries of the physical memory region for the - * RSDP signature. - */ - for (offset = 0; offset < length; offset += 16) { - if (strncmp((char *)(phys_to_virt(start) + offset), "RSD PTR ", sig_len)) - continue; - return (start + offset); - } - - return 0; -} - static int __init acpi_parse_sbf(struct acpi_table_header *table) { struct acpi_table_boot *sb; @@ -742,27 +723,6 @@ static int __init acpi_parse_fadt(struct acpi_table_header *table) return 0; } -unsigned long __init acpi_find_rsdp(void) -{ - unsigned long rsdp_phys = 0; - - if (efi_enabled) { - if (efi.acpi20 != EFI_INVALID_TABLE_ADDR) - return efi.acpi20; - else if (efi.acpi != EFI_INVALID_TABLE_ADDR) - return efi.acpi; - } - /* - * Scan memory looking for the RSDP signature. First search EBDA (low - * memory) paragraphs and then search upper memory (E0000-FFFFF). - */ - rsdp_phys = acpi_scan_rsdp(0, 0x400); - if (!rsdp_phys) - rsdp_phys = acpi_scan_rsdp(0xE0000, 0x20000); - - return rsdp_phys; -} - #ifdef CONFIG_X86_LOCAL_APIC /* * Parse LAPIC entries in MADT diff --git a/arch/x86/kernel/srat_32.c b/arch/x86/kernel/srat_32.c index 2a8713ec0f9a..b3b2c95f19d3 100644 --- a/arch/x86/kernel/srat_32.c +++ b/arch/x86/kernel/srat_32.c @@ -276,7 +276,7 @@ int __init get_memcfg_from_srat(void) int tables = 0; int i = 0; - rsdp_address = acpi_find_rsdp(); + rsdp_address = acpi_os_get_root_pointer(); if (!rsdp_address) { printk("%s: System description tables not found\n", __FUNCTION__); diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index aabc6ca4a81c..101691ef66cb 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c @@ -207,8 +207,12 @@ acpi_physical_address __init acpi_os_get_root_pointer(void) "System description tables not found\n"); return 0; } - } else - return acpi_find_rsdp(); + } else { + acpi_physical_address pa = 0; + + acpi_find_root_pointer(&pa); + return pa; + } } void __iomem *acpi_os_map_memory(acpi_physical_address phys, acpi_size size) diff --git a/drivers/acpi/tables/Makefile b/drivers/acpi/tables/Makefile index 0a7d7afac255..7385efa61622 100644 --- a/drivers/acpi/tables/Makefile +++ b/drivers/acpi/tables/Makefile @@ -2,6 +2,6 @@ # Makefile for all Linux ACPI interpreter subdirectories # -obj-y := tbxface.o tbinstal.o tbutils.o tbfind.o tbfadt.o +obj-y := tbxface.o tbinstal.o tbutils.o tbfind.o tbfadt.o tbxfroot.o EXTRA_CFLAGS += $(ACPI_CFLAGS) diff --git a/drivers/acpi/tables/tbxfroot.c b/drivers/acpi/tables/tbxfroot.c index cf8fa514189f..9ecb4b6c1e7d 100644 --- a/drivers/acpi/tables/tbxfroot.c +++ b/drivers/acpi/tables/tbxfroot.c @@ -100,7 +100,7 @@ static acpi_status acpi_tb_validate_rsdp(struct acpi_table_rsdp *rsdp) /******************************************************************************* * - * FUNCTION: acpi_tb_find_rsdp + * FUNCTION: acpi_find_root_pointer * * PARAMETERS: table_address - Where the table pointer is returned * @@ -219,8 +219,6 @@ acpi_status acpi_find_root_pointer(acpi_native_uint * table_address) return_ACPI_STATUS(AE_NOT_FOUND); } -ACPI_EXPORT_SYMBOL(acpi_find_root_pointer) - /******************************************************************************* * * FUNCTION: acpi_tb_scan_memory_for_rsdp diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 8ccedf7a0a5a..8deb61171558 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h @@ -79,7 +79,6 @@ typedef int (*acpi_table_handler) (struct acpi_table_header *table); typedef int (*acpi_table_entry_handler) (struct acpi_subtable_header *header, const unsigned long end); char * __acpi_map_table (unsigned long phys_addr, unsigned long size); -unsigned long acpi_find_rsdp (void); int acpi_boot_init (void); int acpi_boot_table_init (void); int acpi_numa_init (void); -- cgit v1.2.3 From f757397097d0713c949af76dccabb65a2785782e Mon Sep 17 00:00:00 2001 From: Kevin Hilman Date: Thu, 31 Jan 2008 17:28:18 -0800 Subject: cpuidle: build fix for non-x86 Convert cpu_idle_wait() to cpuidle_kick_cpus() macro which is SMP-only, and gives error on non supported CPU. Signed-off-by: Kevin Hilman Acked-by: Venkatesh Pallipadi Acked-by: Rafael J. Wysocki Signed-off-by: Len Brown --- arch/x86/Kconfig | 3 +++ drivers/cpuidle/cpuidle.c | 2 +- include/linux/cpuidle.h | 13 +++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) (limited to 'arch') diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 368864dfe6eb..37d1297e6787 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -105,6 +105,9 @@ config ARCH_HAS_ILOG2_U32 config ARCH_HAS_ILOG2_U64 def_bool n +config ARCH_HAS_CPU_IDLE_WAIT + def_bool y + config GENERIC_CALIBRATE_DELAY def_bool y diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c index d2fabe7863a9..794962d9f48b 100644 --- a/drivers/cpuidle/cpuidle.c +++ b/drivers/cpuidle/cpuidle.c @@ -82,7 +82,7 @@ void cpuidle_uninstall_idle_handler(void) { if (enabled_devices && (pm_idle != pm_idle_old)) { pm_idle = pm_idle_old; - cpu_idle_wait(); + cpuidle_kick_cpus(); } } diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h index 16a51546db44..cb95f5a9075a 100644 --- a/include/linux/cpuidle.h +++ b/include/linux/cpuidle.h @@ -72,6 +72,19 @@ cpuidle_set_statedata(struct cpuidle_state *state, void *data) state->driver_data = data; } +#ifdef CONFIG_SMP +#ifdef CONFIG_ARCH_HAS_CPU_IDLE_WAIT +static inline void cpuidle_kick_cpus(void) +{ + cpu_idle_wait(); +} +#else /* !CONFIG_ARCH_HAS_CPU_IDLE_WAIT */ +#error "Arch needs cpu_idle_wait() equivalent here" +#endif /* !CONFIG_ARCH_HAS_CPU_IDLE_WAIT */ +#else /* !CONFIG_SMP */ +static inline void cpuidle_kick_cpus(void) {} +#endif /* !CONFIG_SMP */ + struct cpuidle_state_kobj { struct cpuidle_state *state; struct completion kobj_unregister; -- cgit v1.2.3 From 3abbd337c60591305cbfeb984ff2922c175be37f Mon Sep 17 00:00:00 2001 From: Zhao Yakui Date: Mon, 28 Jan 2008 13:53:21 +0800 Subject: ACPI: Set _PSD ACPI_PDC_SMP_T_SWCOORD The ACPI_PDC_SMP_T_SWCOORD bit is set by and OS that is capable of native ACPI throttling software coordination for mutli-processors using the _TSD information. Signed-off-by: Zhao Yakui Signed-off-by: Len Brown --- arch/ia64/kernel/acpi-processor.c | 6 ++++++ arch/x86/kernel/acpi/processor.c | 6 ++++++ 2 files changed, 12 insertions(+) (limited to 'arch') diff --git a/arch/ia64/kernel/acpi-processor.c b/arch/ia64/kernel/acpi-processor.c index 5a216c019924..cbe6cee5a550 100644 --- a/arch/ia64/kernel/acpi-processor.c +++ b/arch/ia64/kernel/acpi-processor.c @@ -45,6 +45,12 @@ static void init_intel_pdc(struct acpi_processor *pr) buf[0] = ACPI_PDC_REVISION_ID; buf[1] = 1; buf[2] = ACPI_PDC_EST_CAPABILITY_SMP; + /* + * The default of PDC_SMP_T_SWCOORD bit is set for IA64 cpu so + * that OSPM is capable of native ACPI throttling software + * coordination using BIOS supplied _TSD info. + */ + buf[2] |= ACPI_PDC_SMP_T_SWCOORD; obj->type = ACPI_TYPE_BUFFER; obj->buffer.length = 12; diff --git a/arch/x86/kernel/acpi/processor.c b/arch/x86/kernel/acpi/processor.c index a25db514c719..324eb0cab19c 100644 --- a/arch/x86/kernel/acpi/processor.c +++ b/arch/x86/kernel/acpi/processor.c @@ -46,6 +46,12 @@ static void init_intel_pdc(struct acpi_processor *pr, struct cpuinfo_x86 *c) buf[1] = 1; buf[2] = ACPI_PDC_C_CAPABILITY_SMP; + /* + * The default of PDC_SMP_T_SWCOORD bit is set for intel x86 cpu so + * that OSPM is capable of native ACPI throttling software + * coordination using BIOS supplied _TSD info. + */ + buf[2] |= ACPI_PDC_SMP_T_SWCOORD; if (cpu_has(c, X86_FEATURE_EST)) buf[2] |= ACPI_PDC_EST_CAPABILITY_SWSMP; -- cgit v1.2.3 From 9a0b841586c3c6c846effdbe75885c2ebc0031b0 Mon Sep 17 00:00:00 2001 From: "venkatesh.pallipadi@intel.com" Date: Thu, 31 Jan 2008 17:35:06 -0800 Subject: cpuidle: Add a poll_idle method Add a default poll idle state with 0 latency. Provides an option to users to use poll_idle by using 0 as the latency requirement. Signed-off-by: Venkatesh Pallipadi Signed-off-by: Len Brown --- arch/x86/Kconfig | 3 +++ drivers/acpi/processor_idle.c | 4 +++- drivers/cpuidle/cpuidle.c | 41 +++++++++++++++++++++++++++++++++++++++++ include/linux/cpuidle.h | 13 ++++++++++--- 4 files changed, 57 insertions(+), 4 deletions(-) (limited to 'arch') diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index e6728bd61cc1..fd4265007053 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -105,6 +105,9 @@ config GENERIC_TIME_VSYSCALL bool default X86_64 +config ARCH_HAS_CPU_RELAX + def_bool y + config HAVE_SETUP_PER_CPU_AREA def_bool X86_64 diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c index fea71597b40a..32488e6f76ab 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c @@ -1628,7 +1628,7 @@ struct cpuidle_driver acpi_idle_driver = { */ static int acpi_processor_setup_cpuidle(struct acpi_processor *pr) { - int i, count = 0; + int i, count = CPUIDLE_DRIVER_STATE_START; struct acpi_processor_cx *cx; struct cpuidle_state *state; struct cpuidle_device *dev = &pr->power.dev; @@ -1687,6 +1687,8 @@ static int acpi_processor_setup_cpuidle(struct acpi_processor *pr) } count++; + if (count == CPUIDLE_STATE_MAX) + break; } dev->state_count = count; diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c index 2a98d99cbd46..2c4b2d47973e 100644 --- a/drivers/cpuidle/cpuidle.c +++ b/drivers/cpuidle/cpuidle.c @@ -15,6 +15,7 @@ #include #include #include +#include #include "cpuidle.h" @@ -180,6 +181,44 @@ void cpuidle_disable_device(struct cpuidle_device *dev) EXPORT_SYMBOL_GPL(cpuidle_disable_device); +#ifdef CONFIG_ARCH_HAS_CPU_RELAX +static int poll_idle(struct cpuidle_device *dev, struct cpuidle_state *st) +{ + ktime_t t1, t2; + s64 diff; + int ret; + + t1 = ktime_get(); + local_irq_enable(); + while (!need_resched()) + cpu_relax(); + + t2 = ktime_get(); + diff = ktime_to_us(ktime_sub(t2, t1)); + if (diff > INT_MAX) + diff = INT_MAX; + + ret = (int) diff; + return ret; +} + +static void poll_idle_init(struct cpuidle_device *dev) +{ + struct cpuidle_state *state = &dev->states[0]; + + cpuidle_set_statedata(state, NULL); + + snprintf(state->name, CPUIDLE_NAME_LEN, "C0 (poll idle)"); + state->exit_latency = 0; + state->target_residency = 0; + state->power_usage = -1; + state->flags = CPUIDLE_FLAG_POLL | CPUIDLE_FLAG_TIME_VALID; + state->enter = poll_idle; +} +#else +static void poll_idle_init(struct cpuidle_device *dev) {} +#endif /* CONFIG_ARCH_HAS_CPU_RELAX */ + /** * cpuidle_register_device - registers a CPU's idle PM feature * @dev: the cpu @@ -198,6 +237,8 @@ int cpuidle_register_device(struct cpuidle_device *dev) mutex_lock(&cpuidle_lock); + poll_idle_init(dev); + per_cpu(cpuidle_devices, dev->cpu) = dev; list_add(&dev->device_list, &cpuidle_detected_devices); if ((ret = cpuidle_add_sysfs(sys_dev))) { diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h index b0fd85ab9efb..385d45b616db 100644 --- a/include/linux/cpuidle.h +++ b/include/linux/cpuidle.h @@ -46,9 +46,10 @@ struct cpuidle_state { /* Idle State Flags */ #define CPUIDLE_FLAG_TIME_VALID (0x01) /* is residency time measurable? */ #define CPUIDLE_FLAG_CHECK_BM (0x02) /* BM activity will exit state */ -#define CPUIDLE_FLAG_SHALLOW (0x10) /* low latency, minimal savings */ -#define CPUIDLE_FLAG_BALANCED (0x20) /* medium latency, moderate savings */ -#define CPUIDLE_FLAG_DEEP (0x40) /* high latency, large savings */ +#define CPUIDLE_FLAG_POLL (0x10) /* no latency, no savings */ +#define CPUIDLE_FLAG_SHALLOW (0x20) /* low latency, minimal savings */ +#define CPUIDLE_FLAG_BALANCED (0x40) /* medium latency, moderate savings */ +#define CPUIDLE_FLAG_DEEP (0x80) /* high latency, large savings */ #define CPUIDLE_DRIVER_FLAGS_MASK (0xFFFF0000) @@ -178,4 +179,10 @@ static inline void cpuidle_unregister_governor(struct cpuidle_governor *gov) { } #endif +#ifdef CONFIG_ARCH_HAS_CPU_RELAX +#define CPUIDLE_DRIVER_STATE_START 1 +#else +#define CPUIDLE_DRIVER_STATE_START 0 +#endif + #endif /* _LINUX_CPUIDLE_H */ -- cgit v1.2.3 From e5685b9d35c2cc0a98425b05df30cb837dd1e632 Mon Sep 17 00:00:00 2001 From: Adrian Bunk Date: Wed, 24 Oct 2007 18:24:42 +0200 Subject: ACPI: misc cleanups This patch contains the following possible cleanups: - make the following needlessly global code static: - drivers/acpi/bay.c:dev_attr_eject - drivers/acpi/bay.c:dev_attr_present - drivers/acpi/dock.c:dev_attr_docked - drivers/acpi/dock.c:dev_attr_flags - drivers/acpi/dock.c:dev_attr_uid - drivers/acpi/dock.c:dev_attr_undock - drivers/acpi/pci_bind.c:acpi_pci_unbind() - drivers/acpi/pci_link.c:acpi_link_lock - drivers/acpi/sbs.c:acpi_sbs_callback() - drivers/acpi/sbshc.c:acpi_smbus_transaction() - drivers/acpi/sleep/main.c:acpi_sleep_prepare() - #if 0 the following unused global functions: - drivers/acpi/numa.c:acpi_unmap_pxm_to_node() - remove the following unused EXPORT_SYMBOL's: - acpi_register_gsi - acpi_unregister_gsi - acpi_strict - acpi_bus_receive_event - register_acpi_bus_type - unregister_acpi_bus_type - acpi_os_printf - acpi_os_sleep - acpi_os_stall - acpi_os_read_pci_configuration - acpi_os_create_semaphore - acpi_os_delete_semaphore - acpi_os_wait_semaphore - acpi_os_signal_semaphore - acpi_os_signal - acpi_pci_irq_enable - acpi_get_pxm Signed-off-by: Adrian Bunk Acked-by: Alexey Starikovskiy Signed-off-by: Len Brown --- arch/ia64/kernel/acpi.c | 4 ---- arch/x86/kernel/acpi/boot.c | 3 --- drivers/acpi/bay.c | 4 ++-- drivers/acpi/bus.c | 1 - drivers/acpi/dock.c | 8 ++++---- drivers/acpi/glue.c | 4 ---- drivers/acpi/numa.c | 3 ++- drivers/acpi/osl.c | 18 ------------------ drivers/acpi/pci_bind.c | 4 +++- drivers/acpi/pci_irq.c | 2 -- drivers/acpi/pci_link.c | 2 +- drivers/acpi/sbs.c | 2 +- drivers/acpi/sbshc.c | 4 ++-- include/acpi/acpi_drivers.h | 1 - include/acpi/acpi_numa.h | 1 - 15 files changed, 15 insertions(+), 46 deletions(-) (limited to 'arch') diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c index 00b5d08f6da8..78206f1b71d2 100644 --- a/arch/ia64/kernel/acpi.c +++ b/arch/ia64/kernel/acpi.c @@ -601,8 +601,6 @@ int acpi_register_gsi(u32 gsi, int triggering, int polarity) IOSAPIC_LEVEL); } -EXPORT_SYMBOL(acpi_register_gsi); - void acpi_unregister_gsi(u32 gsi) { if (acpi_irq_model == ACPI_IRQ_MODEL_PLATFORM) @@ -611,8 +609,6 @@ void acpi_unregister_gsi(u32 gsi) iosapic_unregister_intr(gsi); } -EXPORT_SYMBOL(acpi_unregister_gsi); - static int __init acpi_parse_fadt(struct acpi_table_header *table) { struct acpi_table_header *fadt_header; diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index d2a58431a074..529e52df4e1d 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c @@ -78,7 +78,6 @@ int acpi_ht __initdata = 1; /* enable HT */ int acpi_lapic; int acpi_ioapic; int acpi_strict; -EXPORT_SYMBOL(acpi_strict); u8 acpi_sci_flags __initdata; int acpi_sci_override_gsi __initdata; @@ -490,8 +489,6 @@ int acpi_register_gsi(u32 gsi, int triggering, int polarity) return irq; } -EXPORT_SYMBOL(acpi_register_gsi); - /* * ACPI based hotplug support for CPU */ diff --git a/drivers/acpi/bay.c b/drivers/acpi/bay.c index 6daf6088ac88..0c81294ac489 100644 --- a/drivers/acpi/bay.c +++ b/drivers/acpi/bay.c @@ -128,7 +128,7 @@ static ssize_t show_present(struct device *dev, return snprintf(buf, PAGE_SIZE, "%d\n", bay_present(bay)); } -DEVICE_ATTR(present, S_IRUGO, show_present, NULL); +static DEVICE_ATTR(present, S_IRUGO, show_present, NULL); /* * write_eject - write method for "eject" file in sysfs @@ -144,7 +144,7 @@ static ssize_t write_eject(struct device *dev, struct device_attribute *attr, eject_device(bay->handle); return count; } -DEVICE_ATTR(eject, S_IWUSR, NULL, write_eject); +static DEVICE_ATTR(eject, S_IWUSR, NULL, write_eject); /** * is_ata - see if a device is an ata device diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c index 1b4cf984b081..2994bb2b22e9 100644 --- a/drivers/acpi/bus.c +++ b/drivers/acpi/bus.c @@ -366,7 +366,6 @@ int acpi_bus_receive_event(struct acpi_bus_event *event) return 0; } -EXPORT_SYMBOL(acpi_bus_receive_event); #endif /* CONFIG_ACPI_PROC_EVENT */ /* -------------------------------------------------------------------------- diff --git a/drivers/acpi/dock.c b/drivers/acpi/dock.c index 1dabdf4c07b3..7e47a981cc27 100644 --- a/drivers/acpi/dock.c +++ b/drivers/acpi/dock.c @@ -680,7 +680,7 @@ static ssize_t show_docked(struct device *dev, return snprintf(buf, PAGE_SIZE, "%d\n", dock_present(dock_station)); } -DEVICE_ATTR(docked, S_IRUGO, show_docked, NULL); +static DEVICE_ATTR(docked, S_IRUGO, show_docked, NULL); /* * show_flags - read method for flags file in sysfs @@ -691,7 +691,7 @@ static ssize_t show_flags(struct device *dev, return snprintf(buf, PAGE_SIZE, "%d\n", dock_station->flags); } -DEVICE_ATTR(flags, S_IRUGO, show_flags, NULL); +static DEVICE_ATTR(flags, S_IRUGO, show_flags, NULL); /* * write_undock - write method for "undock" file in sysfs @@ -707,7 +707,7 @@ static ssize_t write_undock(struct device *dev, struct device_attribute *attr, ret = handle_eject_request(dock_station, ACPI_NOTIFY_EJECT_REQUEST); return ret ? ret: count; } -DEVICE_ATTR(undock, S_IWUSR, NULL, write_undock); +static DEVICE_ATTR(undock, S_IWUSR, NULL, write_undock); /* * show_dock_uid - read method for "uid" file in sysfs @@ -723,7 +723,7 @@ static ssize_t show_dock_uid(struct device *dev, return snprintf(buf, PAGE_SIZE, "%lx\n", lbuf); } -DEVICE_ATTR(uid, S_IRUGO, show_dock_uid, NULL); +static DEVICE_ATTR(uid, S_IRUGO, show_dock_uid, NULL); /** * dock_add - add a new dock station diff --git a/drivers/acpi/glue.c b/drivers/acpi/glue.c index 4893e256e399..eda0978b57c6 100644 --- a/drivers/acpi/glue.c +++ b/drivers/acpi/glue.c @@ -36,8 +36,6 @@ int register_acpi_bus_type(struct acpi_bus_type *type) return -ENODEV; } -EXPORT_SYMBOL(register_acpi_bus_type); - int unregister_acpi_bus_type(struct acpi_bus_type *type) { if (acpi_disabled) @@ -53,8 +51,6 @@ int unregister_acpi_bus_type(struct acpi_bus_type *type) return -ENODEV; } -EXPORT_SYMBOL(unregister_acpi_bus_type); - static struct acpi_bus_type *acpi_get_bus_type(struct bus_type *type) { struct acpi_bus_type *tmp, *ret = NULL; diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c index 0822d9fc1cb4..5d59cb33b1a5 100644 --- a/drivers/acpi/numa.c +++ b/drivers/acpi/numa.c @@ -78,6 +78,7 @@ int acpi_map_pxm_to_node(int pxm) return node; } +#if 0 void __cpuinit acpi_unmap_pxm_to_node(int node) { int pxm = node_to_pxm_map[node]; @@ -85,6 +86,7 @@ void __cpuinit acpi_unmap_pxm_to_node(int node) node_to_pxm_map[node] = PXM_INVAL; node_clear(node, nodes_found_map); } +#endif /* 0 */ static void __init acpi_table_print_srat_entry(struct acpi_subtable_header *header) @@ -247,7 +249,6 @@ int acpi_get_pxm(acpi_handle h) } while (ACPI_SUCCESS(status)); return -1; } -EXPORT_SYMBOL(acpi_get_pxm); int acpi_get_node(acpi_handle *handle) { diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index e53fb516f9d4..7fcacc5ed821 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c @@ -219,8 +219,6 @@ void acpi_os_printf(const char *fmt, ...) va_end(args); } -EXPORT_SYMBOL(acpi_os_printf); - void acpi_os_vprintf(const char *fmt, va_list args) { static char buffer[512]; @@ -384,8 +382,6 @@ void acpi_os_sleep(acpi_integer ms) schedule_timeout_interruptible(msecs_to_jiffies(ms)); } -EXPORT_SYMBOL(acpi_os_sleep); - void acpi_os_stall(u32 us) { while (us) { @@ -399,8 +395,6 @@ void acpi_os_stall(u32 us) } } -EXPORT_SYMBOL(acpi_os_stall); - /* * Support ACPI 3.0 AML Timer operand * Returns 64-bit free-running, monotonically increasing timer @@ -550,8 +544,6 @@ acpi_os_read_pci_configuration(struct acpi_pci_id * pci_id, u32 reg, return (result ? AE_ERROR : AE_OK); } -EXPORT_SYMBOL(acpi_os_read_pci_configuration); - acpi_status acpi_os_write_pci_configuration(struct acpi_pci_id * pci_id, u32 reg, acpi_integer value, u32 width) @@ -793,8 +785,6 @@ acpi_os_create_semaphore(u32 max_units, u32 initial_units, acpi_handle * handle) return AE_OK; } -EXPORT_SYMBOL(acpi_os_create_semaphore); - /* * TODO: A better way to delete semaphores? Linux doesn't have a * 'delete_semaphore()' function -- may result in an invalid @@ -818,8 +808,6 @@ acpi_status acpi_os_delete_semaphore(acpi_handle handle) return AE_OK; } -EXPORT_SYMBOL(acpi_os_delete_semaphore); - /* * TODO: The kernel doesn't have a 'down_timeout' function -- had to * improvise. The process is to sleep for one scheduler quantum @@ -912,8 +900,6 @@ acpi_status acpi_os_wait_semaphore(acpi_handle handle, u32 units, u16 timeout) return status; } -EXPORT_SYMBOL(acpi_os_wait_semaphore); - /* * TODO: Support for units > 1? */ @@ -936,8 +922,6 @@ acpi_status acpi_os_signal_semaphore(acpi_handle handle, u32 units) return AE_OK; } -EXPORT_SYMBOL(acpi_os_signal_semaphore); - #ifdef ACPI_FUTURE_USAGE u32 acpi_os_get_line(char *buffer) { @@ -981,8 +965,6 @@ acpi_status acpi_os_signal(u32 function, void *info) return AE_OK; } -EXPORT_SYMBOL(acpi_os_signal); - static int __init acpi_os_name_setup(char *str) { char *p = acpi_os_name; diff --git a/drivers/acpi/pci_bind.c b/drivers/acpi/pci_bind.c index 388300de005d..4b252ea0e952 100644 --- a/drivers/acpi/pci_bind.c +++ b/drivers/acpi/pci_bind.c @@ -44,6 +44,8 @@ struct acpi_pci_data { struct pci_dev *dev; }; +static int acpi_pci_unbind(struct acpi_device *device); + static void acpi_pci_data_handler(acpi_handle handle, u32 function, void *context) { @@ -267,7 +269,7 @@ int acpi_pci_bind(struct acpi_device *device) return result; } -int acpi_pci_unbind(struct acpi_device *device) +static int acpi_pci_unbind(struct acpi_device *device) { int result = 0; acpi_status status = AE_OK; diff --git a/drivers/acpi/pci_irq.c b/drivers/acpi/pci_irq.c index 62010c2481b3..822947339df1 100644 --- a/drivers/acpi/pci_irq.c +++ b/drivers/acpi/pci_irq.c @@ -478,8 +478,6 @@ int acpi_pci_irq_enable(struct pci_dev *dev) return 0; } -EXPORT_SYMBOL(acpi_pci_irq_enable); - /* FIXME: implement x86/x86_64 version */ void __attribute__ ((weak)) acpi_unregister_gsi(u32 i) { diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c index 5400ea173f6f..233c40c51684 100644 --- a/drivers/acpi/pci_link.c +++ b/drivers/acpi/pci_link.c @@ -95,7 +95,7 @@ static struct { int count; struct list_head entries; } acpi_link; -DEFINE_MUTEX(acpi_link_lock); +static DEFINE_MUTEX(acpi_link_lock); /* -------------------------------------------------------------------------- PCI Link Device Management diff --git a/drivers/acpi/sbs.c b/drivers/acpi/sbs.c index f136c7d3b3c2..1194105cc3ca 100644 --- a/drivers/acpi/sbs.c +++ b/drivers/acpi/sbs.c @@ -888,7 +888,7 @@ static void acpi_charger_remove(struct acpi_sbs *sbs) #endif } -void acpi_sbs_callback(void *context) +static void acpi_sbs_callback(void *context) { int id; struct acpi_sbs *sbs = context; diff --git a/drivers/acpi/sbshc.c b/drivers/acpi/sbshc.c index fd40b6a1d639..ae9a90438e2f 100644 --- a/drivers/acpi/sbshc.c +++ b/drivers/acpi/sbshc.c @@ -111,8 +111,8 @@ static int wait_transaction_complete(struct acpi_smb_hc *hc, int timeout) return -ETIME; } -int acpi_smbus_transaction(struct acpi_smb_hc *hc, u8 protocol, u8 address, - u8 command, u8 *data, u8 length) +static int acpi_smbus_transaction(struct acpi_smb_hc *hc, u8 protocol, + u8 address, u8 command, u8 *data, u8 length) { int ret = -EFAULT, i; u8 temp, sz = 0; diff --git a/include/acpi/acpi_drivers.h b/include/acpi/acpi_drivers.h index f85f77a538aa..a77196bcb993 100644 --- a/include/acpi/acpi_drivers.h +++ b/include/acpi/acpi_drivers.h @@ -73,7 +73,6 @@ struct pci_bus; acpi_status acpi_get_pci_id(acpi_handle handle, struct acpi_pci_id *id); int acpi_pci_bind(struct acpi_device *device); -int acpi_pci_unbind(struct acpi_device *device); int acpi_pci_bind_root(struct acpi_device *device, struct acpi_pci_id *id, struct pci_bus *bus); diff --git a/include/acpi/acpi_numa.h b/include/acpi/acpi_numa.h index 62c5ee4311da..173972672175 100644 --- a/include/acpi/acpi_numa.h +++ b/include/acpi/acpi_numa.h @@ -15,7 +15,6 @@ extern int pxm_to_node(int); extern int node_to_pxm(int); extern void __acpi_map_pxm_to_node(int, int); extern int acpi_map_pxm_to_node(int); -extern void __cpuinit acpi_unmap_pxm_to_node(int); #endif /* CONFIG_ACPI_NUMA */ #endif /* __ACP_NUMA_H */ -- cgit v1.2.3 From 9b7131542178f5f948e4bb6bea6e1c545e697b06 Mon Sep 17 00:00:00 2001 From: Len Brown Date: Thu, 7 Feb 2008 04:16:34 -0500 Subject: Revert "cpuidle: build fix for non-x86" This reverts commit f757397097d0713c949af76dccabb65a2785782e. which ironically broke the ia64 build --- arch/x86/Kconfig | 3 --- drivers/cpuidle/cpuidle.c | 2 +- include/linux/cpuidle.h | 13 ------------- 3 files changed, 1 insertion(+), 17 deletions(-) (limited to 'arch') diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 3954ae96b0c7..fd4265007053 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -98,9 +98,6 @@ config ARCH_HAS_ILOG2_U32 config ARCH_HAS_ILOG2_U64 def_bool n -config ARCH_HAS_CPU_IDLE_WAIT - def_bool y - config GENERIC_CALIBRATE_DELAY def_bool y diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c index d868d737742f..2c4b2d47973e 100644 --- a/drivers/cpuidle/cpuidle.c +++ b/drivers/cpuidle/cpuidle.c @@ -83,7 +83,7 @@ void cpuidle_uninstall_idle_handler(void) { if (enabled_devices && (pm_idle != pm_idle_old)) { pm_idle = pm_idle_old; - cpuidle_kick_cpus(); + cpu_idle_wait(); } } diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h index c8eb8c71809e..385d45b616db 100644 --- a/include/linux/cpuidle.h +++ b/include/linux/cpuidle.h @@ -73,19 +73,6 @@ cpuidle_set_statedata(struct cpuidle_state *state, void *data) state->driver_data = data; } -#ifdef CONFIG_SMP -#ifdef CONFIG_ARCH_HAS_CPU_IDLE_WAIT -static inline void cpuidle_kick_cpus(void) -{ - cpu_idle_wait(); -} -#else /* !CONFIG_ARCH_HAS_CPU_IDLE_WAIT */ -#error "Arch needs cpu_idle_wait() equivalent here" -#endif /* !CONFIG_ARCH_HAS_CPU_IDLE_WAIT */ -#else /* !CONFIG_SMP */ -static inline void cpuidle_kick_cpus(void) {} -#endif /* !CONFIG_SMP */ - struct cpuidle_state_kobj { struct cpuidle_state *state; struct completion kobj_unregister; -- cgit v1.2.3