vmxnet3: convert to 64 bit stats interface
stephen hemminger [Wed, 8 Jun 2011 14:53:57 +0000 (14:53 +0000)]
Convert vmxnet3 driver to 64 bit statistics interface.
This driver was already counting packet per queue in a 64 bit value so not
a huge change. Eliminate unused old net_device_stats structure.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: Scott J. Goldman <scottjg@vmware.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

drivers/net/vmxnet3/vmxnet3_drv.c
drivers/net/vmxnet3/vmxnet3_ethtool.c
drivers/net/vmxnet3/vmxnet3_int.h

index fa6e2ac..cea1b3c 100644 (file)
@@ -2864,7 +2864,7 @@ vmxnet3_probe_device(struct pci_dev *pdev,
                .ndo_set_mac_address = vmxnet3_set_mac_addr,
                .ndo_change_mtu = vmxnet3_change_mtu,
                .ndo_set_features = vmxnet3_set_features,
-               .ndo_get_stats = vmxnet3_get_stats,
+               .ndo_get_stats64 = vmxnet3_get_stats64,
                .ndo_tx_timeout = vmxnet3_tx_timeout,
                .ndo_set_multicast_list = vmxnet3_set_mc,
                .ndo_vlan_rx_register = vmxnet3_vlan_rx_register,
index dc959fe..bba7c15 100644 (file)
@@ -113,15 +113,15 @@ vmxnet3_global_stats[] = {
 };
 
 
-struct net_device_stats *
-vmxnet3_get_stats(struct net_device *netdev)
+struct rtnl_link_stats64 *
+vmxnet3_get_stats64(struct net_device *netdev,
+                  struct rtnl_link_stats64 *stats)
 {
        struct vmxnet3_adapter *adapter;
        struct vmxnet3_tq_driver_stats *drvTxStats;
        struct vmxnet3_rq_driver_stats *drvRxStats;
        struct UPT1_TxStats *devTxStats;
        struct UPT1_RxStats *devRxStats;
-       struct net_device_stats *net_stats = &netdev->stats;
        unsigned long flags;
        int i;
 
@@ -132,36 +132,36 @@ vmxnet3_get_stats(struct net_device *netdev)
        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_STATS);
        spin_unlock_irqrestore(&adapter->cmd_lock, flags);
 
-       memset(net_stats, 0, sizeof(*net_stats));
        for (i = 0; i < adapter->num_tx_queues; i++) {
                devTxStats = &adapter->tqd_start[i].stats;
                drvTxStats = &adapter->tx_queue[i].stats;
-               net_stats->tx_packets += devTxStats->ucastPktsTxOK +
-                                       devTxStats->mcastPktsTxOK +
-                                       devTxStats->bcastPktsTxOK;
-               net_stats->tx_bytes += devTxStats->ucastBytesTxOK +
-                                     devTxStats->mcastBytesTxOK +
-                                     devTxStats->bcastBytesTxOK;
-               net_stats->tx_errors += devTxStats->pktsTxError;
-               net_stats->tx_dropped += drvTxStats->drop_total;
+               stats->tx_packets += devTxStats->ucastPktsTxOK +
+                                    devTxStats->mcastPktsTxOK +
+                                    devTxStats->bcastPktsTxOK;
+               stats->tx_bytes += devTxStats->ucastBytesTxOK +
+                                  devTxStats->mcastBytesTxOK +
+                                  devTxStats->bcastBytesTxOK;
+               stats->tx_errors += devTxStats->pktsTxError;
+               stats->tx_dropped += drvTxStats->drop_total;
        }
 
        for (i = 0; i < adapter->num_rx_queues; i++) {
                devRxStats = &adapter->rqd_start[i].stats;
                drvRxStats = &adapter->rx_queue[i].stats;
-               net_stats->rx_packets += devRxStats->ucastPktsRxOK +
-                                       devRxStats->mcastPktsRxOK +
-                                       devRxStats->bcastPktsRxOK;
+               stats->rx_packets += devRxStats->ucastPktsRxOK +
+                                    devRxStats->mcastPktsRxOK +
+                                    devRxStats->bcastPktsRxOK;
 
-               net_stats->rx_bytes += devRxStats->ucastBytesRxOK +
-                                     devRxStats->mcastBytesRxOK +
-                                     devRxStats->bcastBytesRxOK;
+               stats->rx_bytes += devRxStats->ucastBytesRxOK +
+                                  devRxStats->mcastBytesRxOK +
+                                  devRxStats->bcastBytesRxOK;
 
-               net_stats->rx_errors += devRxStats->pktsRxError;
-               net_stats->rx_dropped += drvRxStats->drop_total;
-               net_stats->multicast +=  devRxStats->mcastPktsRxOK;
+               stats->rx_errors += devRxStats->pktsRxError;
+               stats->rx_dropped += drvRxStats->drop_total;
+               stats->multicast +=  devRxStats->mcastPktsRxOK;
        }
-       return net_stats;
+
+       return stats;
 }
 
 static int
index f50d36f..0e567c2 100644 (file)
@@ -323,7 +323,6 @@ struct vmxnet3_adapter {
        struct Vmxnet3_TxQueueDesc      *tqd_start;     /* all tx queue desc */
        struct Vmxnet3_RxQueueDesc      *rqd_start;     /* all rx queue desc */
        struct net_device               *netdev;
-       struct net_device_stats         net_stats;
        struct pci_dev                  *pdev;
 
        u8                      __iomem *hw_addr0; /* for BAR 0 */
@@ -407,7 +406,9 @@ vmxnet3_create_queues(struct vmxnet3_adapter *adapter,
                      u32 tx_ring_size, u32 rx_ring_size, u32 rx_ring2_size);
 
 extern void vmxnet3_set_ethtool_ops(struct net_device *netdev);
-extern struct net_device_stats *vmxnet3_get_stats(struct net_device *netdev);
+
+extern struct rtnl_link_stats64 *
+vmxnet3_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats);
 
 extern char vmxnet3_driver_name[];
 #endif