.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | #include <linux/module.h> |
---|
2 | 3 | #include <linux/kernel.h> |
---|
3 | 4 | #include <linux/netdevice.h> |
---|
.. | .. |
---|
6 | 7 | #include <linux/if_arp.h> |
---|
7 | 8 | #include <net/rtnetlink.h> |
---|
8 | 9 | |
---|
9 | | -struct pcpu_lstats { |
---|
10 | | - u64 packets; |
---|
11 | | - u64 bytes; |
---|
12 | | - struct u64_stats_sync syncp; |
---|
13 | | -}; |
---|
14 | | - |
---|
15 | 10 | static netdev_tx_t nlmon_xmit(struct sk_buff *skb, struct net_device *dev) |
---|
16 | 11 | { |
---|
17 | | - int len = skb->len; |
---|
18 | | - struct pcpu_lstats *stats = this_cpu_ptr(dev->lstats); |
---|
19 | | - |
---|
20 | | - u64_stats_update_begin(&stats->syncp); |
---|
21 | | - stats->bytes += len; |
---|
22 | | - stats->packets++; |
---|
23 | | - u64_stats_update_end(&stats->syncp); |
---|
| 12 | + dev_lstats_add(dev, skb->len); |
---|
24 | 13 | |
---|
25 | 14 | dev_kfree_skb(skb); |
---|
26 | 15 | |
---|
.. | .. |
---|
61 | 50 | static void |
---|
62 | 51 | nlmon_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats) |
---|
63 | 52 | { |
---|
64 | | - int i; |
---|
65 | | - u64 bytes = 0, packets = 0; |
---|
| 53 | + u64 packets, bytes; |
---|
66 | 54 | |
---|
67 | | - for_each_possible_cpu(i) { |
---|
68 | | - const struct pcpu_lstats *nl_stats; |
---|
69 | | - u64 tbytes, tpackets; |
---|
70 | | - unsigned int start; |
---|
71 | | - |
---|
72 | | - nl_stats = per_cpu_ptr(dev->lstats, i); |
---|
73 | | - |
---|
74 | | - do { |
---|
75 | | - start = u64_stats_fetch_begin_irq(&nl_stats->syncp); |
---|
76 | | - tbytes = nl_stats->bytes; |
---|
77 | | - tpackets = nl_stats->packets; |
---|
78 | | - } while (u64_stats_fetch_retry_irq(&nl_stats->syncp, start)); |
---|
79 | | - |
---|
80 | | - packets += tpackets; |
---|
81 | | - bytes += tbytes; |
---|
82 | | - } |
---|
| 55 | + dev_lstats_read(dev, &packets, &bytes); |
---|
83 | 56 | |
---|
84 | 57 | stats->rx_packets = packets; |
---|
85 | 58 | stats->tx_packets = 0; |
---|