Loading drivers/usb/gadget/u_ether.c +28 −32 Original line number Diff line number Diff line Loading @@ -734,8 +734,8 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, int retval; struct usb_request *req = NULL; unsigned long flags; struct usb_ep *in; u16 cdc_filter; struct usb_ep *in = NULL; u16 cdc_filter = 0; bool multi_pkt_xfer = false; spin_lock_irqsave(&dev->lock, flags); Loading @@ -743,9 +743,6 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, in = dev->port_usb->in_ep; cdc_filter = dev->port_usb->cdc_filter; multi_pkt_xfer = dev->port_usb->multi_pkt_xfer; } else { in = NULL; cdc_filter = 0; } spin_unlock_irqrestore(&dev->lock, flags); Loading @@ -754,17 +751,6 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, return NETDEV_TX_OK; } /* Allocate memory for tx_reqs to support multi packet transfer */ spin_lock_irqsave(&dev->req_lock, flags); if (multi_pkt_xfer && !dev->tx_req_bufsize) { retval = alloc_tx_buffer(dev); if (retval < 0) { spin_unlock_irqrestore(&dev->req_lock, flags); return -ENOMEM; } } spin_unlock_irqrestore(&dev->req_lock, flags); /* apply outgoing CDC or RNDIS filters only for ETH packets */ if (!test_bit(RMNET_MODE_LLP_IP, &dev->flags) && !is_promisc(cdc_filter)) { Loading @@ -788,7 +774,33 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, /* ignores USB_CDC_PACKET_TYPE_DIRECTED */ } /* * No buffer copies needed, unless the network stack did it * or the hardware can't use skb buffers or there's not enough * enough space for extra headers we need. */ spin_lock_irqsave(&dev->lock, flags); if (dev->wrap && dev->port_usb) skb = dev->wrap(dev->port_usb, skb); spin_unlock_irqrestore(&dev->lock, flags); if (!skb) { dev->net->stats.tx_dropped++; /* no error code for dropped packets */ return NETDEV_TX_OK; } /* Allocate memory for tx_reqs to support multi packet transfer */ spin_lock_irqsave(&dev->req_lock, flags); if (multi_pkt_xfer && !dev->tx_req_bufsize) { retval = alloc_tx_buffer(dev); if (retval < 0) { spin_unlock_irqrestore(&dev->req_lock, flags); return -ENOMEM; } } /* * this freelist can be empty if an interrupt triggered disconnect() * and reconfigured the gadget (shutting down this queue) after the Loading @@ -814,19 +826,6 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, } spin_unlock_irqrestore(&dev->req_lock, flags); /* no buffer copies needed, unless the network stack did it * or the hardware can't use skb buffers. * or there's not enough space for extra headers we need */ spin_lock_irqsave(&dev->lock, flags); if (dev->wrap) { if (dev->port_usb) skb = dev->wrap(dev->port_usb, skb); if (!skb) { spin_unlock_irqrestore(&dev->lock, flags); goto drop; } } if (multi_pkt_xfer) { Loading @@ -839,7 +838,6 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, dev->header_len); /* Increment req length by header size */ req->length += dev->header_len; spin_unlock_irqrestore(&dev->lock, flags); /* Copy received IP data from SKB */ memcpy(req->buf + req->length, skb->data, skb->len); /* Increment req length by skb data length */ Loading @@ -861,7 +859,6 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, dev->tx_skb_hold_count = 0; spin_unlock_irqrestore(&dev->req_lock, flags); } else { spin_unlock_irqrestore(&dev->lock, flags); length = skb->len; req->buf = skb->data; req->context = skb; Loading Loading @@ -915,7 +912,6 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, dev_kfree_skb_any(skb); else req->length = 0; drop: dev->net->stats.tx_dropped++; spin_lock_irqsave(&dev->req_lock, flags); if (list_empty(&dev->tx_reqs)) Loading Loading
drivers/usb/gadget/u_ether.c +28 −32 Original line number Diff line number Diff line Loading @@ -734,8 +734,8 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, int retval; struct usb_request *req = NULL; unsigned long flags; struct usb_ep *in; u16 cdc_filter; struct usb_ep *in = NULL; u16 cdc_filter = 0; bool multi_pkt_xfer = false; spin_lock_irqsave(&dev->lock, flags); Loading @@ -743,9 +743,6 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, in = dev->port_usb->in_ep; cdc_filter = dev->port_usb->cdc_filter; multi_pkt_xfer = dev->port_usb->multi_pkt_xfer; } else { in = NULL; cdc_filter = 0; } spin_unlock_irqrestore(&dev->lock, flags); Loading @@ -754,17 +751,6 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, return NETDEV_TX_OK; } /* Allocate memory for tx_reqs to support multi packet transfer */ spin_lock_irqsave(&dev->req_lock, flags); if (multi_pkt_xfer && !dev->tx_req_bufsize) { retval = alloc_tx_buffer(dev); if (retval < 0) { spin_unlock_irqrestore(&dev->req_lock, flags); return -ENOMEM; } } spin_unlock_irqrestore(&dev->req_lock, flags); /* apply outgoing CDC or RNDIS filters only for ETH packets */ if (!test_bit(RMNET_MODE_LLP_IP, &dev->flags) && !is_promisc(cdc_filter)) { Loading @@ -788,7 +774,33 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, /* ignores USB_CDC_PACKET_TYPE_DIRECTED */ } /* * No buffer copies needed, unless the network stack did it * or the hardware can't use skb buffers or there's not enough * enough space for extra headers we need. */ spin_lock_irqsave(&dev->lock, flags); if (dev->wrap && dev->port_usb) skb = dev->wrap(dev->port_usb, skb); spin_unlock_irqrestore(&dev->lock, flags); if (!skb) { dev->net->stats.tx_dropped++; /* no error code for dropped packets */ return NETDEV_TX_OK; } /* Allocate memory for tx_reqs to support multi packet transfer */ spin_lock_irqsave(&dev->req_lock, flags); if (multi_pkt_xfer && !dev->tx_req_bufsize) { retval = alloc_tx_buffer(dev); if (retval < 0) { spin_unlock_irqrestore(&dev->req_lock, flags); return -ENOMEM; } } /* * this freelist can be empty if an interrupt triggered disconnect() * and reconfigured the gadget (shutting down this queue) after the Loading @@ -814,19 +826,6 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, } spin_unlock_irqrestore(&dev->req_lock, flags); /* no buffer copies needed, unless the network stack did it * or the hardware can't use skb buffers. * or there's not enough space for extra headers we need */ spin_lock_irqsave(&dev->lock, flags); if (dev->wrap) { if (dev->port_usb) skb = dev->wrap(dev->port_usb, skb); if (!skb) { spin_unlock_irqrestore(&dev->lock, flags); goto drop; } } if (multi_pkt_xfer) { Loading @@ -839,7 +838,6 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, dev->header_len); /* Increment req length by header size */ req->length += dev->header_len; spin_unlock_irqrestore(&dev->lock, flags); /* Copy received IP data from SKB */ memcpy(req->buf + req->length, skb->data, skb->len); /* Increment req length by skb data length */ Loading @@ -861,7 +859,6 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, dev->tx_skb_hold_count = 0; spin_unlock_irqrestore(&dev->req_lock, flags); } else { spin_unlock_irqrestore(&dev->lock, flags); length = skb->len; req->buf = skb->data; req->context = skb; Loading Loading @@ -915,7 +912,6 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, dev_kfree_skb_any(skb); else req->length = 0; drop: dev->net->stats.tx_dropped++; spin_lock_irqsave(&dev->req_lock, flags); if (list_empty(&dev->tx_reqs)) Loading