On Wed, Jan 4, 2012 at 12:34 AM, Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> wrote: > On Mon, 2 Jan 2012 12:24:15 +0200 > Gilad Ben-Yossef <gilad@xxxxxxxxxxxxx> wrote: > >> Add the on_each_cpu_required() function that wraps on_each_cpu_mask() >> and calculates the cpumask of cpus to IPI by calling a function supplied >> as a parameter in order to determine whether to IPI each specific cpu. > > The name is actually "on_each_cpu_cond". Oopss... I started out with on_each_cpu_required as a name and switched but missed the description. Thanks for pointing it out. <SNIP> >> + * Call a function on each processor for which the supplied function >> + * cond_func returns a positive value. This may include the local >> + * processor, optionally waiting for all the required CPUs to finish. >> + * The function may be called on all online CPUs without running the >> + * cond_func function in extreme circumstance (memory allocation >> + * failure condition when CONFIG_CPUMASK_OFFSTACK=y) >> + * All the limitations specified in smp_call_function_many apply. >> + */ >> +void on_each_cpu_cond(int (*cond_func) (int cpu, void *info), >> + void (*func)(void *), void *info, bool wait) >> +{ >> + cpumask_var_t cpus; >> + int cpu; >> + >> + if (likely(zalloc_cpumask_var(&cpus, GFP_ATOMIC))) { >> + for_each_online_cpu(cpu) >> + if (cond_func(cpu, info)) >> + cpumask_set_cpu(cpu, cpus); >> + on_each_cpu_mask(cpus, func, info, wait); >> + free_cpumask_var(cpus); >> + } else >> + on_each_cpu(func, info, wait); >> +} >> +EXPORT_SYMBOL(on_each_cpu_cond); > > If zalloc_cpumask_var() fails, can we not fall back to > > for_each_online_cpu(cpu) > if (cond_func(cpu, info)) > smp_call_function_single(...); > Indeed we can and probably should :-) I'll send out v6 with this and other fixes momentarily. Thanks, Gilad -- Gilad Ben-Yossef Chief Coffee Drinker gilad@xxxxxxxxxxxxx Israel Cell: +972-52-8260388 US Cell: +1-973-8260388 http://benyossef.com "Unfortunately, cache misses are an equal opportunity pain provider." -- Mike Galbraith, LKML -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href