From 23b5f42a543645ad62a1459c0d034cf55ab878e9 Mon Sep 17 00:00:00 2001 From: Andi Kleen Date: Fri, 19 Aug 2005 06:56:40 +0200 Subject: [PATCH] --- yaml --- r: 5909 b: refs/heads/master c: 1eecd73cce4e11ba9d67ad767f92069cfba7b589 h: refs/heads/master i: 5907: 967972f5ff45fc1b18a3ecd1db3d508e91cc65f0 v: v3 --- [refs] | 2 +- trunk/arch/x86_64/kernel/smpboot.c | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index ab836d8a4c9b..d510752dc46b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5e5ec10499a00bf4ce3440d5a9e1a5a176c5a640 +refs/heads/master: 1eecd73cce4e11ba9d67ad767f92069cfba7b589 diff --git a/trunk/arch/x86_64/kernel/smpboot.c b/trunk/arch/x86_64/kernel/smpboot.c index b15761ff4101..fa25e39fe54d 100644 --- a/trunk/arch/x86_64/kernel/smpboot.c +++ b/trunk/arch/x86_64/kernel/smpboot.c @@ -492,6 +492,14 @@ void __cpuinit start_secondary(void) */ set_cpu_sibling_map(smp_processor_id()); + /* + * Wait for TSC sync to not schedule things before. + * We still process interrupts, which could see an inconsistent + * time in that window unfortunately. + * Do this here because TSC sync has global unprotected state. + */ + tsc_sync_wait(); + /* * We need to hold call_lock, so there is no inconsistency * between the time smp_call_function() determines number of @@ -509,13 +517,6 @@ void __cpuinit start_secondary(void) per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE; unlock_ipi_call_lock(); - mb(); - - /* Wait for TSC sync to not schedule things before. - We still process interrupts, which could see an inconsistent - time in that window unfortunately. */ - tsc_sync_wait(); - cpu_idle(); }