ixgbe: add pause frame stats
authorJakub Kicinski <kuba@kernel.org>
Tue, 15 Sep 2020 00:11:57 +0000 (17:11 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 15 Sep 2020 20:26:29 +0000 (13:26 -0700)
Report standard pause frame stats. They are already aggregated
in struct ixgbe_hw_stats.

The combination of the registers is suggested as equivalent to
PAUSEMACCtrlFramesTransmitted / PAUSEMACCtrlFramesReceived
by the Intel 82576EB datasheet, I could not find any information
in the HW actually supported by ixgbe.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
Reviewed-by: Saeed Mahameed <saeedm@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c

index 71ec908266a63fb42e76074caf7eb3a0fe18f759..a280aa34ca1dfdd5ecfb696e9633697dba303ba9 100644 (file)
@@ -531,6 +531,16 @@ static int ixgbe_set_link_ksettings(struct net_device *netdev,
        return err;
 }
 
+static void ixgbe_get_pause_stats(struct net_device *netdev,
+                                 struct ethtool_pause_stats *stats)
+{
+       struct ixgbe_adapter *adapter = netdev_priv(netdev);
+       struct ixgbe_hw_stats *hwstats = &adapter->stats;
+
+       stats->tx_pause_frames = hwstats->lxontxc + hwstats->lxofftxc;
+       stats->rx_pause_frames = hwstats->lxonrxc + hwstats->lxoffrxc;
+}
+
 static void ixgbe_get_pauseparam(struct net_device *netdev,
                                 struct ethtool_pauseparam *pause)
 {
@@ -3546,6 +3556,7 @@ static const struct ethtool_ops ixgbe_ethtool_ops = {
        .set_eeprom             = ixgbe_set_eeprom,
        .get_ringparam          = ixgbe_get_ringparam,
        .set_ringparam          = ixgbe_set_ringparam,
+       .get_pause_stats        = ixgbe_get_pause_stats,
        .get_pauseparam         = ixgbe_get_pauseparam,
        .set_pauseparam         = ixgbe_set_pauseparam,
        .get_msglevel           = ixgbe_get_msglevel,