summaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000/e1000_ethtool.c
diff options
context:
space:
mode:
authorArjan van de Ven <arjan@infradead.org>2006-07-05 15:00:40 +0200
committerJeff Garzik <jeff@garzik.org>2006-07-05 20:29:26 +0200
commitbce305f4fe779f29d99d414685243f5da0803254 (patch)
tree67072c37319f3c6b091dec8094d342118fe3fd62 /drivers/net/e1000/e1000_ethtool.c
parent[netdrvr] 3c59x: snip changelog from source code (diff)
downloadlinux-bce305f4fe779f29d99d414685243f5da0803254.tar.xz
linux-bce305f4fe779f29d99d414685243f5da0803254.zip
[PATCH] 8139too deadlock fix
> stack backtrace: > [<f9099d31>] rtl8139_start_xmit+0xd9/0xff [8139too] > [<c11ad5ea>] netpoll_send_skb+0x98/0xea This seems to be a real deadlock... So netpoll_send_skb takes the _xmit_lock, which is all nitty gritty but then rtl8139_start_xmit comes around while that lock is taken, and does spin_unlock_irq(&tp->lock); which.. enables interrupts and softirqs; this is quite bad because the xmit lock is taken in softirq context for the watchdog like this: [<c1200376>] _spin_lock+0x23/0x32 [<c11af282>] dev_watchdog+0x14/0xb1 [<c101dab2>] run_timer_softirq+0xf2/0x14a [<c101a691>] __do_softirq+0x55/0xb0 [<c1004a8d>] do_softirq+0x58/0xbd Which would deadlock now that the spin_unlock_irq() has enabled irqs/softirqs while the _xmit_lock is still held. The patch below turns this into a irqsave/irqrestore pair so that interrupts don't get enabled unconditionally. Signed-off-by: Arjan van de Ven <arjan@linux.intel.com> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net/e1000/e1000_ethtool.c')
0 files changed, 0 insertions, 0 deletions