projects
/
linux-flexiantxendom0-3.2.10.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
net/usbnet: avoid recursive locking in usbnet_stop()
[linux-flexiantxendom0-3.2.10.git]
/
drivers
/
net
/
usb
/
usbnet.c
diff --git
a/drivers/net/usb/usbnet.c
b/drivers/net/usb/usbnet.c
index
fae0fbd
..
81b96e3
100644
(file)
--- a/
drivers/net/usb/usbnet.c
+++ b/
drivers/net/usb/usbnet.c
@@
-589,6
+589,7
@@
static int unlink_urbs (struct usbnet *dev, struct sk_buff_head *q)
entry = (struct skb_data *) skb->cb;
urb = entry->urb;
entry = (struct skb_data *) skb->cb;
urb = entry->urb;
+ spin_unlock_irqrestore(&q->lock, flags);
// during some PM-driven resume scenarios,
// these (async) unlinks complete immediately
retval = usb_unlink_urb (urb);
// during some PM-driven resume scenarios,
// these (async) unlinks complete immediately
retval = usb_unlink_urb (urb);
@@
-596,6
+597,7
@@
static int unlink_urbs (struct usbnet *dev, struct sk_buff_head *q)
netdev_dbg(dev->net, "unlink urb err, %d\n", retval);
else
count++;
netdev_dbg(dev->net, "unlink urb err, %d\n", retval);
else
count++;
+ spin_lock_irqsave(&q->lock, flags);
}
spin_unlock_irqrestore (&q->lock, flags);
return count;
}
spin_unlock_irqrestore (&q->lock, flags);
return count;