On Wed, 14 Jun 2017 00:10:28 +0100 Salil Mehta <salil.me...@huawei.com> wrote:
> +hns3_nic_get_stats64(struct net_device *ndev, struct rtnl_link_stats64 > *stats) > +{ > + struct hns3_nic_priv *priv = netdev_priv(ndev); > + int queue_num = priv->ae_handle->kinfo.num_tqps; > + u64 tx_bytes = 0; > + u64 rx_bytes = 0; > + u64 tx_pkts = 0; > + u64 rx_pkts = 0; > + int idx = 0; unnecessary initialization > + > + for (idx = 0; idx < queue_num; idx++) { > + tx_bytes += priv->ring_data[idx].ring->stats.tx_bytes; > + tx_pkts += priv->ring_data[idx].ring->stats.tx_pkts; > + rx_bytes += > + priv->ring_data[idx + queue_num].ring->stats.rx_bytes; > + rx_pkts += priv->ring_data[idx + queue_num].ring->stats.rx_pkts; > + } > + Since rx_bytes and other statistics are 64 bit values. You need to use something to ensure that updates to these values are atomic on 32 bit platforms. The most common way to handle this is with the u64_stats_sync mechanism which is a nop on 64 bit architectures, and uses a seqcount to do updates on 32 bit CPU's.