Commit dcc59d3e authored by James Chapman's avatar James Chapman Committed by David S. Miller

l2tp: l2tp_eth: use per-cpu counters from dev->tstats

l2tp_eth uses old-style dev->stats for fastpath packet/byte
counters. Convert it to use dev->tstats per-cpu counters.
Signed-off-by: default avatarJames Chapman <jchapman@katalix.com>
Signed-off-by: default avatarTom Parkin <tparkin@katalix.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent abe7a1a7
...@@ -72,31 +72,19 @@ static netdev_tx_t l2tp_eth_dev_xmit(struct sk_buff *skb, struct net_device *dev ...@@ -72,31 +72,19 @@ static netdev_tx_t l2tp_eth_dev_xmit(struct sk_buff *skb, struct net_device *dev
unsigned int len = skb->len; unsigned int len = skb->len;
int ret = l2tp_xmit_skb(session, skb); int ret = l2tp_xmit_skb(session, skb);
if (likely(ret == NET_XMIT_SUCCESS)) { if (likely(ret == NET_XMIT_SUCCESS))
DEV_STATS_ADD(dev, tx_bytes, len); dev_sw_netstats_tx_add(dev, 1, len);
DEV_STATS_INC(dev, tx_packets); else
} else {
DEV_STATS_INC(dev, tx_dropped); DEV_STATS_INC(dev, tx_dropped);
}
return NETDEV_TX_OK;
}
static void l2tp_eth_get_stats64(struct net_device *dev, return NETDEV_TX_OK;
struct rtnl_link_stats64 *stats)
{
stats->tx_bytes = DEV_STATS_READ(dev, tx_bytes);
stats->tx_packets = DEV_STATS_READ(dev, tx_packets);
stats->tx_dropped = DEV_STATS_READ(dev, tx_dropped);
stats->rx_bytes = DEV_STATS_READ(dev, rx_bytes);
stats->rx_packets = DEV_STATS_READ(dev, rx_packets);
stats->rx_errors = DEV_STATS_READ(dev, rx_errors);
} }
static const struct net_device_ops l2tp_eth_netdev_ops = { static const struct net_device_ops l2tp_eth_netdev_ops = {
.ndo_init = l2tp_eth_dev_init, .ndo_init = l2tp_eth_dev_init,
.ndo_uninit = l2tp_eth_dev_uninit, .ndo_uninit = l2tp_eth_dev_uninit,
.ndo_start_xmit = l2tp_eth_dev_xmit, .ndo_start_xmit = l2tp_eth_dev_xmit,
.ndo_get_stats64 = l2tp_eth_get_stats64, .ndo_get_stats64 = dev_get_tstats64,
.ndo_set_mac_address = eth_mac_addr, .ndo_set_mac_address = eth_mac_addr,
}; };
...@@ -112,6 +100,7 @@ static void l2tp_eth_dev_setup(struct net_device *dev) ...@@ -112,6 +100,7 @@ static void l2tp_eth_dev_setup(struct net_device *dev)
dev->features |= NETIF_F_LLTX; dev->features |= NETIF_F_LLTX;
dev->netdev_ops = &l2tp_eth_netdev_ops; dev->netdev_ops = &l2tp_eth_netdev_ops;
dev->needs_free_netdev = true; dev->needs_free_netdev = true;
dev->pcpu_stat_type = NETDEV_PCPU_STAT_TSTATS;
} }
static void l2tp_eth_dev_recv(struct l2tp_session *session, struct sk_buff *skb, int data_len) static void l2tp_eth_dev_recv(struct l2tp_session *session, struct sk_buff *skb, int data_len)
...@@ -138,12 +127,11 @@ static void l2tp_eth_dev_recv(struct l2tp_session *session, struct sk_buff *skb, ...@@ -138,12 +127,11 @@ static void l2tp_eth_dev_recv(struct l2tp_session *session, struct sk_buff *skb,
if (!dev) if (!dev)
goto error_rcu; goto error_rcu;
if (dev_forward_skb(dev, skb) == NET_RX_SUCCESS) { if (dev_forward_skb(dev, skb) == NET_RX_SUCCESS)
DEV_STATS_INC(dev, rx_packets); dev_sw_netstats_rx_add(dev, data_len);
DEV_STATS_ADD(dev, rx_bytes, data_len); else
} else {
DEV_STATS_INC(dev, rx_errors); DEV_STATS_INC(dev, rx_errors);
}
rcu_read_unlock(); rcu_read_unlock();
return; return;
......
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