1
0
Files
linux/drivers/net
Asier Llano 1e4e0767ec net/mpc5200: Fix locking on fec_mpc52xx driver
Fix the locking scheme on the fec_mpc52xx driver.  This device can
receive IRQs from three sources; the FEC itself, the tx DMA, and the
rx DMA.  Mutual exclusion was handled by taking a spin_lock() in the
critical regions, but because the handlers are run with IRQs enabled,
spin_lock() is insufficient and the driver can end up interrupting
a critical region anyway from another IRQ.

Asier Llano discovered that this occurs when an error IRQ is raised
in the middle of handling rx irqs which resulted in an sk_buff memory
leak.

In addition, locking is spotty at best in the driver and inspection
revealed quite a few places with insufficient locking.

This patch is based on Asier's initial work, but reworks a number of
things so that locks are held for as short a time as possible, so
that spin_lock_irqsave() is used everywhere, and so the locks are
dropped when calling into the network stack (because the lock only
protects the hardware interface; not the network stack).

Boot tested on a lite5200 with an NFS root.  Has not been performance
tested.

Signed-off-by: Asier Llano <a.llano@ziv.es>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Signed-off-by: David S. Miller <davem@davemloft.net>
2009-12-08 20:29:10 -08:00
..
2009-10-13 11:48:18 -07:00
2009-11-30 00:13:28 -08:00
2009-12-03 15:58:00 -08:00
2009-11-05 20:00:41 -08:00
2009-11-05 20:00:29 -08:00
2009-11-06 20:26:09 -08:00
2009-10-11 23:30:16 -07:00
2009-12-02 19:57:22 -08:00
2009-10-11 23:30:16 -07:00
2009-10-13 11:48:18 -07:00
2009-11-11 19:22:21 -08:00
2009-09-23 07:39:43 -07:00
2009-10-11 11:20:58 -07:00
2009-10-20 18:51:37 -07:00
2009-11-11 19:03:36 -08:00
2009-09-07 01:56:52 -07:00
2009-11-20 15:35:04 -08:00
2009-10-13 11:48:18 -07:00
2009-10-20 19:11:06 -07:00
2009-11-29 17:04:31 -08:00
2009-11-13 14:07:30 -08:00
2009-10-13 11:48:18 -07:00
2009-10-13 11:48:18 -07:00
2009-10-01 15:14:54 -07:00
2009-10-29 22:57:27 -07:00
2009-12-03 13:18:08 -08:00
2009-12-03 13:18:04 -08:00
2009-11-06 22:52:32 -08:00
2009-11-26 15:51:29 -08:00