diff options
author | Jeremy Kerr <jk@codeconstruct.com.au> | 2024-06-07 13:25:26 +0300 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2024-06-12 05:24:56 +0300 |
commit | 2202576d4631b977a95162a387c0c9fb4ca6819c (patch) | |
tree | eee33772358f869f92af32d164ec187af273dc9c /drivers/net/vrf.c | |
parent | 94b601bc4f8528262b2b83194b7fd3fc2a6da75a (diff) | |
download | linux-2202576d4631b977a95162a387c0c9fb4ca6819c.tar.xz |
net: vrf: move to generic dstat helpers
The vrf driver has its own dstats-to-rtnl_link_stats64 collection, but
we now have a generic implementation for dstats collection, so switch to
this.
In doing so, we fix a minor issue where the (non-percpu)
dev->stats->tx_errors value was never collected into rtnl_link_stats64,
as the generic dev_get_dstats64() consumes the starting values from
dev->stats.
Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au>
Reviewed-by: Simon Horman <horms@kernel.org>
Reviewed-by: David Ahern <dsahern@kernel.org>
Link: https://lore.kernel.org/r/20240607-dstats-v3-3-cc781fe116f7@codeconstruct.com.au
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'drivers/net/vrf.c')
-rw-r--r-- | drivers/net/vrf.c | 28 |
1 files changed, 0 insertions, 28 deletions
diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c index 5018831b2a79..9af316cdd8b3 100644 --- a/drivers/net/vrf.c +++ b/drivers/net/vrf.c @@ -137,33 +137,6 @@ static void vrf_tx_error(struct net_device *vrf_dev, struct sk_buff *skb) kfree_skb(skb); } -static void vrf_get_stats64(struct net_device *dev, - struct rtnl_link_stats64 *stats) -{ - int i; - - for_each_possible_cpu(i) { - const struct pcpu_dstats *dstats; - u64 tbytes, tpkts, tdrops, rbytes, rpkts; - unsigned int start; - - dstats = per_cpu_ptr(dev->dstats, i); - do { - start = u64_stats_fetch_begin(&dstats->syncp); - tbytes = u64_stats_read(&dstats->tx_bytes); - tpkts = u64_stats_read(&dstats->tx_packets); - tdrops = u64_stats_read(&dstats->tx_drops); - rbytes = u64_stats_read(&dstats->rx_bytes); - rpkts = u64_stats_read(&dstats->rx_packets); - } while (u64_stats_fetch_retry(&dstats->syncp, start)); - stats->tx_bytes += tbytes; - stats->tx_packets += tpkts; - stats->tx_dropped += tdrops; - stats->rx_bytes += rbytes; - stats->rx_packets += rpkts; - } -} - static struct vrf_map *netns_vrf_map(struct net *net) { struct netns_vrf *nn_vrf = net_generic(net, vrf_net_id); @@ -1201,7 +1174,6 @@ static const struct net_device_ops vrf_netdev_ops = { .ndo_uninit = vrf_dev_uninit, .ndo_start_xmit = vrf_xmit, .ndo_set_mac_address = eth_mac_addr, - .ndo_get_stats64 = vrf_get_stats64, .ndo_add_slave = vrf_add_slave, .ndo_del_slave = vrf_del_slave, }; |