hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/net/vsockmon.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 #include <linux/module.h>
23 #include <linux/kernel.h>
34 #include <linux/if_arp.h>
....@@ -10,12 +11,6 @@
1011 /* Virtio transport max packet size plus header */
1112 #define DEFAULT_MTU (VIRTIO_VSOCK_MAX_PKT_BUF_SIZE + \
1213 sizeof(struct af_vsockmon_hdr))
13
-
14
-struct pcpu_lstats {
15
- u64 rx_packets;
16
- u64 rx_bytes;
17
- struct u64_stats_sync syncp;
18
-};
1914
2015 static int vsockmon_dev_init(struct net_device *dev)
2116 {
....@@ -52,13 +47,7 @@
5247
5348 static netdev_tx_t vsockmon_xmit(struct sk_buff *skb, struct net_device *dev)
5449 {
55
- int len = skb->len;
56
- struct pcpu_lstats *stats = this_cpu_ptr(dev->lstats);
57
-
58
- u64_stats_update_begin(&stats->syncp);
59
- stats->rx_bytes += len;
60
- stats->rx_packets++;
61
- u64_stats_update_end(&stats->syncp);
50
+ dev_lstats_add(dev, skb->len);
6251
6352 dev_kfree_skb(skb);
6453
....@@ -68,30 +57,9 @@
6857 static void
6958 vsockmon_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
7059 {
71
- int i;
72
- u64 bytes = 0, packets = 0;
60
+ dev_lstats_read(dev, &stats->rx_packets, &stats->rx_bytes);
7361
74
- for_each_possible_cpu(i) {
75
- const struct pcpu_lstats *vstats;
76
- u64 tbytes, tpackets;
77
- unsigned int start;
78
-
79
- vstats = per_cpu_ptr(dev->lstats, i);
80
-
81
- do {
82
- start = u64_stats_fetch_begin_irq(&vstats->syncp);
83
- tbytes = vstats->rx_bytes;
84
- tpackets = vstats->rx_packets;
85
- } while (u64_stats_fetch_retry_irq(&vstats->syncp, start));
86
-
87
- packets += tpackets;
88
- bytes += tbytes;
89
- }
90
-
91
- stats->rx_packets = packets;
9262 stats->tx_packets = 0;
93
-
94
- stats->rx_bytes = bytes;
9563 stats->tx_bytes = 0;
9664 }
9765