diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2012-07-16 12:42:36 +0200 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2012-08-13 17:01:07 +0200 |
commit | f97f8f06a49febbc3cb3635172efbe64ddc79700 (patch) | |
tree | 7917324eb3e1c36963a8c60c6a5601708b3ef208 /kernel/smpboot.h | |
parent | kthread: Implement park/unpark facility (diff) | |
download | linux-f97f8f06a49febbc3cb3635172efbe64ddc79700.tar.xz linux-f97f8f06a49febbc3cb3635172efbe64ddc79700.zip |
smpboot: Provide infrastructure for percpu hotplug threads
Provide a generic interface for setting up and tearing down percpu
threads.
On registration the threads for already online cpus are created and
started. On deregistration (modules) the threads are stoppped.
During hotplug operations the threads are created, started, parked and
unparked. The datastructure for registration provides a pointer to
percpu storage space and optional setup, cleanup, park, unpark
functions. These functions are called when the thread state changes.
Each implementation has to provide a function which is queried and
returns whether the thread should run and the thread function itself.
The core code handles all state transitions and avoids duplicated code
in the call sites.
[ paulmck: Preemption leak fix ]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Reviewed-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Reviewed-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: http://lkml.kernel.org/r/20120716103948.352501068@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/smpboot.h')
-rw-r--r-- | kernel/smpboot.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/kernel/smpboot.h b/kernel/smpboot.h index 6ef9433e1c70..72415a0eb955 100644 --- a/kernel/smpboot.h +++ b/kernel/smpboot.h @@ -13,4 +13,8 @@ static inline void idle_thread_set_boot_cpu(void) { } static inline void idle_threads_init(void) { } #endif +int smpboot_create_threads(unsigned int cpu); +void smpboot_park_threads(unsigned int cpu); +void smpboot_unpark_threads(unsigned int cpu); + #endif |