[PATCH] raw1394: fix locking in the presence of SMP and interrupts
authorAndy Wingo <wingo@pobox.com>
Thu, 20 Oct 2005 04:23:46 +0000 (21:23 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Thu, 20 Oct 2005 06:04:30 +0000 (23:04 -0700)
commit4a9949d7ac9e2bc51939f27b184be6e1bd99004e
tree85f67b527d3ff5a550ada8e08600f1400ddc5960
parentc367c21c93ccdaf7e1e124891633d89f9ae77f54
[PATCH] raw1394: fix locking in the presence of SMP and interrupts

Changes all spinlocks that can be held during an irq handler to disable
interrupts while the lock is held.  Changes spin_[un]lock_irq to use the
irqsave/irqrestore variants for robustness and readability.

In raw1394.c:handle_iso_listen(), don't grab host_info_lock at all -- we're
not accessing host_info_list or host_count, and holding this lock while
trying to tasklet_kill the iso tasklet this can cause an ABBA deadlock if
ohci:dma_rcv_tasklet is running and tries to grab host_info_lock in
raw1394.c:receive_iso.  Test program attached reliably deadlocks all SMP
machines I have been able to test without this patch.

Signed-off-by: Andy Wingo <wingo@pobox.com>
Acked-by: Ben Collins <bcollins@ubuntu.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/ieee1394/ohci1394.c
drivers/ieee1394/raw1394.c