![]() 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> |
||
---|---|---|
.. | ||
Kconfig | ||
Makefile | ||
amdtp.c | ||
amdtp.h | ||
cmp.c | ||
cmp.h | ||
config_roms.c | ||
config_roms.h | ||
csr.c | ||
csr.h | ||
csr1212.c | ||
csr1212.h | ||
dma.c | ||
dma.h | ||
dv1394-private.h | ||
dv1394.c | ||
dv1394.h | ||
eth1394.c | ||
eth1394.h | ||
highlevel.c | ||
highlevel.h | ||
hosts.c | ||
hosts.h | ||
ieee1394-ioctl.h | ||
ieee1394.h | ||
ieee1394_core.c | ||
ieee1394_core.h | ||
ieee1394_hotplug.h | ||
ieee1394_transactions.c | ||
ieee1394_transactions.h | ||
ieee1394_types.h | ||
iso.c | ||
iso.h | ||
nodemgr.c | ||
nodemgr.h | ||
ohci1394.c | ||
ohci1394.h | ||
oui.db | ||
oui2c.sh | ||
pcilynx.c | ||
pcilynx.h | ||
raw1394-private.h | ||
raw1394.c | ||
raw1394.h | ||
sbp2.c | ||
sbp2.h | ||
video1394.c | ||
video1394.h |