diff options
Diffstat (limited to 'net/openvswitch/vport.c')
| -rw-r--r-- | net/openvswitch/vport.c | 14 |
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; |
