This patch removes the usage of shortcut to send smp_call_function using ALL_BUT_SELF shortcut. This is a problem for an upcomming CPU, and is still not ready to take this interrupt. Since cpu_online_map is updated with the call_lock held, this mechanism should avoid sending IPI to cpu's not yet prepared to participate in this party. Signed-off-by: Ashok Raj ---------------------------------------- smp.c | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-) Index: linux-2.6.12-rc4-mm2/arch/x86_64/kernel/smp.c =================================================================== --- linux-2.6.12-rc4-mm2.orig/arch/x86_64/kernel/smp.c 2005-05-20 13:14:27.000000000 -0700 +++ linux-2.6.12-rc4-mm2/arch/x86_64/kernel/smp.c 2005-05-20 13:14:38.000000000 -0700 @@ -315,8 +315,10 @@ int nonatomic, int wait) { struct call_data_struct data; - int cpus = num_online_cpus()-1; + cpumask_t cpu_mask; + int cpus; + cpus = num_online_cpus() - 1; if (!cpus) return; @@ -327,10 +329,14 @@ if (wait) atomic_set(&data.finished, 0); + cpu_mask = cpu_online_map; + cpu_clear(smp_processor_id(), cpu_mask); + call_data = &data; wmb(); + /* Send a message to all other CPUs and wait for them to respond */ - send_IPI_allbutself(CALL_FUNCTION_VECTOR); + send_IPI_mask(cpu_mask, CALL_FUNCTION_VECTOR); /* Wait for response */ while (atomic_read(&data.started) != cpus) --