|  | /* SPDX-License-Identifier: GPL-2.0 */ | 
|  | #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 | 
|  | * @create:		Optional setup function, called when the thread gets | 
|  | *			created (Not called from the thread context) | 
|  | * @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) | 
|  | * @selfparking:	Thread is not parked by the park function. | 
|  | * @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				(*create)(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); | 
|  | bool				selfparking; | 
|  | 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); | 
|  |  | 
|  | #endif |