linux/drivers/net/usb
David S. Miller 4bb073c0e3 net: Eliminate flush_scheduled_work() calls while RTNL is held.
If the RTNL is held when we invoke flush_scheduled_work() we could
deadlock.  One such case is linkwatch, it is a work struct which tries
to grab the RTNL semaphore.

The most common case are net driver ->stop() methods.  The
simplest conversion is to instead use cancel_{delayed_}work_sync()
explicitly on the various work struct the driver uses.

This is an OK transformation because these work structs are doing
things like resetting the chip, restarting link negotiation, and so
forth.  And if we're bringing down the device, we're about to turn the
chip off and reset it anways.  So if we cancel a pending work event,
that's fine here.

Some drivers were working around this deadlock by using a msleep()
polling loop of some sort, and those cases are converted to instead
use cancel_{delayed_}work_sync() as well.

Signed-off-by: David S. Miller <davem@davemloft.net>
2008-06-12 02:22:02 -07:00
..
asix.c net/usb: add support for Apple USB Ethernet Adapter 2008-05-22 06:19:30 -04:00
catc.c misc drivers/net endianness noise 2008-05-21 16:55:59 -07:00
cdc_ether.c Move usbnet.h and rndis_host.h to include/linux/usb 2008-01-31 19:27:00 -08:00
cdc_subset.c USB: build fix 2008-05-20 14:14:15 -07:00
dm9601.c Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 2008-04-02 22:35:23 -07:00
gl620a.c Move usbnet.h and rndis_host.h to include/linux/usb 2008-01-31 19:27:00 -08:00
kaweth.c net: Eliminate flush_scheduled_work() calls while RTNL is held. 2008-06-12 02:22:02 -07:00
kawethfw.h Move USB network drivers to drivers/net/usb. 2007-05-09 21:31:55 -04:00
Kconfig usb net: asix does not really need 10/100mbit 2008-03-28 22:07:23 -04:00
Makefile Move USB network drivers to drivers/net/usb. 2007-05-09 21:31:55 -04:00
mcs7830.c Move usbnet.h and rndis_host.h to include/linux/usb 2008-01-31 19:27:00 -08:00
net1080.c Move usbnet.h and rndis_host.h to include/linux/usb 2008-01-31 19:27:00 -08:00
pegasus.c drivers/net/usb/pegasus.c: remove in_atomic() check 2008-03-28 21:52:25 -04:00
pegasus.h Move USB network drivers to drivers/net/usb. 2007-05-09 21:31:55 -04:00
plusb.c Move usbnet.h and rndis_host.h to include/linux/usb 2008-01-31 19:27:00 -08:00
rndis_host.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 2008-05-26 10:14:02 -07:00
rtl8150.c USB: Fix cut-and-paste error in rtl8150.c 2008-03-24 22:26:15 -07:00
usbnet.c Move usbnet.h and rndis_host.h to include/linux/usb 2008-01-31 19:27:00 -08:00
zaurus.c Move usbnet.h and rndis_host.h to include/linux/usb 2008-01-31 19:27:00 -08:00