diff options
| author | Todd Poynor <toddpoynor@google.com> | 2011-06-15 17:21:57 -0700 | 
|---|---|---|
| committer | Arve Hjønnevåg <arve@android.com> | 2013-07-01 13:40:30 -0700 | 
| commit | 302467bb15d4cb3486696bd4063a72237749c73f (patch) | |
| tree | 53ec2738c77a3c3ffaabfe392e11164d7fe3e1f8 | |
| parent | d343106d122c349d1e14e00b12d37b1f7d38d5b5 (diff) | |
| download | olio-linux-3.10-302467bb15d4cb3486696bd4063a72237749c73f.tar.xz olio-linux-3.10-302467bb15d4cb3486696bd4063a72237749c73f.zip | |
Move x86_64 idle notifiers to generic
Move the x86_64 idle notifiers originally by Andi Kleen and Venkatesh
Pallipadi to generic.
Change-Id: Idf29cda15be151f494ff245933c12462643388d5
Acked-by: Nicolas Pitre <nicolas.pitre@linaro.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
| -rw-r--r-- | arch/x86/include/asm/idle.h | 7 | ||||
| -rw-r--r-- | arch/x86/kernel/process.c | 17 | ||||
| -rw-r--r-- | include/linux/cpu.h | 7 | ||||
| -rw-r--r-- | kernel/cpu.c | 20 | 
4 files changed, 29 insertions, 22 deletions
| diff --git a/arch/x86/include/asm/idle.h b/arch/x86/include/asm/idle.h index c5d1785373e..02bab09707f 100644 --- a/arch/x86/include/asm/idle.h +++ b/arch/x86/include/asm/idle.h @@ -1,13 +1,6 @@  #ifndef _ASM_X86_IDLE_H  #define _ASM_X86_IDLE_H -#define IDLE_START 1 -#define IDLE_END 2 - -struct notifier_block; -void idle_notifier_register(struct notifier_block *n); -void idle_notifier_unregister(struct notifier_block *n); -  #ifdef CONFIG_X86_64  void enter_idle(void);  void exit_idle(void); diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index 81a5f5e8f14..1ce8966f248 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -40,19 +40,6 @@ DEFINE_PER_CPU_SHARED_ALIGNED(struct tss_struct, init_tss) = INIT_TSS;  #ifdef CONFIG_X86_64  static DEFINE_PER_CPU(unsigned char, is_idle); -static ATOMIC_NOTIFIER_HEAD(idle_notifier); - -void idle_notifier_register(struct notifier_block *n) -{ -	atomic_notifier_chain_register(&idle_notifier, n); -} -EXPORT_SYMBOL_GPL(idle_notifier_register); - -void idle_notifier_unregister(struct notifier_block *n) -{ -	atomic_notifier_chain_unregister(&idle_notifier, n); -} -EXPORT_SYMBOL_GPL(idle_notifier_unregister);  #endif  struct kmem_cache *task_xstate_cachep; @@ -257,14 +244,14 @@ static inline void play_dead(void)  void enter_idle(void)  {  	this_cpu_write(is_idle, 1); -	atomic_notifier_call_chain(&idle_notifier, IDLE_START, NULL); +	idle_notifier_call_chain(IDLE_START);  }  static void __exit_idle(void)  {  	if (x86_test_and_clear_bit_percpu(0, is_idle) == 0)  		return; -	atomic_notifier_call_chain(&idle_notifier, IDLE_END, NULL); +	idle_notifier_call_chain(IDLE_END);  }  /* Called from interrupts to signify idle end */ diff --git a/include/linux/cpu.h b/include/linux/cpu.h index 9f3c7e81270..39d4f9d3790 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h @@ -232,4 +232,11 @@ void arch_cpu_idle_enter(void);  void arch_cpu_idle_exit(void);  void arch_cpu_idle_dead(void); +#define IDLE_START 1 +#define IDLE_END 2 + +void idle_notifier_register(struct notifier_block *n); +void idle_notifier_unregister(struct notifier_block *n); +void idle_notifier_call_chain(unsigned long val); +  #endif /* _LINUX_CPU_H_ */ diff --git a/kernel/cpu.c b/kernel/cpu.c index 198a38883e6..f2d0575f9a3 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c @@ -726,3 +726,23 @@ void init_cpu_online(const struct cpumask *src)  {  	cpumask_copy(to_cpumask(cpu_online_bits), src);  } + +static ATOMIC_NOTIFIER_HEAD(idle_notifier); + +void idle_notifier_register(struct notifier_block *n) +{ +	atomic_notifier_chain_register(&idle_notifier, n); +} +EXPORT_SYMBOL_GPL(idle_notifier_register); + +void idle_notifier_unregister(struct notifier_block *n) +{ +	atomic_notifier_chain_unregister(&idle_notifier, n); +} +EXPORT_SYMBOL_GPL(idle_notifier_unregister); + +void idle_notifier_call_chain(unsigned long val) +{ +	atomic_notifier_call_chain(&idle_notifier, val, NULL); +} +EXPORT_SYMBOL_GPL(idle_notifier_call_chain); |