usbnet: Resubmit interrupt URB if device is open
Resubmit interrupt URB if device is open. Use a flag set in usbnet_open() to determine this state. Also kill and free interrupt URB in usbnet_disconnect(). [Rebased off git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git] Signed-off-by: Paul Stewart <pstew@chromium.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7833aa05b8
commit
68972efa65
|
@ -736,6 +736,7 @@ int usbnet_open (struct net_device *net)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set_bit(EVENT_DEV_OPEN, &dev->flags);
|
||||||
netif_start_queue (net);
|
netif_start_queue (net);
|
||||||
netif_info(dev, ifup, dev->net,
|
netif_info(dev, ifup, dev->net,
|
||||||
"open: enable queueing (rx %d, tx %d) mtu %d %s framing\n",
|
"open: enable queueing (rx %d, tx %d) mtu %d %s framing\n",
|
||||||
|
@ -1259,6 +1260,9 @@ void usbnet_disconnect (struct usb_interface *intf)
|
||||||
if (dev->driver_info->unbind)
|
if (dev->driver_info->unbind)
|
||||||
dev->driver_info->unbind (dev, intf);
|
dev->driver_info->unbind (dev, intf);
|
||||||
|
|
||||||
|
usb_kill_urb(dev->interrupt);
|
||||||
|
usb_free_urb(dev->interrupt);
|
||||||
|
|
||||||
free_netdev(net);
|
free_netdev(net);
|
||||||
usb_put_dev (xdev);
|
usb_put_dev (xdev);
|
||||||
}
|
}
|
||||||
|
@ -1498,6 +1502,10 @@ int usbnet_resume (struct usb_interface *intf)
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
if (!--dev->suspend_count) {
|
if (!--dev->suspend_count) {
|
||||||
|
/* resume interrupt URBs */
|
||||||
|
if (dev->interrupt && test_bit(EVENT_DEV_OPEN, &dev->flags))
|
||||||
|
usb_submit_urb(dev->interrupt, GFP_NOIO);
|
||||||
|
|
||||||
spin_lock_irq(&dev->txq.lock);
|
spin_lock_irq(&dev->txq.lock);
|
||||||
while ((res = usb_get_from_anchor(&dev->deferred))) {
|
while ((res = usb_get_from_anchor(&dev->deferred))) {
|
||||||
|
|
||||||
|
|
|
@ -68,6 +68,7 @@ struct usbnet {
|
||||||
# define EVENT_RX_PAUSED 5
|
# define EVENT_RX_PAUSED 5
|
||||||
# define EVENT_DEV_WAKING 6
|
# define EVENT_DEV_WAKING 6
|
||||||
# define EVENT_DEV_ASLEEP 7
|
# define EVENT_DEV_ASLEEP 7
|
||||||
|
# define EVENT_DEV_OPEN 8
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline struct usb_driver *driver_of(struct usb_interface *intf)
|
static inline struct usb_driver *driver_of(struct usb_interface *intf)
|
||||||
|
|
Loading…
Reference in New Issue