root/include/linux/smpboot.h

/* [<][>][^][v][top][bottom][index][help] */
#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)
 * @pre_unpark:         Optional unpark function, called before the thread is
 *                      unparked (cpu online). This is not guaranteed to be
 *                      called on the target cpu of the thread. Careful!
 * @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);
        void                            (*pre_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);
int smpboot_thread_schedule(void);

#endif

/* [<][>][^][v][top][bottom][index][help] */