aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/kernel/smpboot_64.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/x86/kernel/smpboot_64.c b/arch/x86/kernel/smpboot_64.c
index 9f4935e70e72..4f6d9768648f 100644
--- a/arch/x86/kernel/smpboot_64.c
+++ b/arch/x86/kernel/smpboot_64.c
@@ -100,6 +100,13 @@ static void __cpuinit smp_store_cpu_info(int id)
100 print_cpu_info(c); 100 print_cpu_info(c);
101} 101}
102 102
103static inline void wait_for_init_deassert(atomic_t *deassert)
104{
105 while (!atomic_read(deassert))
106 cpu_relax();
107 return;
108}
109
103static atomic_t init_deasserted __cpuinitdata; 110static atomic_t init_deasserted __cpuinitdata;
104 111
105/* 112/*
@@ -117,8 +124,7 @@ void __cpuinit smp_callin(void)
117 * our local APIC. We have to wait for the IPI or we'll 124 * our local APIC. We have to wait for the IPI or we'll
118 * lock up on an APIC access. 125 * lock up on an APIC access.
119 */ 126 */
120 while (!atomic_read(&init_deasserted)) 127 wait_for_init_deassert(&init_deasserted);
121 cpu_relax();
122 128
123 /* 129 /*
124 * (This works even if the APIC is not enabled.) 130 * (This works even if the APIC is not enabled.)