bnx2: 64 bit stats on all arches
authorEric Dumazet <eric.dumazet@gmail.com>
Thu, 8 Jul 2010 04:08:43 +0000 (04:08 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 9 Jul 2010 06:12:27 +0000 (23:12 -0700)
Now core network is able to handle 64 bit netdevice stats on 32 bit
arches, we can provide them for bnx2, since hardware maintains some 64
bit counters.

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Acked-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/bnx2.c

index 22fa1e941247ac45b9e5e4de4279a9ce90d028f1..a203f39e2b8c20e72603d926eb167332a08b3693 100644 (file)
@@ -6589,36 +6589,25 @@ bnx2_save_stats(struct bnx2 *bp)
                temp_stats[i] += hw_stats[i];
 }
 
-#define GET_64BIT_NET_STATS64(ctr)                             \
-       (unsigned long) ((unsigned long) (ctr##_hi) << 32) +    \
-       (unsigned long) (ctr##_lo)
+#define GET_64BIT_NET_STATS64(ctr)             \
+       (((u64) (ctr##_hi) << 32) + (u64) (ctr##_lo))
 
-#define GET_64BIT_NET_STATS32(ctr)                             \
-       (ctr##_lo)
-
-#if (BITS_PER_LONG == 64)
 #define GET_64BIT_NET_STATS(ctr)                               \
        GET_64BIT_NET_STATS64(bp->stats_blk->ctr) +             \
        GET_64BIT_NET_STATS64(bp->temp_stats_blk->ctr)
-#else
-#define GET_64BIT_NET_STATS(ctr)                               \
-       GET_64BIT_NET_STATS32(bp->stats_blk->ctr) +             \
-       GET_64BIT_NET_STATS32(bp->temp_stats_blk->ctr)
-#endif
 
 #define GET_32BIT_NET_STATS(ctr)                               \
        (unsigned long) (bp->stats_blk->ctr +                   \
                         bp->temp_stats_blk->ctr)
 
-static struct net_device_stats *
-bnx2_get_stats(struct net_device *dev)
+static struct rtnl_link_stats64 *
+bnx2_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *net_stats)
 {
        struct bnx2 *bp = netdev_priv(dev);
-       struct net_device_stats *net_stats = &dev->stats;
 
-       if (bp->stats_blk == NULL) {
+       if (bp->stats_blk == NULL)
                return net_stats;
-       }
+
        net_stats->rx_packets =
                GET_64BIT_NET_STATS(stat_IfHCInUcastPkts) +
                GET_64BIT_NET_STATS(stat_IfHCInMulticastPkts) +
@@ -8289,7 +8278,7 @@ static const struct net_device_ops bnx2_netdev_ops = {
        .ndo_open               = bnx2_open,
        .ndo_start_xmit         = bnx2_start_xmit,
        .ndo_stop               = bnx2_close,
-       .ndo_get_stats          = bnx2_get_stats,
+       .ndo_get_stats64        = bnx2_get_stats64,
        .ndo_set_rx_mode        = bnx2_set_rx_mode,
        .ndo_do_ioctl           = bnx2_ioctl,
        .ndo_validate_addr      = eth_validate_addr,