diff options
Diffstat (limited to 'arch/powerpc/kernel/smp.c')
-rw-r--r-- | arch/powerpc/kernel/smp.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index 087c92f2a3eb..1ea43160f543 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c | |||
@@ -212,11 +212,6 @@ int smp_call_function_map(void (*func) (void *info), void *info, int nonatomic, | |||
212 | atomic_set(&data.finished, 0); | 212 | atomic_set(&data.finished, 0); |
213 | 213 | ||
214 | spin_lock(&call_lock); | 214 | spin_lock(&call_lock); |
215 | /* Must grab online cpu count with preempt disabled, otherwise | ||
216 | * it can change. */ | ||
217 | num_cpus = num_online_cpus() - 1; | ||
218 | if (!num_cpus) | ||
219 | goto done; | ||
220 | 215 | ||
221 | /* remove 'self' from the map */ | 216 | /* remove 'self' from the map */ |
222 | if (cpu_isset(smp_processor_id(), map)) | 217 | if (cpu_isset(smp_processor_id(), map)) |
@@ -224,7 +219,9 @@ int smp_call_function_map(void (*func) (void *info), void *info, int nonatomic, | |||
224 | 219 | ||
225 | /* sanity check the map, remove any non-online processors. */ | 220 | /* sanity check the map, remove any non-online processors. */ |
226 | cpus_and(map, map, cpu_online_map); | 221 | cpus_and(map, map, cpu_online_map); |
227 | if (cpus_empty(map)) | 222 | |
223 | num_cpus = cpus_weight(map); | ||
224 | if (!num_cpus) | ||
228 | goto done; | 225 | goto done; |
229 | 226 | ||
230 | call_data = &data; | 227 | call_data = &data; |