usb: gadget: NCM: differentiate consumed packets from dropped packets
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>
This commit is contained in:
committed by
Felipe Balbi
parent
18d4689643
commit
38314e59a9
@@ -998,7 +998,7 @@ static struct sk_buff *package_for_tx(struct f_ncm *ncm)
|
|||||||
/* Merge the skbs */
|
/* Merge the skbs */
|
||||||
swap(skb2, ncm->skb_tx_data);
|
swap(skb2, ncm->skb_tx_data);
|
||||||
if (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;
|
ncm->skb_tx_data = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1009,7 +1009,7 @@ static struct sk_buff *package_for_tx(struct f_ncm *ncm)
|
|||||||
/* Copy NTB across. */
|
/* Copy NTB across. */
|
||||||
ntb_iter = (void *) skb_put(skb2, ncm->skb_tx_ndp->len);
|
ntb_iter = (void *) skb_put(skb2, ncm->skb_tx_ndp->len);
|
||||||
memcpy(ntb_iter, ncm->skb_tx_ndp->data, 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;
|
ncm->skb_tx_ndp = NULL;
|
||||||
|
|
||||||
/* Insert zero'd datagram. */
|
/* Insert zero'd datagram. */
|
||||||
@@ -1136,7 +1136,7 @@ static struct sk_buff *ncm_wrap_ntb(struct gether *port,
|
|||||||
memset(ntb_data, 0, dgram_pad);
|
memset(ntb_data, 0, dgram_pad);
|
||||||
ntb_data = (void *) skb_put(ncm->skb_tx_data, skb->len);
|
ntb_data = (void *) skb_put(ncm->skb_tx_data, skb->len);
|
||||||
memcpy(ntb_data, skb->data, skb->len);
|
memcpy(ntb_data, skb->data, skb->len);
|
||||||
dev_kfree_skb_any(skb);
|
dev_consume_skb_any(skb);
|
||||||
skb = NULL;
|
skb = NULL;
|
||||||
|
|
||||||
} else if (ncm->skb_tx_data && ncm->timer_force_tx) {
|
} 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_len > 2 * (opts->dgram_item_len * 2));
|
||||||
} while (ndp_index);
|
} while (ndp_index);
|
||||||
|
|
||||||
dev_kfree_skb_any(skb);
|
dev_consume_skb_any(skb);
|
||||||
|
|
||||||
VDBG(port->func.config->cdev,
|
VDBG(port->func.config->cdev,
|
||||||
"Parsed NTB with %d frames\n", dgram_counter);
|
"Parsed NTB with %d frames\n", dgram_counter);
|
||||||
|
|||||||
@@ -455,16 +455,17 @@ static void tx_complete(struct usb_ep *ep, struct usb_request *req)
|
|||||||
/* FALLTHROUGH */
|
/* FALLTHROUGH */
|
||||||
case -ECONNRESET: /* unlink */
|
case -ECONNRESET: /* unlink */
|
||||||
case -ESHUTDOWN: /* disconnect etc */
|
case -ESHUTDOWN: /* disconnect etc */
|
||||||
|
dev_kfree_skb_any(skb);
|
||||||
break;
|
break;
|
||||||
case 0:
|
case 0:
|
||||||
dev->net->stats.tx_bytes += skb->len;
|
dev->net->stats.tx_bytes += skb->len;
|
||||||
|
dev_consume_skb_any(skb);
|
||||||
}
|
}
|
||||||
dev->net->stats.tx_packets++;
|
dev->net->stats.tx_packets++;
|
||||||
|
|
||||||
spin_lock(&dev->req_lock);
|
spin_lock(&dev->req_lock);
|
||||||
list_add(&req->list, &dev->tx_reqs);
|
list_add(&req->list, &dev->tx_reqs);
|
||||||
spin_unlock(&dev->req_lock);
|
spin_unlock(&dev->req_lock);
|
||||||
dev_kfree_skb_any(skb);
|
|
||||||
|
|
||||||
atomic_dec(&dev->tx_qlen);
|
atomic_dec(&dev->tx_qlen);
|
||||||
if (netif_carrier_ok(dev->net))
|
if (netif_carrier_ok(dev->net))
|
||||||
|
|||||||
Reference in New Issue
Block a user