ixgbe: fix ethtool stats
authorEric Dumazet <eric.dumazet@gmail.com>
Fri, 23 Jul 2010 13:44:21 +0000 (13:44 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sun, 25 Jul 2010 03:43:19 +0000 (20:43 -0700)
In latest changes about 64bit stats on 32bit arches,
[commit 28172739f0a276eb8 (net: fix 64 bit counters on 32 bit arches)],
I missed ixgbe uses a bit of magic in its ixgbe_gstrings_stats
definition.

IXGBE_NETDEV_STAT() must now assume offsets relative to
rtnl_link_stats64, not relative do dev->stats.

As a bonus, we also get 64bit stats on ethtool -S

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Tested-by: Stephen Ko <stephen.s.ko@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ixgbe/ixgbe_ethtool.c

index da54b38bb480593f27bf0006a820dda70c391276..dcebc82c6f4de3a4ae0134f802cbf5c7f8e8d302 100644 (file)
@@ -54,14 +54,14 @@ struct ixgbe_stats {
                                sizeof(((struct ixgbe_adapter *)0)->m), \
                                offsetof(struct ixgbe_adapter, m)
 #define IXGBE_NETDEV_STAT(m)   NETDEV_STATS, \
-                               sizeof(((struct net_device *)0)->m), \
-                               offsetof(struct net_device, m) - offsetof(struct net_device, stats)
+                               sizeof(((struct rtnl_link_stats64 *)0)->m), \
+                               offsetof(struct rtnl_link_stats64, m)
 
 static struct ixgbe_stats ixgbe_gstrings_stats[] = {
-       {"rx_packets", IXGBE_NETDEV_STAT(stats.rx_packets)},
-       {"tx_packets", IXGBE_NETDEV_STAT(stats.tx_packets)},
-       {"rx_bytes", IXGBE_NETDEV_STAT(stats.rx_bytes)},
-       {"tx_bytes", IXGBE_NETDEV_STAT(stats.tx_bytes)},
+       {"rx_packets", IXGBE_NETDEV_STAT(rx_packets)},
+       {"tx_packets", IXGBE_NETDEV_STAT(tx_packets)},
+       {"rx_bytes", IXGBE_NETDEV_STAT(rx_bytes)},
+       {"tx_bytes", IXGBE_NETDEV_STAT(tx_bytes)},
        {"rx_pkts_nic", IXGBE_STAT(stats.gprc)},
        {"tx_pkts_nic", IXGBE_STAT(stats.gptc)},
        {"rx_bytes_nic", IXGBE_STAT(stats.gorc)},
@@ -69,27 +69,27 @@ static struct ixgbe_stats ixgbe_gstrings_stats[] = {
        {"lsc_int", IXGBE_STAT(lsc_int)},
        {"tx_busy", IXGBE_STAT(tx_busy)},
        {"non_eop_descs", IXGBE_STAT(non_eop_descs)},
-       {"rx_errors", IXGBE_NETDEV_STAT(stats.rx_errors)},
-       {"tx_errors", IXGBE_NETDEV_STAT(stats.tx_errors)},
-       {"rx_dropped", IXGBE_NETDEV_STAT(stats.rx_dropped)},
-       {"tx_dropped", IXGBE_NETDEV_STAT(stats.tx_dropped)},
-       {"multicast", IXGBE_NETDEV_STAT(stats.multicast)},
+       {"rx_errors", IXGBE_NETDEV_STAT(rx_errors)},
+       {"tx_errors", IXGBE_NETDEV_STAT(tx_errors)},
+       {"rx_dropped", IXGBE_NETDEV_STAT(rx_dropped)},
+       {"tx_dropped", IXGBE_NETDEV_STAT(tx_dropped)},
+       {"multicast", IXGBE_NETDEV_STAT(multicast)},
        {"broadcast", IXGBE_STAT(stats.bprc)},
        {"rx_no_buffer_count", IXGBE_STAT(stats.rnbc[0]) },
-       {"collisions", IXGBE_NETDEV_STAT(stats.collisions)},
-       {"rx_over_errors", IXGBE_NETDEV_STAT(stats.rx_over_errors)},
-       {"rx_crc_errors", IXGBE_NETDEV_STAT(stats.rx_crc_errors)},
-       {"rx_frame_errors", IXGBE_NETDEV_STAT(stats.rx_frame_errors)},
+       {"collisions", IXGBE_NETDEV_STAT(collisions)},
+       {"rx_over_errors", IXGBE_NETDEV_STAT(rx_over_errors)},
+       {"rx_crc_errors", IXGBE_NETDEV_STAT(rx_crc_errors)},
+       {"rx_frame_errors", IXGBE_NETDEV_STAT(rx_frame_errors)},
        {"hw_rsc_aggregated", IXGBE_STAT(rsc_total_count)},
        {"hw_rsc_flushed", IXGBE_STAT(rsc_total_flush)},
        {"fdir_match", IXGBE_STAT(stats.fdirmatch)},
        {"fdir_miss", IXGBE_STAT(stats.fdirmiss)},
-       {"rx_fifo_errors", IXGBE_NETDEV_STAT(stats.rx_fifo_errors)},
-       {"rx_missed_errors", IXGBE_NETDEV_STAT(stats.rx_missed_errors)},
-       {"tx_aborted_errors", IXGBE_NETDEV_STAT(stats.tx_aborted_errors)},
-       {"tx_carrier_errors", IXGBE_NETDEV_STAT(stats.tx_carrier_errors)},
-       {"tx_fifo_errors", IXGBE_NETDEV_STAT(stats.tx_fifo_errors)},
-       {"tx_heartbeat_errors", IXGBE_NETDEV_STAT(stats.tx_heartbeat_errors)},
+       {"rx_fifo_errors", IXGBE_NETDEV_STAT(rx_fifo_errors)},
+       {"rx_missed_errors", IXGBE_NETDEV_STAT(rx_missed_errors)},
+       {"tx_aborted_errors", IXGBE_NETDEV_STAT(tx_aborted_errors)},
+       {"tx_carrier_errors", IXGBE_NETDEV_STAT(tx_carrier_errors)},
+       {"tx_fifo_errors", IXGBE_NETDEV_STAT(tx_fifo_errors)},
+       {"tx_heartbeat_errors", IXGBE_NETDEV_STAT(tx_heartbeat_errors)},
        {"tx_timeout_count", IXGBE_STAT(tx_timeout_count)},
        {"tx_restart_queue", IXGBE_STAT(restart_queue)},
        {"rx_long_length_errors", IXGBE_STAT(stats.roc)},