diff options
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/dummy.c | 6 | ||||
-rw-r--r-- | drivers/net/ethernet/emulex/benet/be_main.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/igb/igb_main.c | 5 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/marvell/mvneta.c | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/marvell/sky2.c | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/neterion/vxge/vxge-main.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/nvidia/forcedeth.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/realtek/8139too.c | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/tile/tilepro.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/via/via-rhine.c | 3 | ||||
-rw-r--r-- | drivers/net/ifb.c | 5 | ||||
-rw-r--r-- | drivers/net/loopback.c | 6 | ||||
-rw-r--r-- | drivers/net/macvlan.c | 7 | ||||
-rw-r--r-- | drivers/net/nlmon.c | 8 | ||||
-rw-r--r-- | drivers/net/team/team.c | 6 | ||||
-rw-r--r-- | drivers/net/team/team_mode_loadbalance.c | 9 | ||||
-rw-r--r-- | drivers/net/veth.c | 8 | ||||
-rw-r--r-- | drivers/net/virtio_net.c | 7 | ||||
-rw-r--r-- | drivers/net/vxlan.c | 8 | ||||
-rw-r--r-- | drivers/net/xen-netfront.c | 6 |
21 files changed, 108 insertions, 1 deletions
diff --git a/drivers/net/dummy.c b/drivers/net/dummy.c index b710c6b2d659..bd8f84b0b894 100644 --- a/drivers/net/dummy.c +++ b/drivers/net/dummy.c | |||
@@ -88,10 +88,16 @@ static netdev_tx_t dummy_xmit(struct sk_buff *skb, struct net_device *dev) | |||
88 | 88 | ||
89 | static int dummy_dev_init(struct net_device *dev) | 89 | static int dummy_dev_init(struct net_device *dev) |
90 | { | 90 | { |
91 | int i; | ||
91 | dev->dstats = alloc_percpu(struct pcpu_dstats); | 92 | dev->dstats = alloc_percpu(struct pcpu_dstats); |
92 | if (!dev->dstats) | 93 | if (!dev->dstats) |
93 | return -ENOMEM; | 94 | return -ENOMEM; |
94 | 95 | ||
96 | for_each_possible_cpu(i) { | ||
97 | struct pcpu_dstats *dstats; | ||
98 | dstats = per_cpu_ptr(dev->dstats, i); | ||
99 | u64_stats_init(&dstats->syncp); | ||
100 | } | ||
95 | return 0; | 101 | return 0; |
96 | } | 102 | } |
97 | 103 | ||
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c index cb2bb6fccbc8..eaecaadfa8c5 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c | |||
@@ -2148,6 +2148,9 @@ static int be_tx_qs_create(struct be_adapter *adapter) | |||
2148 | if (status) | 2148 | if (status) |
2149 | return status; | 2149 | return status; |
2150 | 2150 | ||
2151 | u64_stats_init(&txo->stats.sync); | ||
2152 | u64_stats_init(&txo->stats.sync_compl); | ||
2153 | |||
2151 | /* If num_evt_qs is less than num_tx_qs, then more than | 2154 | /* If num_evt_qs is less than num_tx_qs, then more than |
2152 | * one txq share an eq | 2155 | * one txq share an eq |
2153 | */ | 2156 | */ |
@@ -2209,6 +2212,7 @@ static int be_rx_cqs_create(struct be_adapter *adapter) | |||
2209 | if (rc) | 2212 | if (rc) |
2210 | return rc; | 2213 | return rc; |
2211 | 2214 | ||
2215 | u64_stats_init(&rxo->stats.sync); | ||
2212 | eq = &adapter->eq_obj[i % adapter->num_evt_qs].q; | 2216 | eq = &adapter->eq_obj[i % adapter->num_evt_qs].q; |
2213 | rc = be_cmd_cq_create(adapter, cq, eq, false, 3); | 2217 | rc = be_cmd_cq_create(adapter, cq, eq, false, 3); |
2214 | if (rc) | 2218 | if (rc) |
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index 2ac14bdd5fbb..025e5f4b7481 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c | |||
@@ -1224,6 +1224,9 @@ static int igb_alloc_q_vector(struct igb_adapter *adapter, | |||
1224 | ring->count = adapter->tx_ring_count; | 1224 | ring->count = adapter->tx_ring_count; |
1225 | ring->queue_index = txr_idx; | 1225 | ring->queue_index = txr_idx; |
1226 | 1226 | ||
1227 | u64_stats_init(&ring->tx_syncp); | ||
1228 | u64_stats_init(&ring->tx_syncp2); | ||
1229 | |||
1227 | /* assign ring to adapter */ | 1230 | /* assign ring to adapter */ |
1228 | adapter->tx_ring[txr_idx] = ring; | 1231 | adapter->tx_ring[txr_idx] = ring; |
1229 | 1232 | ||
@@ -1257,6 +1260,8 @@ static int igb_alloc_q_vector(struct igb_adapter *adapter, | |||
1257 | ring->count = adapter->rx_ring_count; | 1260 | ring->count = adapter->rx_ring_count; |
1258 | ring->queue_index = rxr_idx; | 1261 | ring->queue_index = rxr_idx; |
1259 | 1262 | ||
1263 | u64_stats_init(&ring->rx_syncp); | ||
1264 | |||
1260 | /* assign ring to adapter */ | 1265 | /* assign ring to adapter */ |
1261 | adapter->rx_ring[rxr_idx] = ring; | 1266 | adapter->rx_ring[rxr_idx] = ring; |
1262 | } | 1267 | } |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index 0066f0aefbfa..0c55079ebee3 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | |||
@@ -5085,6 +5085,8 @@ int ixgbe_setup_tx_resources(struct ixgbe_ring *tx_ring) | |||
5085 | if (!tx_ring->tx_buffer_info) | 5085 | if (!tx_ring->tx_buffer_info) |
5086 | goto err; | 5086 | goto err; |
5087 | 5087 | ||
5088 | u64_stats_init(&tx_ring->syncp); | ||
5089 | |||
5088 | /* round up to nearest 4K */ | 5090 | /* round up to nearest 4K */ |
5089 | tx_ring->size = tx_ring->count * sizeof(union ixgbe_adv_tx_desc); | 5091 | tx_ring->size = tx_ring->count * sizeof(union ixgbe_adv_tx_desc); |
5090 | tx_ring->size = ALIGN(tx_ring->size, 4096); | 5092 | tx_ring->size = ALIGN(tx_ring->size, 4096); |
@@ -5167,6 +5169,8 @@ int ixgbe_setup_rx_resources(struct ixgbe_ring *rx_ring) | |||
5167 | if (!rx_ring->rx_buffer_info) | 5169 | if (!rx_ring->rx_buffer_info) |
5168 | goto err; | 5170 | goto err; |
5169 | 5171 | ||
5172 | u64_stats_init(&rx_ring->syncp); | ||
5173 | |||
5170 | /* Round up to nearest 4K */ | 5174 | /* Round up to nearest 4K */ |
5171 | rx_ring->size = rx_ring->count * sizeof(union ixgbe_adv_rx_desc); | 5175 | rx_ring->size = rx_ring->count * sizeof(union ixgbe_adv_rx_desc); |
5172 | rx_ring->size = ALIGN(rx_ring->size, 4096); | 5176 | rx_ring->size = ALIGN(rx_ring->size, 4096); |
diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c index 7d99e695a110..b8e232b4ea2d 100644 --- a/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c | |||
@@ -2792,6 +2792,9 @@ static int mvneta_probe(struct platform_device *pdev) | |||
2792 | 2792 | ||
2793 | pp = netdev_priv(dev); | 2793 | pp = netdev_priv(dev); |
2794 | 2794 | ||
2795 | u64_stats_init(&pp->tx_stats.syncp); | ||
2796 | u64_stats_init(&pp->rx_stats.syncp); | ||
2797 | |||
2795 | pp->weight = MVNETA_RX_POLL_WEIGHT; | 2798 | pp->weight = MVNETA_RX_POLL_WEIGHT; |
2796 | pp->phy_node = phy_node; | 2799 | pp->phy_node = phy_node; |
2797 | pp->phy_interface = phy_mode; | 2800 | pp->phy_interface = phy_mode; |
diff --git a/drivers/net/ethernet/marvell/sky2.c b/drivers/net/ethernet/marvell/sky2.c index a7df981d2123..43aa7acd84a6 100644 --- a/drivers/net/ethernet/marvell/sky2.c +++ b/drivers/net/ethernet/marvell/sky2.c | |||
@@ -4763,6 +4763,9 @@ static struct net_device *sky2_init_netdev(struct sky2_hw *hw, unsigned port, | |||
4763 | sky2->hw = hw; | 4763 | sky2->hw = hw; |
4764 | sky2->msg_enable = netif_msg_init(debug, default_msg); | 4764 | sky2->msg_enable = netif_msg_init(debug, default_msg); |
4765 | 4765 | ||
4766 | u64_stats_init(&sky2->tx_stats.syncp); | ||
4767 | u64_stats_init(&sky2->rx_stats.syncp); | ||
4768 | |||
4766 | /* Auto speed and flow control */ | 4769 | /* Auto speed and flow control */ |
4767 | sky2->flags = SKY2_FLAG_AUTO_SPEED | SKY2_FLAG_AUTO_PAUSE; | 4770 | sky2->flags = SKY2_FLAG_AUTO_SPEED | SKY2_FLAG_AUTO_PAUSE; |
4768 | if (hw->chip_id != CHIP_ID_YUKON_XL) | 4771 | if (hw->chip_id != CHIP_ID_YUKON_XL) |
diff --git a/drivers/net/ethernet/neterion/vxge/vxge-main.c b/drivers/net/ethernet/neterion/vxge/vxge-main.c index 8614eeb7de81..f9876ea8c8bf 100644 --- a/drivers/net/ethernet/neterion/vxge/vxge-main.c +++ b/drivers/net/ethernet/neterion/vxge/vxge-main.c | |||
@@ -2072,6 +2072,10 @@ static int vxge_open_vpaths(struct vxgedev *vdev) | |||
2072 | vdev->config.tx_steering_type; | 2072 | vdev->config.tx_steering_type; |
2073 | vpath->fifo.ndev = vdev->ndev; | 2073 | vpath->fifo.ndev = vdev->ndev; |
2074 | vpath->fifo.pdev = vdev->pdev; | 2074 | vpath->fifo.pdev = vdev->pdev; |
2075 | |||
2076 | u64_stats_init(&vpath->fifo.stats.syncp); | ||
2077 | u64_stats_init(&vpath->ring.stats.syncp); | ||
2078 | |||
2075 | if (vdev->config.tx_steering_type) | 2079 | if (vdev->config.tx_steering_type) |
2076 | vpath->fifo.txq = | 2080 | vpath->fifo.txq = |
2077 | netdev_get_tx_queue(vdev->ndev, i); | 2081 | netdev_get_tx_queue(vdev->ndev, i); |
diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c index 098b96dad66f..2d045be4b5cf 100644 --- a/drivers/net/ethernet/nvidia/forcedeth.c +++ b/drivers/net/ethernet/nvidia/forcedeth.c | |||
@@ -5619,6 +5619,8 @@ static int nv_probe(struct pci_dev *pci_dev, const struct pci_device_id *id) | |||
5619 | spin_lock_init(&np->lock); | 5619 | spin_lock_init(&np->lock); |
5620 | spin_lock_init(&np->hwstats_lock); | 5620 | spin_lock_init(&np->hwstats_lock); |
5621 | SET_NETDEV_DEV(dev, &pci_dev->dev); | 5621 | SET_NETDEV_DEV(dev, &pci_dev->dev); |
5622 | u64_stats_init(&np->swstats_rx_syncp); | ||
5623 | u64_stats_init(&np->swstats_tx_syncp); | ||
5622 | 5624 | ||
5623 | init_timer(&np->oom_kick); | 5625 | init_timer(&np->oom_kick); |
5624 | np->oom_kick.data = (unsigned long) dev; | 5626 | np->oom_kick.data = (unsigned long) dev; |
diff --git a/drivers/net/ethernet/realtek/8139too.c b/drivers/net/ethernet/realtek/8139too.c index 50a92104dd0a..da5972eefdd2 100644 --- a/drivers/net/ethernet/realtek/8139too.c +++ b/drivers/net/ethernet/realtek/8139too.c | |||
@@ -790,6 +790,9 @@ static struct net_device *rtl8139_init_board(struct pci_dev *pdev) | |||
790 | 790 | ||
791 | pci_set_master (pdev); | 791 | pci_set_master (pdev); |
792 | 792 | ||
793 | u64_stats_init(&tp->rx_stats.syncp); | ||
794 | u64_stats_init(&tp->tx_stats.syncp); | ||
795 | |||
793 | retry: | 796 | retry: |
794 | /* PIO bar register comes first. */ | 797 | /* PIO bar register comes first. */ |
795 | bar = !use_io; | 798 | bar = !use_io; |
diff --git a/drivers/net/ethernet/tile/tilepro.c b/drivers/net/ethernet/tile/tilepro.c index 106be47716e7..edb2e12a0fe2 100644 --- a/drivers/net/ethernet/tile/tilepro.c +++ b/drivers/net/ethernet/tile/tilepro.c | |||
@@ -1008,6 +1008,8 @@ static void tile_net_register(void *dev_ptr) | |||
1008 | info->egress_timer.data = (long)info; | 1008 | info->egress_timer.data = (long)info; |
1009 | info->egress_timer.function = tile_net_handle_egress_timer; | 1009 | info->egress_timer.function = tile_net_handle_egress_timer; |
1010 | 1010 | ||
1011 | u64_stats_init(&info->stats.syncp); | ||
1012 | |||
1011 | priv->cpu[my_cpu] = info; | 1013 | priv->cpu[my_cpu] = info; |
1012 | 1014 | ||
1013 | /* | 1015 | /* |
diff --git a/drivers/net/ethernet/via/via-rhine.c b/drivers/net/ethernet/via/via-rhine.c index 4a7293ed95e9..cce6c4bc556a 100644 --- a/drivers/net/ethernet/via/via-rhine.c +++ b/drivers/net/ethernet/via/via-rhine.c | |||
@@ -987,6 +987,9 @@ static int rhine_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
987 | 987 | ||
988 | rp->base = ioaddr; | 988 | rp->base = ioaddr; |
989 | 989 | ||
990 | u64_stats_init(&rp->tx_stats.syncp); | ||
991 | u64_stats_init(&rp->rx_stats.syncp); | ||
992 | |||
990 | /* Get chip registers into a sane state */ | 993 | /* Get chip registers into a sane state */ |
991 | rhine_power_init(dev); | 994 | rhine_power_init(dev); |
992 | rhine_hw_init(dev, pioaddr); | 995 | rhine_hw_init(dev, pioaddr); |
diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c index a3bed28197d2..c14d39bf32d0 100644 --- a/drivers/net/ifb.c +++ b/drivers/net/ifb.c | |||
@@ -265,6 +265,7 @@ MODULE_PARM_DESC(numifbs, "Number of ifb devices"); | |||
265 | static int __init ifb_init_one(int index) | 265 | static int __init ifb_init_one(int index) |
266 | { | 266 | { |
267 | struct net_device *dev_ifb; | 267 | struct net_device *dev_ifb; |
268 | struct ifb_private *dp; | ||
268 | int err; | 269 | int err; |
269 | 270 | ||
270 | dev_ifb = alloc_netdev(sizeof(struct ifb_private), | 271 | dev_ifb = alloc_netdev(sizeof(struct ifb_private), |
@@ -273,6 +274,10 @@ static int __init ifb_init_one(int index) | |||
273 | if (!dev_ifb) | 274 | if (!dev_ifb) |
274 | return -ENOMEM; | 275 | return -ENOMEM; |
275 | 276 | ||
277 | dp = netdev_priv(dev_ifb); | ||
278 | u64_stats_init(&dp->rsync); | ||
279 | u64_stats_init(&dp->tsync); | ||
280 | |||
276 | dev_ifb->rtnl_link_ops = &ifb_link_ops; | 281 | dev_ifb->rtnl_link_ops = &ifb_link_ops; |
277 | err = register_netdevice(dev_ifb); | 282 | err = register_netdevice(dev_ifb); |
278 | if (err < 0) | 283 | if (err < 0) |
diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c index a17d85a331f1..ac24c27b4b2d 100644 --- a/drivers/net/loopback.c +++ b/drivers/net/loopback.c | |||
@@ -137,10 +137,16 @@ static const struct ethtool_ops loopback_ethtool_ops = { | |||
137 | 137 | ||
138 | static int loopback_dev_init(struct net_device *dev) | 138 | static int loopback_dev_init(struct net_device *dev) |
139 | { | 139 | { |
140 | int i; | ||
140 | dev->lstats = alloc_percpu(struct pcpu_lstats); | 141 | dev->lstats = alloc_percpu(struct pcpu_lstats); |
141 | if (!dev->lstats) | 142 | if (!dev->lstats) |
142 | return -ENOMEM; | 143 | return -ENOMEM; |
143 | 144 | ||
145 | for_each_possible_cpu(i) { | ||
146 | struct pcpu_lstats *lb_stats; | ||
147 | lb_stats = per_cpu_ptr(dev->lstats, i); | ||
148 | u64_stats_init(&lb_stats->syncp); | ||
149 | } | ||
144 | return 0; | 150 | return 0; |
145 | } | 151 | } |
146 | 152 | ||
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index af4aaa5893ff..acf93798dc67 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c | |||
@@ -534,6 +534,7 @@ static int macvlan_init(struct net_device *dev) | |||
534 | { | 534 | { |
535 | struct macvlan_dev *vlan = netdev_priv(dev); | 535 | struct macvlan_dev *vlan = netdev_priv(dev); |
536 | const struct net_device *lowerdev = vlan->lowerdev; | 536 | const struct net_device *lowerdev = vlan->lowerdev; |
537 | int i; | ||
537 | 538 | ||
538 | dev->state = (dev->state & ~MACVLAN_STATE_MASK) | | 539 | dev->state = (dev->state & ~MACVLAN_STATE_MASK) | |
539 | (lowerdev->state & MACVLAN_STATE_MASK); | 540 | (lowerdev->state & MACVLAN_STATE_MASK); |
@@ -549,6 +550,12 @@ static int macvlan_init(struct net_device *dev) | |||
549 | if (!vlan->pcpu_stats) | 550 | if (!vlan->pcpu_stats) |
550 | return -ENOMEM; | 551 | return -ENOMEM; |
551 | 552 | ||
553 | for_each_possible_cpu(i) { | ||
554 | struct macvlan_pcpu_stats *mvlstats; | ||
555 | mvlstats = per_cpu_ptr(vlan->pcpu_stats, i); | ||
556 | u64_stats_init(&mvlstats->syncp); | ||
557 | } | ||
558 | |||
552 | return 0; | 559 | return 0; |
553 | } | 560 | } |
554 | 561 | ||
diff --git a/drivers/net/nlmon.c b/drivers/net/nlmon.c index b57ce5f48962..d2bb12bfabd5 100644 --- a/drivers/net/nlmon.c +++ b/drivers/net/nlmon.c | |||
@@ -47,8 +47,16 @@ static int nlmon_change_mtu(struct net_device *dev, int new_mtu) | |||
47 | 47 | ||
48 | static int nlmon_dev_init(struct net_device *dev) | 48 | static int nlmon_dev_init(struct net_device *dev) |
49 | { | 49 | { |
50 | int i; | ||
51 | |||
50 | dev->lstats = alloc_percpu(struct pcpu_lstats); | 52 | dev->lstats = alloc_percpu(struct pcpu_lstats); |
51 | 53 | ||
54 | for_each_possible_cpu(i) { | ||
55 | struct pcpu_lstats *nlmstats; | ||
56 | nlmstats = per_cpu_ptr(dev->lstats, i); | ||
57 | u64_stats_init(&nlmstats->syncp); | ||
58 | } | ||
59 | |||
52 | return dev->lstats == NULL ? -ENOMEM : 0; | 60 | return dev->lstats == NULL ? -ENOMEM : 0; |
53 | } | 61 | } |
54 | 62 | ||
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c index 50e43e64d51d..6574eb8766f9 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c | |||
@@ -1540,6 +1540,12 @@ static int team_init(struct net_device *dev) | |||
1540 | if (!team->pcpu_stats) | 1540 | if (!team->pcpu_stats) |
1541 | return -ENOMEM; | 1541 | return -ENOMEM; |
1542 | 1542 | ||
1543 | for_each_possible_cpu(i) { | ||
1544 | struct team_pcpu_stats *team_stats; | ||
1545 | team_stats = per_cpu_ptr(team->pcpu_stats, i); | ||
1546 | u64_stats_init(&team_stats->syncp); | ||
1547 | } | ||
1548 | |||
1543 | for (i = 0; i < TEAM_PORT_HASHENTRIES; i++) | 1549 | for (i = 0; i < TEAM_PORT_HASHENTRIES; i++) |
1544 | INIT_HLIST_HEAD(&team->en_port_hlist[i]); | 1550 | INIT_HLIST_HEAD(&team->en_port_hlist[i]); |
1545 | INIT_LIST_HEAD(&team->port_list); | 1551 | INIT_LIST_HEAD(&team->port_list); |
diff --git a/drivers/net/team/team_mode_loadbalance.c b/drivers/net/team/team_mode_loadbalance.c index 829a9cd2b4da..d671fc3ac5ac 100644 --- a/drivers/net/team/team_mode_loadbalance.c +++ b/drivers/net/team/team_mode_loadbalance.c | |||
@@ -570,7 +570,7 @@ static int lb_init(struct team *team) | |||
570 | { | 570 | { |
571 | struct lb_priv *lb_priv = get_lb_priv(team); | 571 | struct lb_priv *lb_priv = get_lb_priv(team); |
572 | lb_select_tx_port_func_t *func; | 572 | lb_select_tx_port_func_t *func; |
573 | int err; | 573 | int i, err; |
574 | 574 | ||
575 | /* set default tx port selector */ | 575 | /* set default tx port selector */ |
576 | func = lb_select_tx_port_get_func("hash"); | 576 | func = lb_select_tx_port_get_func("hash"); |
@@ -588,6 +588,13 @@ static int lb_init(struct team *team) | |||
588 | goto err_alloc_pcpu_stats; | 588 | goto err_alloc_pcpu_stats; |
589 | } | 589 | } |
590 | 590 | ||
591 | for_each_possible_cpu(i) { | ||
592 | struct lb_pcpu_stats *team_lb_stats; | ||
593 | team_lb_stats = per_cpu_ptr(lb_priv->pcpu_stats, i); | ||
594 | u64_stats_init(&team_lb_stats->syncp); | ||
595 | } | ||
596 | |||
597 | |||
591 | INIT_DELAYED_WORK(&lb_priv->ex->stats.refresh_dw, lb_stats_refresh); | 598 | INIT_DELAYED_WORK(&lb_priv->ex->stats.refresh_dw, lb_stats_refresh); |
592 | 599 | ||
593 | err = team_options_register(team, lb_options, ARRAY_SIZE(lb_options)); | 600 | err = team_options_register(team, lb_options, ARRAY_SIZE(lb_options)); |
diff --git a/drivers/net/veth.c b/drivers/net/veth.c index b24db7acbf12..2ec2041b62d4 100644 --- a/drivers/net/veth.c +++ b/drivers/net/veth.c | |||
@@ -235,10 +235,18 @@ static int veth_change_mtu(struct net_device *dev, int new_mtu) | |||
235 | 235 | ||
236 | static int veth_dev_init(struct net_device *dev) | 236 | static int veth_dev_init(struct net_device *dev) |
237 | { | 237 | { |
238 | int i; | ||
239 | |||
238 | dev->vstats = alloc_percpu(struct pcpu_vstats); | 240 | dev->vstats = alloc_percpu(struct pcpu_vstats); |
239 | if (!dev->vstats) | 241 | if (!dev->vstats) |
240 | return -ENOMEM; | 242 | return -ENOMEM; |
241 | 243 | ||
244 | for_each_possible_cpu(i) { | ||
245 | struct pcpu_vstats *veth_stats; | ||
246 | veth_stats = per_cpu_ptr(dev->vstats, i); | ||
247 | u64_stats_init(&veth_stats->syncp); | ||
248 | } | ||
249 | |||
242 | return 0; | 250 | return 0; |
243 | } | 251 | } |
244 | 252 | ||
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 01f4eb5c8b78..bf7c734259ad 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c | |||
@@ -1576,6 +1576,13 @@ static int virtnet_probe(struct virtio_device *vdev) | |||
1576 | if (vi->stats == NULL) | 1576 | if (vi->stats == NULL) |
1577 | goto free; | 1577 | goto free; |
1578 | 1578 | ||
1579 | for_each_possible_cpu(i) { | ||
1580 | struct virtnet_stats *virtnet_stats; | ||
1581 | virtnet_stats = per_cpu_ptr(vi->stats, i); | ||
1582 | u64_stats_init(&virtnet_stats->tx_syncp); | ||
1583 | u64_stats_init(&virtnet_stats->rx_syncp); | ||
1584 | } | ||
1585 | |||
1579 | mutex_init(&vi->config_lock); | 1586 | mutex_init(&vi->config_lock); |
1580 | vi->config_enable = true; | 1587 | vi->config_enable = true; |
1581 | INIT_WORK(&vi->config_work, virtnet_config_changed_work); | 1588 | INIT_WORK(&vi->config_work, virtnet_config_changed_work); |
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index 78df8f39e57c..0358c07f7669 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c | |||
@@ -1880,11 +1880,19 @@ static int vxlan_init(struct net_device *dev) | |||
1880 | struct vxlan_dev *vxlan = netdev_priv(dev); | 1880 | struct vxlan_dev *vxlan = netdev_priv(dev); |
1881 | struct vxlan_net *vn = net_generic(dev_net(dev), vxlan_net_id); | 1881 | struct vxlan_net *vn = net_generic(dev_net(dev), vxlan_net_id); |
1882 | struct vxlan_sock *vs; | 1882 | struct vxlan_sock *vs; |
1883 | int i; | ||
1883 | 1884 | ||
1884 | dev->tstats = alloc_percpu(struct pcpu_tstats); | 1885 | dev->tstats = alloc_percpu(struct pcpu_tstats); |
1885 | if (!dev->tstats) | 1886 | if (!dev->tstats) |
1886 | return -ENOMEM; | 1887 | return -ENOMEM; |
1887 | 1888 | ||
1889 | for_each_possible_cpu(i) { | ||
1890 | struct pcpu_tstats *vxlan_stats; | ||
1891 | vxlan_stats = per_cpu_ptr(dev->tstats, i); | ||
1892 | u64_stats_init(&vxlan_stats->syncp); | ||
1893 | } | ||
1894 | |||
1895 | |||
1888 | spin_lock(&vn->sock_lock); | 1896 | spin_lock(&vn->sock_lock); |
1889 | vs = vxlan_find_sock(dev_net(dev), vxlan->dst_port); | 1897 | vs = vxlan_find_sock(dev_net(dev), vxlan->dst_port); |
1890 | if (vs) { | 1898 | if (vs) { |
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c index dd1011e55cb5..d85e66979711 100644 --- a/drivers/net/xen-netfront.c +++ b/drivers/net/xen-netfront.c | |||
@@ -1340,6 +1340,12 @@ static struct net_device *xennet_create_dev(struct xenbus_device *dev) | |||
1340 | if (np->stats == NULL) | 1340 | if (np->stats == NULL) |
1341 | goto exit; | 1341 | goto exit; |
1342 | 1342 | ||
1343 | for_each_possible_cpu(i) { | ||
1344 | struct netfront_stats *xen_nf_stats; | ||
1345 | xen_nf_stats = per_cpu_ptr(np->stats, i); | ||
1346 | u64_stats_init(&xen_nf_stats->syncp); | ||
1347 | } | ||
1348 | |||
1343 | /* Initialise tx_skbs as a free chain containing every entry. */ | 1349 | /* Initialise tx_skbs as a free chain containing every entry. */ |
1344 | np->tx_skb_freelist = 0; | 1350 | np->tx_skb_freelist = 0; |
1345 | for (i = 0; i < NET_TX_RING_SIZE; i++) { | 1351 | for (i = 0; i < NET_TX_RING_SIZE; i++) { |