According comment of smp_call_function(), smp_call_function() "run a function on all other CPUs.", not on all online CPUs. Signed-off-by: Laurent Vivier --- smp.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/arch/x86_64/kernel/smp.c b/arch/x86_64/kernel/smp.c --- a/arch/x86_64/kernel/smp.c +++ b/arch/x86_64/kernel/smp.c @@ -459,7 +459,12 @@ EXPORT_SYMBOL(smp_call_function_single); int smp_call_function (void (*func) (void *info), void *info, int nonatomic, int wait) { - return smp_call_function_mask(cpu_online_map, func, info, wait); + cpumask_t allbutself; + + allbutself = cpu_online_map; + cpu_clear(smp_processor_id(), allbutself); + + return smp_call_function_mask(allbutself, func, info, wait); } EXPORT_SYMBOL(smp_call_function);