tx_pool->num_buffers - 1 :
                                          tx_pool->consumer_index - 1;
                tx_buff = &tx_pool->tx_buff[index];
-               adapter->netdev->stats.tx_packets--;
-               adapter->netdev->stats.tx_bytes -= tx_buff->skb->len;
                adapter->tx_stats_buffers[queue_num].batched_packets--;
                adapter->tx_stats_buffers[queue_num].bytes -=
                                                tx_buff->skb->len;
        }
 out:
        rcu_read_unlock();
-       netdev->stats.tx_dropped += tx_dropped;
-       netdev->stats.tx_bytes += tx_bytes;
-       netdev->stats.tx_packets += tx_bpackets + tx_dpackets;
        adapter->tx_send_failed += tx_send_failed;
        adapter->tx_map_failed += tx_map_failed;
        adapter->tx_stats_buffers[queue_num].batched_packets += tx_bpackets;
        return -ret;
 }
 
+static void ibmvnic_get_stats64(struct net_device *netdev,
+                               struct rtnl_link_stats64 *stats)
+{
+       struct ibmvnic_adapter *adapter = netdev_priv(netdev);
+       int i;
+
+       for (i = 0; i < adapter->req_rx_queues; i++) {
+               stats->rx_packets += adapter->rx_stats_buffers[i].packets;
+               stats->rx_bytes   += adapter->rx_stats_buffers[i].bytes;
+       }
+
+       for (i = 0; i < adapter->req_tx_queues; i++) {
+               stats->tx_packets += adapter->tx_stats_buffers[i].batched_packets;
+               stats->tx_packets += adapter->tx_stats_buffers[i].direct_packets;
+               stats->tx_bytes   += adapter->tx_stats_buffers[i].bytes;
+               stats->tx_dropped += adapter->tx_stats_buffers[i].dropped_packets;
+       }
+}
+
 static void ibmvnic_tx_timeout(struct net_device *dev, unsigned int txqueue)
 {
        struct ibmvnic_adapter *adapter = netdev_priv(dev);
 
                length = skb->len;
                napi_gro_receive(napi, skb); /* send it up */
-               netdev->stats.rx_packets++;
-               netdev->stats.rx_bytes += length;
                adapter->rx_stats_buffers[scrq_num].packets++;
                adapter->rx_stats_buffers[scrq_num].bytes += length;
                frames_processed++;
        .ndo_set_rx_mode        = ibmvnic_set_multi,
        .ndo_set_mac_address    = ibmvnic_set_mac,
        .ndo_validate_addr      = eth_validate_addr,
+       .ndo_get_stats64        = ibmvnic_get_stats64,
        .ndo_tx_timeout         = ibmvnic_tx_timeout,
        .ndo_change_mtu         = ibmvnic_change_mtu,
        .ndo_features_check     = ibmvnic_features_check,