|
@@ -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;
|
|
|
|
|
|
+ spin_unlock_irqrestore(&q->lock, flags);
|
|
|
// 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++;
|
|
|
+ spin_lock_irqsave(&q->lock, flags);
|
|
|
}
|
|
|
spin_unlock_irqrestore (&q->lock, flags);
|
|
|
return count;
|