diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/kernel/smpboot_64.c | 10 |
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 | ||
103 | static inline void wait_for_init_deassert(atomic_t *deassert) | ||
104 | { | ||
105 | while (!atomic_read(deassert)) | ||
106 | cpu_relax(); | ||
107 | return; | ||
108 | } | ||
109 | |||
103 | static atomic_t init_deasserted __cpuinitdata; | 110 | static 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.) |