Files
linux-legacy/drivers/net
Arjan van de Ven bce305f4fe [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>
2006-07-05 14:29:26 -04:00
..
2006-06-26 18:35:02 +02:00
…
…
…
…
…
2006-07-05 14:29:26 -04:00
…
…
2006-03-25 08:22:52 -08:00
2006-03-25 08:22:52 -08:00
…
…
2006-06-22 23:16:13 -04:00
…
2006-06-17 21:30:47 -07:00
2006-06-29 16:58:24 -07:00
2006-03-20 22:34:09 -08:00
…
…
…
2006-07-05 14:08:08 -04:00
…
…
…
…
2006-04-02 13:52:48 +02:00
…
…
…
…
2006-06-23 02:06:41 -07:00
2006-03-25 08:22:52 -08:00
…
…
2006-03-25 08:22:52 -08:00
…
…
…
…
2006-03-25 08:22:52 -08:00
…
…
…
…
2006-07-05 14:08:08 -04:00
…
2006-03-03 21:33:57 -05:00
…
2006-05-02 15:16:36 -04:00
2006-06-30 18:25:18 +02:00
…
2006-03-03 21:33:57 -05:00
…
…
…
…
2006-06-23 02:06:41 -07:00
2006-05-08 16:01:11 -07:00
2006-03-20 22:34:25 -08:00
…
2006-07-03 19:42:14 -07:00
2006-06-30 14:11:57 -07:00
…
…