diff options
Diffstat (limited to 'include/linux/smpboot.h')
| -rw-r--r-- | include/linux/smpboot.h | 43 | 
1 files changed, 43 insertions, 0 deletions
diff --git a/include/linux/smpboot.h b/include/linux/smpboot.h new file mode 100644 index 00000000000..e0106d8581d --- /dev/null +++ b/include/linux/smpboot.h @@ -0,0 +1,43 @@ +#ifndef _LINUX_SMPBOOT_H +#define _LINUX_SMPBOOT_H + +#include <linux/types.h> + +struct task_struct; +/* Cookie handed to the thread_fn*/ +struct smpboot_thread_data; + +/** + * struct smp_hotplug_thread - CPU hotplug related thread descriptor + * @store:		Pointer to per cpu storage for the task pointers + * @list:		List head for core management + * @thread_should_run:	Check whether the thread should run or not. Called with + *			preemption disabled. + * @thread_fn:		The associated thread function + * @setup:		Optional setup function, called when the thread gets + *			operational the first time + * @cleanup:		Optional cleanup function, called when the thread + *			should stop (module exit) + * @park:		Optional park function, called when the thread is + *			parked (cpu offline) + * @unpark:		Optional unpark function, called when the thread is + *			unparked (cpu online) + * @thread_comm:	The base name of the thread + */ +struct smp_hotplug_thread { +	struct task_struct __percpu	**store; +	struct list_head		list; +	int				(*thread_should_run)(unsigned int cpu); +	void				(*thread_fn)(unsigned int cpu); +	void				(*setup)(unsigned int cpu); +	void				(*cleanup)(unsigned int cpu, bool online); +	void				(*park)(unsigned int cpu); +	void				(*unpark)(unsigned int cpu); +	const char			*thread_comm; +}; + +int smpboot_register_percpu_thread(struct smp_hotplug_thread *plug_thread); +void smpboot_unregister_percpu_thread(struct smp_hotplug_thread *plug_thread); +int smpboot_thread_schedule(void); + +#endif  |