]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
usb: gadget: NCM: differentiate consumed packets from dropped packets
authorTorsten Polle <tpolle@de.adit-jv.com>
Mon, 19 Sep 2016 08:05:42 +0000 (10:05 +0200)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Thu, 3 Nov 2016 08:38:39 +0000 (10:38 +0200)
dev_kfree_skb_any() is used to free packets that are dropped by the
network stack. Therefore the function should not be used for packets
that have been successfully processed by the network stack. Instead
dev_consume_skb_any() has to be used for such consumed packets.

This separation helps to identify dropped packets.

Signed-off-by: Torsten Polle <tpolle@de.adit-jv.com>
Signed-off-by: Harish Jenny K N <harish_kandiga@mentor.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
drivers/usb/gadget/function/f_ncm.c
drivers/usb/gadget/function/u_ether.c

index b6771ad2485a8895538e66e4d1419dbe19c3fa58..e8008fa35e1e69c354ba35c510b1019e7a560c44 100644 (file)
@@ -998,7 +998,7 @@ static struct sk_buff *package_for_tx(struct f_ncm *ncm)
        /* Merge the skbs */
        swap(skb2, ncm->skb_tx_data);
        if (ncm->skb_tx_data) {
-               dev_kfree_skb_any(ncm->skb_tx_data);
+               dev_consume_skb_any(ncm->skb_tx_data);
                ncm->skb_tx_data = NULL;
        }
 
@@ -1009,7 +1009,7 @@ static struct sk_buff *package_for_tx(struct f_ncm *ncm)
        /* Copy NTB across. */
        ntb_iter = (void *) skb_put(skb2, ncm->skb_tx_ndp->len);
        memcpy(ntb_iter, ncm->skb_tx_ndp->data, ncm->skb_tx_ndp->len);
-       dev_kfree_skb_any(ncm->skb_tx_ndp);
+       dev_consume_skb_any(ncm->skb_tx_ndp);
        ncm->skb_tx_ndp = NULL;
 
        /* Insert zero'd datagram. */
@@ -1136,7 +1136,7 @@ static struct sk_buff *ncm_wrap_ntb(struct gether *port,
                memset(ntb_data, 0, dgram_pad);
                ntb_data = (void *) skb_put(ncm->skb_tx_data, skb->len);
                memcpy(ntb_data, skb->data, skb->len);
-               dev_kfree_skb_any(skb);
+               dev_consume_skb_any(skb);
                skb = NULL;
 
        } else if (ncm->skb_tx_data && ncm->timer_force_tx) {
@@ -1332,7 +1332,7 @@ static int ncm_unwrap_ntb(struct gether *port,
                } while (ndp_len > 2 * (opts->dgram_item_len * 2));
        } while (ndp_index);
 
-       dev_kfree_skb_any(skb);
+       dev_consume_skb_any(skb);
 
        VDBG(port->func.config->cdev,
             "Parsed NTB with %d frames\n", dgram_counter);
index 5aeb6d90307559ef7b23e7724a4666b6057c2195..f4a640216913b6082d0757f384bb64b19fd10a22 100644 (file)
@@ -455,16 +455,17 @@ static void tx_complete(struct usb_ep *ep, struct usb_request *req)
                /* FALLTHROUGH */
        case -ECONNRESET:               /* unlink */
        case -ESHUTDOWN:                /* disconnect etc */
+               dev_kfree_skb_any(skb);
                break;
        case 0:
                dev->net->stats.tx_bytes += skb->len;
+               dev_consume_skb_any(skb);
        }
        dev->net->stats.tx_packets++;
 
        spin_lock(&dev->req_lock);
        list_add(&req->list, &dev->tx_reqs);
        spin_unlock(&dev->req_lock);
-       dev_kfree_skb_any(skb);
 
        atomic_dec(&dev->tx_qlen);
        if (netif_carrier_ok(dev->net))