diff options
Diffstat (limited to 'drivers')
| -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++) { |
