diff options
author | Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com> | 2013-01-28 16:31:00 (GMT) |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-01-30 20:07:13 (GMT) |
commit | 795ce734380b729e076131528e485e98a580d3e8 (patch) | |
tree | 284732162985f9911b4c52999b22edddf9383cf2 /drivers | |
parent | 47e19af9a791d8862cdffb754cc2347b6389d487 (diff) | |
download | linux-fsl-qoriq-795ce734380b729e076131528e485e98a580d3e8.tar.xz |
wil6210: Count Tx statistics on Tx completion
This allows to account for Tx errors
Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/ath/wil6210/txrx.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/wil6210/txrx.c b/drivers/net/wireless/ath/wil6210/txrx.c index f3b523b..e7ea538 100644 --- a/drivers/net/wireless/ath/wil6210/txrx.c +++ b/drivers/net/wireless/ath/wil6210/txrx.c @@ -752,8 +752,7 @@ netdev_tx_t wil_start_xmit(struct sk_buff *skb, struct net_device *ndev) } switch (rc) { case 0: - ndev->stats.tx_packets++; - ndev->stats.tx_bytes += skb->len; + /* statistics will be updated on the tx_complete */ dev_kfree_skb_any(skb); return NETDEV_TX_OK; case -ENOMEM: @@ -777,6 +776,7 @@ netdev_tx_t wil_start_xmit(struct sk_buff *skb, struct net_device *ndev) */ void wil_tx_complete(struct wil6210_priv *wil, int ringid) { + struct net_device *ndev = wil_to_ndev(wil); struct device *dev = wil_to_dev(wil); struct vring *vring = &wil->vring_tx[ringid]; @@ -804,6 +804,13 @@ void wil_tx_complete(struct wil6210_priv *wil, int ringid) pa = d->dma.addr_low | ((u64)d->dma.addr_high << 32); skb = vring->ctx[vring->swtail]; if (skb) { + if (d->dma.error == 0) { + ndev->stats.tx_packets++; + ndev->stats.tx_bytes += skb->len; + } else { + ndev->stats.tx_errors++; + } + dma_unmap_single(dev, pa, d->dma.length, DMA_TO_DEVICE); dev_kfree_skb_any(skb); vring->ctx[vring->swtail] = NULL; |