aboutsummaryrefslogtreecommitdiffstats
path: root/net/openvswitch/vport.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/openvswitch/vport.c')
-rw-r--r--net/openvswitch/vport.c14
1 files changed, 3 insertions, 11 deletions
diff --git a/net/openvswitch/vport.c b/net/openvswitch/vport.c
index 208dd9a26dd1..42c0f4a0b78c 100644
--- a/net/openvswitch/vport.c
+++ b/net/openvswitch/vport.c
@@ -121,7 +121,6 @@ struct vport *ovs_vport_alloc(int priv_size, const struct vport_ops *ops,
121{ 121{
122 struct vport *vport; 122 struct vport *vport;
123 size_t alloc_size; 123 size_t alloc_size;
124 int i;
125 124
126 alloc_size = sizeof(struct vport); 125 alloc_size = sizeof(struct vport);
127 if (priv_size) { 126 if (priv_size) {
@@ -139,19 +138,12 @@ struct vport *ovs_vport_alloc(int priv_size, const struct vport_ops *ops,
139 vport->ops = ops; 138 vport->ops = ops;
140 INIT_HLIST_NODE(&vport->dp_hash_node); 139 INIT_HLIST_NODE(&vport->dp_hash_node);
141 140
142 vport->percpu_stats = alloc_percpu(struct pcpu_sw_netstats); 141 vport->percpu_stats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
143 if (!vport->percpu_stats) { 142 if (!vport->percpu_stats) {
144 kfree(vport); 143 kfree(vport);
145 return ERR_PTR(-ENOMEM); 144 return ERR_PTR(-ENOMEM);
146 } 145 }
147 146
148 for_each_possible_cpu(i) {
149 struct pcpu_sw_netstats *vport_stats;
150 vport_stats = per_cpu_ptr(vport->percpu_stats, i);
151 u64_stats_init(&vport_stats->syncp);
152 }
153
154
155 spin_lock_init(&vport->stats_lock); 147 spin_lock_init(&vport->stats_lock);
156 148
157 return vport; 149 return vport;
@@ -285,9 +277,9 @@ void ovs_vport_get_stats(struct vport *vport, struct ovs_vport_stats *stats)
285 percpu_stats = per_cpu_ptr(vport->percpu_stats, i); 277 percpu_stats = per_cpu_ptr(vport->percpu_stats, i);
286 278
287 do { 279 do {
288 start = u64_stats_fetch_begin_bh(&percpu_stats->syncp); 280 start = u64_stats_fetch_begin_irq(&percpu_stats->syncp);
289 local_stats = *percpu_stats; 281 local_stats = *percpu_stats;
290 } while (u64_stats_fetch_retry_bh(&percpu_stats->syncp, start)); 282 } while (u64_stats_fetch_retry_irq(&percpu_stats->syncp, start));
291 283
292 stats->rx_bytes += local_stats.rx_bytes; 284 stats->rx_bytes += local_stats.rx_bytes;
293 stats->rx_packets += local_stats.rx_packets; 285 stats->rx_packets += local_stats.rx_packets;