net, vrf: Move dstats structure to core
authorDaniel Borkmann <daniel@iogearbox.net>
Tue, 14 Nov 2023 00:42:13 +0000 (01:42 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 3 Dec 2023 06:33:04 +0000 (07:33 +0100)
[ Upstream commit 79e0c5be8c73a674c92bd4ba77b75f4f8c91d32e ]

Just move struct pcpu_dstats out of the vrf into the core, and streamline
the field names slightly, so they better align with the {t,l}stats ones.

No functional change otherwise. A conversion of the u64s to u64_stats_t
could be done at a separate point in future. This move is needed as we are
moving the {t,l,d}stats allocation/freeing to the core.

Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Reviewed-by: Nikolay Aleksandrov <razor@blackwall.org>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: David Ahern <dsahern@kernel.org>
Link: https://lore.kernel.org/r/20231114004220.6495-2-daniel@iogearbox.net
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
Stable-dep-of: 024ee930cb3c ("bpf: Fix dev's rx stats for bpf_redirect_peer traffic")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/vrf.c
include/linux/netdevice.h

index a3408e4..3654c8b 100644 (file)
@@ -121,22 +121,12 @@ struct net_vrf {
        int                     ifindex;
 };
 
-struct pcpu_dstats {
-       u64                     tx_pkts;
-       u64                     tx_bytes;
-       u64                     tx_drps;
-       u64                     rx_pkts;
-       u64                     rx_bytes;
-       u64                     rx_drps;
-       struct u64_stats_sync   syncp;
-};
-
 static void vrf_rx_stats(struct net_device *dev, int len)
 {
        struct pcpu_dstats *dstats = this_cpu_ptr(dev->dstats);
 
        u64_stats_update_begin(&dstats->syncp);
-       dstats->rx_pkts++;
+       dstats->rx_packets++;
        dstats->rx_bytes += len;
        u64_stats_update_end(&dstats->syncp);
 }
@@ -161,10 +151,10 @@ static void vrf_get_stats64(struct net_device *dev,
                do {
                        start = u64_stats_fetch_begin(&dstats->syncp);
                        tbytes = dstats->tx_bytes;
-                       tpkts = dstats->tx_pkts;
-                       tdrops = dstats->tx_drps;
+                       tpkts = dstats->tx_packets;
+                       tdrops = dstats->tx_drops;
                        rbytes = dstats->rx_bytes;
-                       rpkts = dstats->rx_pkts;
+                       rpkts = dstats->rx_packets;
                } while (u64_stats_fetch_retry(&dstats->syncp, start));
                stats->tx_bytes += tbytes;
                stats->tx_packets += tpkts;
@@ -421,7 +411,7 @@ static int vrf_local_xmit(struct sk_buff *skb, struct net_device *dev,
        if (likely(__netif_rx(skb) == NET_RX_SUCCESS))
                vrf_rx_stats(dev, len);
        else
-               this_cpu_inc(dev->dstats->rx_drps);
+               this_cpu_inc(dev->dstats->rx_drops);
 
        return NETDEV_TX_OK;
 }
@@ -616,11 +606,11 @@ static netdev_tx_t vrf_xmit(struct sk_buff *skb, struct net_device *dev)
                struct pcpu_dstats *dstats = this_cpu_ptr(dev->dstats);
 
                u64_stats_update_begin(&dstats->syncp);
-               dstats->tx_pkts++;
+               dstats->tx_packets++;
                dstats->tx_bytes += len;
                u64_stats_update_end(&dstats->syncp);
        } else {
-               this_cpu_inc(dev->dstats->tx_drps);
+               this_cpu_inc(dev->dstats->tx_drops);
        }
 
        return ret;
index b646609..b76dc6f 100644 (file)
@@ -2725,6 +2725,16 @@ struct pcpu_sw_netstats {
        struct u64_stats_sync   syncp;
 } __aligned(4 * sizeof(u64));
 
+struct pcpu_dstats {
+       u64                     rx_packets;
+       u64                     rx_bytes;
+       u64                     rx_drops;
+       u64                     tx_packets;
+       u64                     tx_bytes;
+       u64                     tx_drops;
+       struct u64_stats_sync   syncp;
+} __aligned(8 * sizeof(u64));
+
 struct pcpu_lstats {
        u64_stats_t packets;
        u64_stats_t bytes;