提交 8da1aecd 编写于 作者: H Heiko Carstens 提交者: Martin Schwidefsky

[S390] Improve __smp_call_function_map.

There is no need to disable bottom halves when holding call_lock. Also
this could imply that it is legal to call smp_call_function* from
bh context, which it is not.
Also test if func will be executed locally before disabling
and aterwards enabling interrupts again. It's not necessary to disable
and enable interrupts each time __smp_call_function_map gets called.
Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
上级 3bb447fc
......@@ -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();
}
}
/*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册