another mb() for smpboot.c From: Benjamin LaHaise The following is probably a good idea given that the atomic_set() isn't a barrier here either. Signed-off-by: Benjamin LaHaise Signed-off-by: Andi Kleen diff --git a/arch/x86_64/kernel/smpboot.c b/arch/x86_64/kernel/smpboot.c index 10b951b..a9a8f97 100644 Index: linux/arch/x86_64/kernel/smpboot.c =================================================================== --- linux.orig/arch/x86_64/kernel/smpboot.c +++ linux/arch/x86_64/kernel/smpboot.c @@ -646,6 +646,7 @@ static int __cpuinit wakeup_secondary_vi send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY; } while (send_status && (timeout++ < 1000)); + mb(); atomic_set(&init_deasserted, 1); num_starts = 2;