From: Soohoon Lee <hidden> Date: 2016-06-23 21:32:15
When MTU is changed unlink_urbs() flushes RX Q but mean while usbnet_bh() can fill up the Q at the same time.
Depends on which HCD is down there unlink takes long time then the flush never ends.
Reviewed-by: kmurray@f5.com
@@ -395,8 +395,11 @@ int usbnet_change_mtu (struct net_device *net, int new_mtu)dev->hard_mtu=net->mtu+net->hard_header_len;if(dev->rx_urb_size==old_hard_mtu){dev->rx_urb_size=dev->hard_mtu;-if(dev->rx_urb_size>old_rx_urb_size)+if(dev->rx_urb_size>old_rx_urb_size){+usbnet_pause_rx(dev);usbnet_unlink_rx_urbs(dev);+usbnet_resume_rx(dev);+}}/* max qlen depend on hard_mtu and rx_urb_size */
@@ -1509,6 +1512,7 @@ static void usbnet_bh (unsigned long param)netif_device_present(dev->net)&&netif_carrier_ok(dev->net)&&!timer_pending(&dev->delay)&&+!test_bit(EVENT_RX_PAUSED,&dev->flags)&&!test_bit(EVENT_RX_HALT,&dev->flags)){inttemp=dev->rxq.qlen;
From: Soohoon Lee <hidden> Date: 2016-06-24 00:40:06
When MTU is changed unlink_urbs() flushes RX Q but mean while usbnet_bh() can fill up the Q at the same time.
Depends on which HCD is down there unlink takes long time then the flush never ends.
Signed-off-by: Soohoon Lee <redacted>
Reviewed-by: Kimball Murray <redacted>
@@ -395,8 +395,11 @@ int usbnet_change_mtu (struct net_device *net, int new_mtu)dev->hard_mtu=net->mtu+net->hard_header_len;if(dev->rx_urb_size==old_hard_mtu){dev->rx_urb_size=dev->hard_mtu;-if(dev->rx_urb_size>old_rx_urb_size)+if(dev->rx_urb_size>old_rx_urb_size){+usbnet_pause_rx(dev);usbnet_unlink_rx_urbs(dev);+usbnet_resume_rx(dev);+}}/* max qlen depend on hard_mtu and rx_urb_size */
@@ -1509,6 +1512,7 @@ static void usbnet_bh (unsigned long param)netif_device_present(dev->net)&&netif_carrier_ok(dev->net)&&!timer_pending(&dev->delay)&&+!test_bit(EVENT_RX_PAUSED,&dev->flags)&&!test_bit(EVENT_RX_HALT,&dev->flags)){inttemp=dev->rxq.qlen;
From: David Miller <davem@davemloft.net> Date: 2016-06-28 09:15:07
From: Soohoon Lee <redacted>
Date: Fri, 24 Jun 2016 00:30:16 +0000
When MTU is changed unlink_urbs() flushes RX Q but mean while usbnet_bh() can fill up the Q at the same time.
Depends on which HCD is down there unlink takes long time then the flush never ends.
Signed-off-by: Soohoon Lee <redacted>
Reviewed-by: Kimball Murray <redacted>
This patch is mangled by your email client, the TAB characters have been
converted into spaces.
Please do not resubmit this patah until you can successfully email the
patch to yourself and apply it cleanly.
Also, your subject line should be formatted like:
[PATCH net v2.x] usbnet: ....
Thanks.