NOTE:
在所有的core上执行函数func,info是传递给func的参数
void on_each_cpu(smp_call_func_t func, void *info, int wait);
在给定cpumask中所有的core上执行函数func,info是传递给func的参数
void on_each_cpu_mask(const struct cpumask *mask, smp_call_func_t func, void *info, bool wait);
除了当前调用的core外所有的core都执行
void smp_call_function(smp_call_func_t func, void *info, int wait);
在指定的cpumask所对应的core上执行,但是要除去当前调用的core
void smp_call_function_many(const struct cpumask *mask, smp_call_func_t func, void *info, bool wait);
在指定的cpumask所对应的core中的其中一个core上执行一次
int smp_call_function_any(const struct cpumask *mask, smp_call_func_t func, void *info, int wait);
在指定的cpuid上执行一次
int smp_call_function_single(int cpuid, smp_call_func_t func, void *info, int wait);
在内核空间中,定义了几个全局cpumask变量。
cpu_possible_mask
- has bit ‘cpu’ set iff cpu is populatablecpu_present_mask
- has bit ‘cpu’ set iff cpu is populatedcpu_online_mask
- has bit ‘cpu’ set iff cpu available to schedulercpu_active_mask
- has bit ‘cpu’ set iff cpu available to migration