aboutsummaryrefslogtreecommitdiffstats
path: root/net/bridge
diff options
context:
space:
mode:
authorLi RongQing <roy.qing.li@gmail.com>2014-01-04 00:57:59 -0500
committerDavid S. Miller <davem@davemloft.net>2014-01-04 20:10:24 -0500
commit8f84985fec10de64a6b4cdfea45f2b0ab8f07c78 (patch)
tree03d58e9d72384e8066a6232c793b3ee4242668f6 /net/bridge
parent653864d9dd6ae26d884abfd53420e61e7383b1da (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.c10
-rw-r--r--net/bridge/br_input.c2
-rw-r--r--net/bridge/br_private.h10
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
213struct 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
221struct net_bridge 213struct 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