summaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorKirill Korotaev <dev@sw.ru>2005-11-13 16:07:30 -0800
committerLinus Torvalds <torvalds@g5.osdl.org>2005-11-13 18:14:16 -0800
commit4557398f8cbaf9f254cff747534b4724c7f75c4f (patch)
tree052b59279b1312a4fde83a76feb4a7a0c5cf7df1 /include/linux
parentc5b609797b8e212dbfaf23944da8bf8c53233d5c (diff)
downloadop-kernel-dev-4557398f8cbaf9f254cff747534b4724c7f75c4f.zip
op-kernel-dev-4557398f8cbaf9f254cff747534b4724c7f75c4f.tar.gz
[PATCH] stop_machine() vs. synchronous IPI send deadlock
This fixes deadlock of stop_machine() vs. synchronous IPI send. The problem is that stop_machine() disables interrupts before disabling preemption on other CPUs. So if another CPU is preempted and then calls something like flush_tlb_all() it will deadlock with CPU doing stop_machine() and which can't process IPI due to disabled IRQs. I changed stop_machine() to do the same things exactly as it does on other CPUs, i.e. it should disable preemption first on _all_ CPUs including itself and only after that disable IRQs. Signed-off-by: Kirill Korotaev <dev@sw.ru> Cc: Rusty Russell <rusty@rustcorp.com.au> Cc: "Andrey Savochkin" <saw@sawoct.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/linux')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud