diff options
author | Li RongQing <roy.qing.li@gmail.com> | 2014-01-04 00:57:59 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-01-04 20:10:24 -0500 |
commit | 8f84985fec10de64a6b4cdfea45f2b0ab8f07c78 (patch) | |
tree | 03d58e9d72384e8066a6232c793b3ee4242668f6 /net/bridge | |
parent | 653864d9dd6ae26d884abfd53420e61e7383b1da (diff) |
net: unify the pcpu_tstats and br_cpu_netstats as one
They are same, so unify them as one, pcpu_sw_netstats.
Define pcpu_sw_netstat in netdevice.h, remove pcpu_tstats
from if_tunnel and remove br_cpu_netstats from br_private.h
Cc: Cong Wang <xiyou.wangcong@gmail.com>
Cc: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: Li RongQing <roy.qing.li@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bridge')
-rw-r--r-- | net/bridge/br_device.c | 10 | ||||
-rw-r--r-- | net/bridge/br_input.c | 2 | ||||
-rw-r--r-- | net/bridge/br_private.h | 10 |
3 files changed, 7 insertions, 15 deletions
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c index f00cfd2a0143..e4401a531afb 100644 --- a/net/bridge/br_device.c +++ b/net/bridge/br_device.c | |||
@@ -32,7 +32,7 @@ netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev) | |||
32 | const unsigned char *dest = skb->data; | 32 | const unsigned char *dest = skb->data; |
33 | struct net_bridge_fdb_entry *dst; | 33 | struct net_bridge_fdb_entry *dst; |
34 | struct net_bridge_mdb_entry *mdst; | 34 | struct net_bridge_mdb_entry *mdst; |
35 | struct br_cpu_netstats *brstats = this_cpu_ptr(br->stats); | 35 | struct pcpu_sw_netstats *brstats = this_cpu_ptr(br->stats); |
36 | u16 vid = 0; | 36 | u16 vid = 0; |
37 | 37 | ||
38 | rcu_read_lock(); | 38 | rcu_read_lock(); |
@@ -90,12 +90,12 @@ static int br_dev_init(struct net_device *dev) | |||
90 | struct net_bridge *br = netdev_priv(dev); | 90 | struct net_bridge *br = netdev_priv(dev); |
91 | int i; | 91 | int i; |
92 | 92 | ||
93 | br->stats = alloc_percpu(struct br_cpu_netstats); | 93 | br->stats = alloc_percpu(struct pcpu_sw_netstats); |
94 | if (!br->stats) | 94 | if (!br->stats) |
95 | return -ENOMEM; | 95 | return -ENOMEM; |
96 | 96 | ||
97 | for_each_possible_cpu(i) { | 97 | for_each_possible_cpu(i) { |
98 | struct br_cpu_netstats *br_dev_stats; | 98 | struct pcpu_sw_netstats *br_dev_stats; |
99 | br_dev_stats = per_cpu_ptr(br->stats, i); | 99 | br_dev_stats = per_cpu_ptr(br->stats, i); |
100 | u64_stats_init(&br_dev_stats->syncp); | 100 | u64_stats_init(&br_dev_stats->syncp); |
101 | } | 101 | } |
@@ -135,12 +135,12 @@ static struct rtnl_link_stats64 *br_get_stats64(struct net_device *dev, | |||
135 | struct rtnl_link_stats64 *stats) | 135 | struct rtnl_link_stats64 *stats) |
136 | { | 136 | { |
137 | struct net_bridge *br = netdev_priv(dev); | 137 | struct net_bridge *br = netdev_priv(dev); |
138 | struct br_cpu_netstats tmp, sum = { 0 }; | 138 | struct pcpu_sw_netstats tmp, sum = { 0 }; |
139 | unsigned int cpu; | 139 | unsigned int cpu; |
140 | 140 | ||
141 | for_each_possible_cpu(cpu) { | 141 | for_each_possible_cpu(cpu) { |
142 | unsigned int start; | 142 | unsigned int start; |
143 | const struct br_cpu_netstats *bstats | 143 | const struct pcpu_sw_netstats *bstats |
144 | = per_cpu_ptr(br->stats, cpu); | 144 | = per_cpu_ptr(br->stats, cpu); |
145 | do { | 145 | do { |
146 | start = u64_stats_fetch_begin_bh(&bstats->syncp); | 146 | start = u64_stats_fetch_begin_bh(&bstats->syncp); |
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c index 7e73c32e205d..bf8dc7d308d6 100644 --- a/net/bridge/br_input.c +++ b/net/bridge/br_input.c | |||
@@ -28,7 +28,7 @@ static int br_pass_frame_up(struct sk_buff *skb) | |||
28 | { | 28 | { |
29 | struct net_device *indev, *brdev = BR_INPUT_SKB_CB(skb)->brdev; | 29 | struct net_device *indev, *brdev = BR_INPUT_SKB_CB(skb)->brdev; |
30 | struct net_bridge *br = netdev_priv(brdev); | 30 | struct net_bridge *br = netdev_priv(brdev); |
31 | struct br_cpu_netstats *brstats = this_cpu_ptr(br->stats); | 31 | struct pcpu_sw_netstats *brstats = this_cpu_ptr(br->stats); |
32 | 32 | ||
33 | u64_stats_update_begin(&brstats->syncp); | 33 | u64_stats_update_begin(&brstats->syncp); |
34 | brstats->rx_packets++; | 34 | brstats->rx_packets++; |
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h index 2e77d923c8ee..3733f152351c 100644 --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h | |||
@@ -210,21 +210,13 @@ static inline struct net_bridge_port *br_port_get_rtnl(const struct net_device * | |||
210 | rtnl_dereference(dev->rx_handler_data) : NULL; | 210 | rtnl_dereference(dev->rx_handler_data) : NULL; |
211 | } | 211 | } |
212 | 212 | ||
213 | struct br_cpu_netstats { | ||
214 | u64 rx_packets; | ||
215 | u64 rx_bytes; | ||
216 | u64 tx_packets; | ||
217 | u64 tx_bytes; | ||
218 | struct u64_stats_sync syncp; | ||
219 | }; | ||
220 | |||
221 | struct net_bridge | 213 | struct net_bridge |
222 | { | 214 | { |
223 | spinlock_t lock; | 215 | spinlock_t lock; |
224 | struct list_head port_list; | 216 | struct list_head port_list; |
225 | struct net_device *dev; | 217 | struct net_device *dev; |
226 | 218 | ||
227 | struct br_cpu_netstats __percpu *stats; | 219 | struct pcpu_sw_netstats __percpu *stats; |
228 | spinlock_t hash_lock; | 220 | spinlock_t hash_lock; |
229 | struct hlist_head hash[BR_HASH_SIZE]; | 221 | struct hlist_head hash[BR_HASH_SIZE]; |
230 | #ifdef CONFIG_BRIDGE_NETFILTER | 222 | #ifdef CONFIG_BRIDGE_NETFILTER |