Skip to content

Commit 624d329

Browse files
rogerqPaolo Abeni
authored andcommitted
net: ethernet: ti: am65-cpsw: Fix RX statistics for XDP_TX and XDP_REDIRECT
We are not using ndev->stats for rx_packets and rx_bytes anymore. Instead, we use per CPU stats which are collated in am65_cpsw_nuss_ndo_get_stats(). Fix RX statistics for XDP_TX and XDP_REDIRECT cases. Fixes: 8acacc4 ("net: ethernet: ti: am65-cpsw: Add minimal XDP support") Signed-off-by: Roger Quadros <[email protected]> Reviewed-by: Jacob Keller <[email protected]> Acked-by: Julien Panis <[email protected]> Reviewed-by: MD Danish Anwar <[email protected]> Signed-off-by: Paolo Abeni <[email protected]>
1 parent 0a50c35 commit 624d329

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

drivers/net/ethernet/ti/am65-cpsw-nuss.c

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -998,7 +998,9 @@ static int am65_cpsw_run_xdp(struct am65_cpsw_common *common,
998998
int desc_idx, int cpu, int *len)
999999
{
10001000
struct am65_cpsw_rx_chn *rx_chn = &common->rx_chns;
1001+
struct am65_cpsw_ndev_priv *ndev_priv;
10011002
struct net_device *ndev = port->ndev;
1003+
struct am65_cpsw_ndev_stats *stats;
10021004
int ret = AM65_CPSW_XDP_CONSUMED;
10031005
struct am65_cpsw_tx_chn *tx_chn;
10041006
struct netdev_queue *netif_txq;
@@ -1016,6 +1018,9 @@ static int am65_cpsw_run_xdp(struct am65_cpsw_common *common,
10161018
/* XDP prog might have changed packet data and boundaries */
10171019
*len = xdp->data_end - xdp->data;
10181020

1021+
ndev_priv = netdev_priv(ndev);
1022+
stats = this_cpu_ptr(ndev_priv->stats);
1023+
10191024
switch (act) {
10201025
case XDP_PASS:
10211026
ret = AM65_CPSW_XDP_PASS;
@@ -1035,16 +1040,20 @@ static int am65_cpsw_run_xdp(struct am65_cpsw_common *common,
10351040
if (err)
10361041
goto drop;
10371042

1038-
ndev->stats.rx_bytes += *len;
1039-
ndev->stats.rx_packets++;
1043+
u64_stats_update_begin(&stats->syncp);
1044+
stats->rx_bytes += *len;
1045+
stats->rx_packets++;
1046+
u64_stats_update_end(&stats->syncp);
10401047
ret = AM65_CPSW_XDP_CONSUMED;
10411048
goto out;
10421049
case XDP_REDIRECT:
10431050
if (unlikely(xdp_do_redirect(ndev, xdp, prog)))
10441051
goto drop;
10451052

1046-
ndev->stats.rx_bytes += *len;
1047-
ndev->stats.rx_packets++;
1053+
u64_stats_update_begin(&stats->syncp);
1054+
stats->rx_bytes += *len;
1055+
stats->rx_packets++;
1056+
u64_stats_update_end(&stats->syncp);
10481057
ret = AM65_CPSW_XDP_REDIRECT;
10491058
goto out;
10501059
default:

0 commit comments

Comments
 (0)