|
@@ -120,7 +120,7 @@ static void __smp_call_function_map(void (*func) (void *info), void *info,
|
|
|
if (wait)
|
|
|
data.finished = CPU_MASK_NONE;
|
|
|
|
|
|
- spin_lock_bh(&call_lock);
|
|
|
+ spin_lock(&call_lock);
|
|
|
call_data = &data;
|
|
|
|
|
|
for_each_cpu_mask(cpu, map)
|
|
@@ -129,18 +129,16 @@ static void __smp_call_function_map(void (*func) (void *info), void *info,
|
|
|
/* Wait for response */
|
|
|
while (!cpus_equal(map, data.started))
|
|
|
cpu_relax();
|
|
|
-
|
|
|
if (wait)
|
|
|
while (!cpus_equal(map, data.finished))
|
|
|
cpu_relax();
|
|
|
-
|
|
|
- spin_unlock_bh(&call_lock);
|
|
|
-
|
|
|
+ spin_unlock(&call_lock);
|
|
|
out:
|
|
|
- local_irq_disable();
|
|
|
- if (local)
|
|
|
+ if (local) {
|
|
|
+ local_irq_disable();
|
|
|
func(info);
|
|
|
- local_irq_enable();
|
|
|
+ local_irq_enable();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/*
|