ChangeSet 1.1119.1.11, 2003/08/06 16:02:01-07:00, [EMAIL PROTECTED]

[PATCH] USB: usbnet, prevent exotic rtnl deadlock

Turns out that when PM is in use, some D3cold resume paths
could have one thread, holding the network lock, deadlock
in flush_scheduled_work() since an event task is waiting
for that same lock.  Fix is to call that later, when the
lock isn't held.


 drivers/usb/net/usbnet.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)


diff -Nru a/drivers/usb/net/usbnet.c b/drivers/usb/net/usbnet.c
--- a/drivers/usb/net/usbnet.c  Fri Aug  8 17:05:07 2003
+++ b/drivers/usb/net/usbnet.c  Fri Aug  8 17:05:07 2003
@@ -2048,8 +2048,11 @@
        dev->wait = 0;
        remove_wait_queue (&unlink_wakeup, &wait); 
 
-       // deferred work (task, timer, softirq) must also stop
-       flush_scheduled_work ();
+       /* deferred work (task, timer, softirq) must also stop.
+        * can't flush_scheduled_work() until we drop rtnl (later),
+        * else workers could deadlock; so make workers a NOP.
+        */
+       dev->flags = 0;
        del_timer_sync (&dev->delay);
        tasklet_kill (&dev->bh);
 
@@ -2487,6 +2490,9 @@
                dev->driver_info->description);
        
        unregister_netdev (dev->net);
+
+       /* we don't hold rtnl here ... */
+       flush_scheduled_work ();
 
        if (dev->driver_info->unbind)
                dev->driver_info->unbind (dev, intf);



-------------------------------------------------------
This SF.Net email sponsored by: Free pre-built ASP.NET sites including
Data Reports, E-commerce, Portals, and Forums are available now.
Download today and enter to win an XBOX or Visual Studio .NET.
http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to