summaryrefslogtreecommitdiffstats
path: root/drivers/net/usb
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-05-22 11:28:16 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2019-05-22 11:28:16 -0400
commitf75b6f303bd80249a56cce9028954b4f731270e3 (patch)
tree3efcb909852964382b7b34fc4942a2eee0284a8c /drivers/net/usb
parent86f9e56d08852961a1b9e062d59b71491d8c793a (diff)
parentad70411a978d1e6e97b1e341a7bde9a79af0c93d (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking fixes from David Miller: 1) Clear up some recent tipc regressions because of registration ordering. Fix from Junwei Hu. 2) tipc's TLV_SET() can read past the end of the supplied buffer during the copy. From Chris Packham. 3) ptp example program doesn't match the kernel, from Richard Cochran. 4) Outgoing message type fix in qrtr, from Bjorn Andersson. 5) Flow control regression in stmmac, from Tan Tee Min. 6) Fix inband autonegotiation in phylink, from Russell King. 7) Fix sk_bound_dev_if handling in rawv6_bind(), from Mike Manning. 8) Fix usbnet crash after disconnect, from Kloetzke Jan. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (21 commits) usbnet: fix kernel crash after disconnect selftests: fib_rule_tests: use pre-defined DEV_ADDR net-next: net: Fix typos in ip-sysctl.txt ipv6: Consider sk_bound_dev_if when binding a raw socket to an address net: phylink: ensure inband AN works correctly usbnet: ipheth: fix racing condition net: stmmac: dma channel control register need to be init first net: stmmac: fix ethtool flow control not able to get/set net: qrtr: Fix message type of outgoing packets networking: : fix typos in code comments ptp: Fix example program to match kernel. fddi: fix typos in code comments selftests: fib_rule_tests: enable forwarding before ipv4 from/iif test selftests: fib_rule_tests: fix local IPv4 address typo tipc: Avoid copying bytes beyond the supplied data 2/2] net: xilinx_emaclite: use readx_poll_timeout() in mdio wait function 1/2] net: axienet: use readx_poll_timeout() in mdio wait function vlan: Mark expected switch fall-through macvlan: Mark expected switch fall-through net/mlx4_en: ethtool, Remove unsupported SFP EEPROM high pages query ...
Diffstat (limited to 'drivers/net/usb')
-rw-r--r--drivers/net/usb/ipheth.c3
-rw-r--r--drivers/net/usb/usbnet.c6
2 files changed, 8 insertions, 1 deletions
diff --git a/drivers/net/usb/ipheth.c b/drivers/net/usb/ipheth.c
index c247aed2dceb..8c01fbf68a89 100644
--- a/drivers/net/usb/ipheth.c
+++ b/drivers/net/usb/ipheth.c
@@ -383,17 +383,18 @@ static int ipheth_tx(struct sk_buff *skb, struct net_device *net)
383 dev); 383 dev);
384 dev->tx_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; 384 dev->tx_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
385 385
386 netif_stop_queue(net);
386 retval = usb_submit_urb(dev->tx_urb, GFP_ATOMIC); 387 retval = usb_submit_urb(dev->tx_urb, GFP_ATOMIC);
387 if (retval) { 388 if (retval) {
388 dev_err(&dev->intf->dev, "%s: usb_submit_urb: %d\n", 389 dev_err(&dev->intf->dev, "%s: usb_submit_urb: %d\n",
389 __func__, retval); 390 __func__, retval);
390 dev->net->stats.tx_errors++; 391 dev->net->stats.tx_errors++;
391 dev_kfree_skb_any(skb); 392 dev_kfree_skb_any(skb);
393 netif_wake_queue(net);
392 } else { 394 } else {
393 dev->net->stats.tx_packets++; 395 dev->net->stats.tx_packets++;
394 dev->net->stats.tx_bytes += skb->len; 396 dev->net->stats.tx_bytes += skb->len;
395 dev_consume_skb_any(skb); 397 dev_consume_skb_any(skb);
396 netif_stop_queue(net);
397 } 398 }
398 399
399 return NETDEV_TX_OK; 400 return NETDEV_TX_OK;
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
index 66f0e0f51711..72514c46b478 100644
--- a/drivers/net/usb/usbnet.c
+++ b/drivers/net/usb/usbnet.c
@@ -494,6 +494,7 @@ static int rx_submit (struct usbnet *dev, struct urb *urb, gfp_t flags)
494 494
495 if (netif_running (dev->net) && 495 if (netif_running (dev->net) &&
496 netif_device_present (dev->net) && 496 netif_device_present (dev->net) &&
497 test_bit(EVENT_DEV_OPEN, &dev->flags) &&
497 !test_bit (EVENT_RX_HALT, &dev->flags) && 498 !test_bit (EVENT_RX_HALT, &dev->flags) &&
498 !test_bit (EVENT_DEV_ASLEEP, &dev->flags)) { 499 !test_bit (EVENT_DEV_ASLEEP, &dev->flags)) {
499 switch (retval = usb_submit_urb (urb, GFP_ATOMIC)) { 500 switch (retval = usb_submit_urb (urb, GFP_ATOMIC)) {
@@ -1419,6 +1420,11 @@ netdev_tx_t usbnet_start_xmit (struct sk_buff *skb,
1419 spin_unlock_irqrestore(&dev->txq.lock, flags); 1420 spin_unlock_irqrestore(&dev->txq.lock, flags);
1420 goto drop; 1421 goto drop;
1421 } 1422 }
1423 if (netif_queue_stopped(net)) {
1424 usb_autopm_put_interface_async(dev->intf);
1425 spin_unlock_irqrestore(&dev->txq.lock, flags);
1426 goto drop;
1427 }
1422 1428
1423#ifdef CONFIG_PM 1429#ifdef CONFIG_PM
1424 /* if this triggers the device is still a sleep */ 1430 /* if this triggers the device is still a sleep */