Commit 2202576d authored by Jeremy Kerr's avatar Jeremy Kerr Committed by Jakub Kicinski

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: default avatarJeremy Kerr <jk@codeconstruct.com.au>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
Link: https://lore.kernel.org/r/20240607-dstats-v3-3-cc781fe116f7@codeconstruct.com.auSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 94b601bc
...@@ -137,33 +137,6 @@ static void vrf_tx_error(struct net_device *vrf_dev, struct sk_buff *skb) ...@@ -137,33 +137,6 @@ static void vrf_tx_error(struct net_device *vrf_dev, struct sk_buff *skb)
kfree_skb(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) static struct vrf_map *netns_vrf_map(struct net *net)
{ {
struct netns_vrf *nn_vrf = net_generic(net, vrf_net_id); struct netns_vrf *nn_vrf = net_generic(net, vrf_net_id);
...@@ -1201,7 +1174,6 @@ static const struct net_device_ops vrf_netdev_ops = { ...@@ -1201,7 +1174,6 @@ static const struct net_device_ops vrf_netdev_ops = {
.ndo_uninit = vrf_dev_uninit, .ndo_uninit = vrf_dev_uninit,
.ndo_start_xmit = vrf_xmit, .ndo_start_xmit = vrf_xmit,
.ndo_set_mac_address = eth_mac_addr, .ndo_set_mac_address = eth_mac_addr,
.ndo_get_stats64 = vrf_get_stats64,
.ndo_add_slave = vrf_add_slave, .ndo_add_slave = vrf_add_slave,
.ndo_del_slave = vrf_del_slave, .ndo_del_slave = vrf_del_slave,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment