linux/include/linux/smpboot.h
<<
>>
Prefs
   1#ifndef _LINUX_SMPBOOT_H
   2#define _LINUX_SMPBOOT_H
   3
   4#include <linux/types.h>
   5
   6struct task_struct;
   7/* Cookie handed to the thread_fn*/
   8struct smpboot_thread_data;
   9
  10/**
  11 * struct smp_hotplug_thread - CPU hotplug related thread descriptor
  12 * @store:              Pointer to per cpu storage for the task pointers
  13 * @list:               List head for core management
  14 * @thread_should_run:  Check whether the thread should run or not. Called with
  15 *                      preemption disabled.
  16 * @thread_fn:          The associated thread function
  17 * @create:             Optional setup function, called when the thread gets
  18 *                      created (Not called from the thread context)
  19 * @setup:              Optional setup function, called when the thread gets
  20 *                      operational the first time
  21 * @cleanup:            Optional cleanup function, called when the thread
  22 *                      should stop (module exit)
  23 * @park:               Optional park function, called when the thread is
  24 *                      parked (cpu offline)
  25 * @unpark:             Optional unpark function, called when the thread is
  26 *                      unparked (cpu online)
  27 * @cpumask:            Internal state.  To update which threads are unparked,
  28 *                      call smpboot_update_cpumask_percpu_thread().
  29 * @selfparking:        Thread is not parked by the park function.
  30 * @thread_comm:        The base name of the thread
  31 */
  32struct smp_hotplug_thread {
  33        struct task_struct __percpu     **store;
  34        struct list_head                list;
  35        int                             (*thread_should_run)(unsigned int cpu);
  36        void                            (*thread_fn)(unsigned int cpu);
  37        void                            (*create)(unsigned int cpu);
  38        void                            (*setup)(unsigned int cpu);
  39        void                            (*cleanup)(unsigned int cpu, bool online);
  40        void                            (*park)(unsigned int cpu);
  41        void                            (*unpark)(unsigned int cpu);
  42        cpumask_var_t                   cpumask;
  43        bool                            selfparking;
  44        const char                      *thread_comm;
  45};
  46
  47int smpboot_register_percpu_thread_cpumask(struct smp_hotplug_thread *plug_thread,
  48                                           const struct cpumask *cpumask);
  49
  50static inline int
  51smpboot_register_percpu_thread(struct smp_hotplug_thread *plug_thread)
  52{
  53        return smpboot_register_percpu_thread_cpumask(plug_thread,
  54                                                      cpu_possible_mask);
  55}
  56
  57void smpboot_unregister_percpu_thread(struct smp_hotplug_thread *plug_thread);
  58int smpboot_update_cpumask_percpu_thread(struct smp_hotplug_thread *plug_thread,
  59                                         const struct cpumask *);
  60
  61#endif
  62