summaryrefslogtreecommitdiff
path: root/drivers/net
diff options
context:
space:
mode:
authorIoana Radulescu <ruxandra.radulescu@freescale.com>2013-08-20 13:22:31 (GMT)
committerRivera Jose-B46482 <German.Rivera@freescale.com>2013-09-05 19:01:08 (GMT)
commite0c9a1f32fc996dce53e73f98f1b6eb496c75bf2 (patch)
tree6e3ba2c6b28b1718ee31e822b94758cae1b12f21 /drivers/net
parent10237e76ea72f661173cdfffc81d7d7a09022833 (diff)
downloadlinux-fsl-qoriq-e0c9a1f32fc996dce53e73f98f1b6eb496c75bf2.tar.xz
dpaa_eth: Fix double counting of dropped frames
When the stack drops an incoming frame it also increments the rx_dropped counter in the netdevice stats. We were also updating this counter inside the driver, resulting in incorrect statistics for dropped frames. Signed-off-by: Ioana Radulescu <ruxandra.radulescu@freescale.com> Change-Id: Ieeef79a277f62cf935c779e0e93b018d4e2b284c Reviewed-on: http://git.am.freescale.net:8181/4441 Tested-by: Review Code-CDREVIEW <CDREVIEW@freescale.com> Reviewed-by: Bucur Madalin-Cristian-B32716 <madalin.bucur@freescale.com> Reviewed-by: Rivera Jose-B46482 <German.Rivera@freescale.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/ethernet/freescale/dpa/dpaa_eth.c15
-rw-r--r--drivers/net/ethernet/freescale/dpa/dpaa_eth_sg.c12
2 files changed, 9 insertions, 18 deletions
diff --git a/drivers/net/ethernet/freescale/dpa/dpaa_eth.c b/drivers/net/ethernet/freescale/dpa/dpaa_eth.c
index 55edca4..f0e7b15 100644
--- a/drivers/net/ethernet/freescale/dpa/dpaa_eth.c
+++ b/drivers/net/ethernet/freescale/dpa/dpaa_eth.c
@@ -1530,14 +1530,13 @@ void __hot _dpa_rx(struct net_device *net_dev,
gro_result_t gro_result;
gro_result = napi_gro_receive(&percpu_priv->napi, skb);
- if (unlikely(gro_result == GRO_DROP)) {
- percpu_priv->stats.rx_dropped++;
+ /* If frame is dropped by the stack, rx_dropped counter is
+ * incremented automatically, so no need for us to update it
+ */
+ if (unlikely(gro_result == GRO_DROP))
goto packet_dropped;
- }
- } else if (unlikely(netif_receive_skb(skb) == NET_RX_DROP)) {
- percpu_priv->stats.rx_dropped++;
+ } else if (unlikely(netif_receive_skb(skb) == NET_RX_DROP))
goto packet_dropped;
- }
percpu_priv->stats.rx_packets++;
percpu_priv->stats.rx_bytes += skb_len;
@@ -2343,9 +2342,7 @@ skb_copied:
goto out;
}
- if (unlikely(netif_rx(skb) != NET_RX_SUCCESS))
- percpu_priv->stats.rx_dropped++;
- else {
+ if (likely(netif_rx(skb) == NET_RX_SUCCESS)) {
percpu_priv->stats.rx_packets++;
percpu_priv->stats.rx_bytes += dpa_fd_length(fd);
}
diff --git a/drivers/net/ethernet/freescale/dpa/dpaa_eth_sg.c b/drivers/net/ethernet/freescale/dpa/dpaa_eth_sg.c
index f93c346..70ee1c1 100644
--- a/drivers/net/ethernet/freescale/dpa/dpaa_eth_sg.c
+++ b/drivers/net/ethernet/freescale/dpa/dpaa_eth_sg.c
@@ -479,17 +479,11 @@ void __hot _dpa_rx(struct net_device *net_dev,
skb_len = skb->len;
if (use_gro) {
- gro_result_t gro_result;
-
- gro_result = napi_gro_receive(&percpu_priv->napi, skb);
- if (unlikely(gro_result == GRO_DROP)) {
- percpu_stats->rx_dropped++;
+ if (unlikely(napi_gro_receive(&percpu_priv->napi, skb) ==
+ GRO_DROP))
goto packet_dropped;
- }
- } else if (unlikely(netif_receive_skb(skb) == NET_RX_DROP)) {
- percpu_stats->rx_dropped++;
+ } else if (unlikely(netif_receive_skb(skb) == NET_RX_DROP))
goto packet_dropped;
- }
percpu_stats->rx_packets++;
percpu_stats->rx_bytes += skb_len;