[RFC PATCH powerpc ] Protect smp_processor_id() in arch_spin_unlock_wait()
Li Zhong
zhong at linux.vnet.ibm.com
Mon Nov 19 17:16:39 EST 2012
This patch tries to disable preemption for using smp_processor_id() in arch_spin_unlock_wait(),
to avoid following report:
[ 17.279377] BUG: using smp_processor_id() in preemptible [00000000] code: autorun/1024
[ 17.279407] caller is .arch_spin_unlock_wait+0x34/0x80
[ 17.279415] Call Trace:
[ 17.279423] [c00000000911fb30] [c000000000015230] .show_stack+0x70/0x1c0 (unreliable)
[ 17.279441] [c00000000911fbe0] [c0000000003e13b0] .debug_smp_processor_id+0x110/0x130
[ 17.279455] [c00000000911fc80] [c00000000004c2b4] .arch_spin_unlock_wait+0x34/0x80
[ 17.279470] [c00000000911fd00] [c0000000000b0e50] .task_work_run+0x80/0x160
[ 17.279482] [c00000000911fdb0] [c000000000018744] .do_notify_resume+0x94/0xa0
[ 17.279495] [c00000000911fe30] [c000000000009d1c] .ret_from_except_lite+0x48/0x4c
Reported-by: Paul E. McKenney <paulmck at linux.vnet.ibm.com>
Signed-off-by: Li Zhong <zhong at linux.vnet.ibm.com>
---
arch/powerpc/lib/locks.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/arch/powerpc/lib/locks.c b/arch/powerpc/lib/locks.c
index bb7cfec..7a7c31b 100644
--- a/arch/powerpc/lib/locks.c
+++ b/arch/powerpc/lib/locks.c
@@ -72,8 +72,10 @@ void arch_spin_unlock_wait(arch_spinlock_t *lock)
{
while (lock->slock) {
HMT_low();
+ preempt_disable();
if (SHARED_PROCESSOR)
__spin_yield(lock);
+ preempt_enable();
}
HMT_medium();
}
--
1.7.9.5
More information about the Linuxppc-dev
mailing list