Hook into the netdev_stat_ops interface to expose per RX queue statistics through the netdev generic netlink API.
The following counters are filled: - alloc_fail: sum of alloc_rx_page_failed and alloc_rx_buff_failed - csum_bad: maps directly to csum_err, which is incremented for both IP header and L4 checksum errors in ixgbe_rx_checksum(). Signed-off-by: Kshitiz Bartariya <[email protected]> --- v2: - Removed setting of hw_gro counters as ixgbe doesn't advertise it - Removed idx and ring checks as they are already checked against real_num_rx_queues Thanks Jakub Kicinski for the review comments. v1: https://lore.kernel.org/lkml/[email protected]/ drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index 2646ee6f295f..2184213727c7 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -9740,6 +9740,21 @@ static void ixgbe_get_stats64(struct net_device *netdev, stats->rx_missed_errors = netdev->stats.rx_missed_errors; } +static void ixgbe_get_queue_stats_rx(struct net_device *dev, int idx, + struct netdev_queue_stats_rx *stats) +{ + struct ixgbe_adapter *adapter = ixgbe_from_netdev(dev); + struct ixgbe_ring *ring = adapter->rx_ring[idx]; + + stats->alloc_fail = ring->rx_stats.alloc_rx_page_failed + + ring->rx_stats.alloc_rx_buff_failed; + stats->csum_bad = ring->rx_stats.csum_err; +} + +static const struct netdev_stat_ops ixgbe_stat_ops = { + .get_queue_stats_rx = ixgbe_get_queue_stats_rx, +}; + static int ixgbe_ndo_get_vf_stats(struct net_device *netdev, int vf, struct ifla_vf_stats *vf_stats) { @@ -11643,6 +11658,7 @@ static int ixgbe_probe(struct pci_dev *pdev, const struct pci_device_id *ent) hw->phy.mdio.mdio_write = ixgbe_mdio_write; netdev->netdev_ops = &ixgbe_netdev_ops; + netdev->stat_ops = &ixgbe_stat_ops; ixgbe_set_ethtool_ops(netdev); netdev->watchdog_timeo = 5 * HZ; strscpy(netdev->name, pci_name(pdev), sizeof(netdev->name)); -- 2.50.1 (Apple Git-155)
