Files
linux/drivers/net
Sebastian Siewior 68294b023f net/usbnet: avoid recursive locking in usbnet_stop()
commit 4231d47e6f upstream.

|kernel BUG at kernel/rtmutex.c:724!
|[<c029599c>] (rt_spin_lock_slowlock+0x108/0x2bc) from [<c01c2330>] (defer_bh+0x1c/0xb4)
|[<c01c2330>] (defer_bh+0x1c/0xb4) from [<c01c3afc>] (rx_complete+0x14c/0x194)
|[<c01c3afc>] (rx_complete+0x14c/0x194) from [<c01cac88>] (usb_hcd_giveback_urb+0xa0/0xf0)
|[<c01cac88>] (usb_hcd_giveback_urb+0xa0/0xf0) from [<c01e1ff4>] (musb_giveback+0x34/0x40)
|[<c01e1ff4>] (musb_giveback+0x34/0x40) from [<c01e2b1c>] (musb_advance_schedule+0xb4/0x1c0)
|[<c01e2b1c>] (musb_advance_schedule+0xb4/0x1c0) from [<c01e2ca8>] (musb_cleanup_urb.isra.9+0x80/0x8c)
|[<c01e2ca8>] (musb_cleanup_urb.isra.9+0x80/0x8c) from [<c01e2ed0>] (musb_urb_dequeue+0xec/0x108)
|[<c01e2ed0>] (musb_urb_dequeue+0xec/0x108) from [<c01cbb90>] (unlink1+0xbc/0xcc)
|[<c01cbb90>] (unlink1+0xbc/0xcc) from [<c01cc2ec>] (usb_hcd_unlink_urb+0x54/0xa8)
|[<c01cc2ec>] (usb_hcd_unlink_urb+0x54/0xa8) from [<c01c2a84>] (unlink_urbs.isra.17+0x2c/0x58)
|[<c01c2a84>] (unlink_urbs.isra.17+0x2c/0x58) from [<c01c2b44>] (usbnet_terminate_urbs+0x94/0x10c)
|[<c01c2b44>] (usbnet_terminate_urbs+0x94/0x10c) from [<c01c2d68>] (usbnet_stop+0x100/0x15c)
|[<c01c2d68>] (usbnet_stop+0x100/0x15c) from [<c020f718>] (__dev_close_many+0x94/0xc8)

defer_bh() takes the lock which is hold during unlink_urbs(). The safe
walk suggest that the skb will be removed from the list and this is done
by defer_bh() so it seems to be okay to drop the lock here.

Reported-by: Aníbal Almeida Pinto <anibal.pinto@efacec.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Acked-by: Oliver Neukum <oliver@neukum.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2012-03-12 10:33:01 -07:00
..
2011-03-05 10:55:57 +01:00
2010-05-10 05:01:31 -07:00
2012-01-25 17:25:03 -08:00
2011-07-01 17:36:04 -07:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2009-09-01 01:13:50 -07:00
2011-06-13 18:25:19 -04:00
2010-05-10 05:01:31 -07:00
2010-12-21 02:16:08 -08:00
2011-05-31 19:28:32 -07:00
2010-11-09 09:17:56 -08:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2010-06-03 03:18:23 -07:00
2011-04-10 18:55:19 -07:00
2010-11-09 09:17:56 -08:00
2010-07-11 18:15:08 -07:00
2011-03-31 11:26:23 -03:00
2010-08-24 12:24:07 -07:00
2010-09-26 18:34:29 -07:00
2009-04-04 16:51:14 -07:00
2011-04-10 18:55:21 -07:00
2011-03-31 11:26:23 -03:00
2010-12-23 11:44:34 -08:00
2010-07-14 13:40:36 -07:00
2010-05-10 05:01:31 -07:00
2010-09-26 18:34:29 -07:00
2010-09-26 18:34:29 -07:00
2011-05-31 19:28:32 -07:00
2009-11-11 19:22:21 -08:00
2011-05-07 03:08:38 -07:00
2010-12-21 02:16:08 -08:00
2010-12-21 02:16:08 -08:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2011-07-15 16:00:20 -07:00
2011-07-15 16:00:20 -07:00
2011-04-17 17:47:36 -07:00
2011-05-07 22:31:35 -07:00
2011-06-19 16:28:02 -07:00
2011-03-31 11:26:23 -03:00
2010-12-21 02:16:08 -08:00
2011-05-31 19:28:32 -07:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2012-02-29 16:34:31 -08:00
2012-02-29 16:34:31 -08:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2010-11-09 09:17:56 -08:00
2011-03-31 11:26:23 -03:00
2010-11-09 09:17:56 -08:00
2011-03-31 11:26:23 -03:00
2010-05-10 05:01:31 -07:00
2011-08-15 18:31:38 -07:00
2010-09-26 18:34:29 -07:00
2011-03-31 11:26:23 -03:00
2010-06-21 13:40:25 -07:00
2011-03-31 11:26:23 -03:00
2011-05-31 19:28:32 -07:00
2010-07-05 20:08:05 -07:00
2010-05-10 05:01:31 -07:00
2010-12-21 02:16:08 -08:00
2008-03-26 00:18:00 -04:00
2010-12-21 02:16:08 -08:00
2011-08-15 18:31:38 -07:00
2011-04-06 14:35:23 -07:00
2011-03-31 11:26:23 -03:00
2010-09-15 22:06:05 -07:00
2011-03-31 11:26:23 -03:00
2010-09-21 18:04:47 -07:00
2011-03-31 11:26:23 -03:00
2010-07-15 20:46:22 -07:00
2010-05-10 05:01:31 -07:00
2011-04-26 10:22:59 +02:00
2011-04-12 14:50:42 -07:00
2010-10-24 16:25:39 -07:00
2011-06-05 17:02:51 -07:00
2011-03-31 11:26:23 -03:00
2011-05-31 19:28:32 -07:00
2010-12-21 02:16:08 -08:00
2011-03-31 11:26:23 -03:00
2010-05-10 05:01:31 -07:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2011-11-11 09:36:28 -08:00
2011-03-31 11:26:23 -03:00
2010-06-03 03:18:23 -07:00
2011-03-31 11:26:23 -03:00
2012-02-29 16:34:08 -08:00
2011-05-30 11:14:16 +09:30
2010-12-21 02:16:08 -08:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00