usbnet: use netif_tx_wake_queue instead of netif_start_queue
authorAlexey Orishko <alexey.orishko@gmail.com>
Wed, 14 Mar 2012 04:00:24 +0000 (04:00 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sat, 17 Mar 2012 05:50:19 +0000 (22:50 -0700)
If host is going to autosuspend function with two interfaces and
if IP packet has arrived in-between of two usbnet_suspend() callbacks,
i.e usbnet_resume() is called in-between, tx data flow is stopped.
When autosuspend timer expires and device is put to autosuspend
again, tx queue is waked up and data can be sent again.
This behavior might be repeated several times in a row.

Tested on Intel/ARM.

Reviewed-by: Sjur Brændeland <sjur.brandeland@stericsson.com>
Tested-by: Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>
Signed-off-by: Alexey Orishko <alexey.orishko@stericsson.com>
Acked-by: Oliver Neukum <oneukum@suse.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/usb/usbnet.c

index 83dcc530618e4205322bcd6b7bba24239daa2ed1..5394b4eb00b017052eb4130dd6e29837c9b63f0f 100644 (file)
@@ -1535,7 +1535,7 @@ int usbnet_resume (struct usb_interface *intf)
 
                if (test_bit(EVENT_DEV_OPEN, &dev->flags)) {
                        if (!(dev->txq.qlen >= TX_QLEN(dev)))
-                               netif_start_queue(dev->net);
+                               netif_tx_wake_all_queues(dev->net);
                        tasklet_schedule (&dev->bh);
                }
        }