mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-08-28 09:22:08 +00:00
netdevsim: migrate to dstats stats collection
Replace custom statistics tracking with the kernel's dstats infrastructure to simplify code and improve consistency with other network drivers. This change: - Sets dev->pcpu_stat_type = NETDEV_PCPU_STAT_DSTATS for automatic automatic allocation and deallocation. - Removes manual stats fields and their update - Replaces custom nsim_get_stats64() with dev_get_stats() - Uses dev_dstats_tx_add() and dev_dstats_tx_dropped() helpers - Eliminates the need for manual synchronization primitives The dstats framework provides the same functionality with less code. Suggested-by: Jakub Kicinski <kuba@kernel.org> Reviewed-by: Joe Damato <joe@dama.to> Signed-off-by: Breno Leitao <leitao@debian.org> Link: https://patch.msgid.link/20250618-netdevsim_stat-v4-1-19fe0d35e28e@debian.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
c3ee72ded0
commit
f9e2511d80
@ -93,19 +93,14 @@ static netdev_tx_t nsim_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
hrtimer_start(&rq->napi_timer, us_to_ktime(5), HRTIMER_MODE_REL);
|
||||
|
||||
rcu_read_unlock();
|
||||
u64_stats_update_begin(&ns->syncp);
|
||||
ns->tx_packets++;
|
||||
ns->tx_bytes += len;
|
||||
u64_stats_update_end(&ns->syncp);
|
||||
dev_dstats_tx_add(dev, skb->len);
|
||||
return NETDEV_TX_OK;
|
||||
|
||||
out_drop_free:
|
||||
dev_kfree_skb(skb);
|
||||
out_drop_cnt:
|
||||
rcu_read_unlock();
|
||||
u64_stats_update_begin(&ns->syncp);
|
||||
ns->tx_dropped++;
|
||||
u64_stats_update_end(&ns->syncp);
|
||||
dev_dstats_tx_dropped(dev);
|
||||
return NETDEV_TX_OK;
|
||||
}
|
||||
|
||||
@ -126,20 +121,6 @@ static int nsim_change_mtu(struct net_device *dev, int new_mtu)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
nsim_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
|
||||
{
|
||||
struct netdevsim *ns = netdev_priv(dev);
|
||||
unsigned int start;
|
||||
|
||||
do {
|
||||
start = u64_stats_fetch_begin(&ns->syncp);
|
||||
stats->tx_bytes = ns->tx_bytes;
|
||||
stats->tx_packets = ns->tx_packets;
|
||||
stats->tx_dropped = ns->tx_dropped;
|
||||
} while (u64_stats_fetch_retry(&ns->syncp, start));
|
||||
}
|
||||
|
||||
static int
|
||||
nsim_setup_tc_block_cb(enum tc_setup_type type, void *type_data, void *cb_priv)
|
||||
{
|
||||
@ -556,7 +537,6 @@ static const struct net_device_ops nsim_netdev_ops = {
|
||||
.ndo_set_mac_address = eth_mac_addr,
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
.ndo_change_mtu = nsim_change_mtu,
|
||||
.ndo_get_stats64 = nsim_get_stats64,
|
||||
.ndo_set_vf_mac = nsim_set_vf_mac,
|
||||
.ndo_set_vf_vlan = nsim_set_vf_vlan,
|
||||
.ndo_set_vf_rate = nsim_set_vf_rate,
|
||||
@ -580,7 +560,6 @@ static const struct net_device_ops nsim_vf_netdev_ops = {
|
||||
.ndo_set_mac_address = eth_mac_addr,
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
.ndo_change_mtu = nsim_change_mtu,
|
||||
.ndo_get_stats64 = nsim_get_stats64,
|
||||
.ndo_setup_tc = nsim_setup_tc,
|
||||
.ndo_set_features = nsim_set_features,
|
||||
};
|
||||
@ -594,7 +573,7 @@ static void nsim_get_queue_stats_rx(struct net_device *dev, int idx,
|
||||
struct rtnl_link_stats64 rtstats = {};
|
||||
|
||||
if (!idx)
|
||||
nsim_get_stats64(dev, &rtstats);
|
||||
dev_get_stats(dev, &rtstats);
|
||||
|
||||
stats->packets = rtstats.rx_packets - !!rtstats.rx_packets;
|
||||
stats->bytes = rtstats.rx_bytes;
|
||||
@ -606,7 +585,7 @@ static void nsim_get_queue_stats_tx(struct net_device *dev, int idx,
|
||||
struct rtnl_link_stats64 rtstats = {};
|
||||
|
||||
if (!idx)
|
||||
nsim_get_stats64(dev, &rtstats);
|
||||
dev_get_stats(dev, &rtstats);
|
||||
|
||||
stats->packets = rtstats.tx_packets - !!rtstats.tx_packets;
|
||||
stats->bytes = rtstats.tx_bytes;
|
||||
@ -618,7 +597,7 @@ static void nsim_get_base_stats(struct net_device *dev,
|
||||
{
|
||||
struct rtnl_link_stats64 rtstats = {};
|
||||
|
||||
nsim_get_stats64(dev, &rtstats);
|
||||
dev_get_stats(dev, &rtstats);
|
||||
|
||||
rx->packets = !!rtstats.rx_packets;
|
||||
rx->bytes = 0;
|
||||
@ -890,6 +869,7 @@ static void nsim_setup(struct net_device *dev)
|
||||
NETIF_F_HW_CSUM |
|
||||
NETIF_F_LRO |
|
||||
NETIF_F_TSO;
|
||||
dev->pcpu_stat_type = NETDEV_PCPU_STAT_DSTATS;
|
||||
dev->max_mtu = ETH_MAX_MTU;
|
||||
dev->xdp_features = NETDEV_XDP_ACT_HW_OFFLOAD;
|
||||
}
|
||||
@ -1022,7 +1002,6 @@ nsim_create(struct nsim_dev *nsim_dev, struct nsim_dev_port *nsim_dev_port)
|
||||
dev_net_set(dev, nsim_dev_net(nsim_dev));
|
||||
ns = netdev_priv(dev);
|
||||
ns->netdev = dev;
|
||||
u64_stats_init(&ns->syncp);
|
||||
ns->nsim_dev = nsim_dev;
|
||||
ns->nsim_dev_port = nsim_dev_port;
|
||||
ns->nsim_bus_dev = nsim_dev->nsim_bus_dev;
|
||||
|
@ -108,11 +108,6 @@ struct netdevsim {
|
||||
|
||||
int rq_reset_mode;
|
||||
|
||||
u64 tx_packets;
|
||||
u64 tx_bytes;
|
||||
u64 tx_dropped;
|
||||
struct u64_stats_sync syncp;
|
||||
|
||||
struct nsim_bus_dev *nsim_bus_dev;
|
||||
|
||||
struct bpf_prog *bpf_offloaded;
|
||||
|
Loading…
Reference in New Issue
Block a user