>-----Original Message-----
>From: Intel-wired-lan <[email protected]> On Behalf Of 
>Kshitiz Bartariya via Intel-wired-lan
>Sent: Tuesday, June 2, 2026 12:09 PM
>To: Nguyen, Anthony L <[email protected]>; Kitszel, Przemyslaw 
><[email protected]>; [email protected]; [email protected]; 
>[email protected]; [email protected]; [email protected]; Loktionov, Aleksandr 
><[email protected]>; Keller, Jacob E <[email protected]>
>Cc: Kshitiz Bartariya <[email protected]>; 
>[email protected]; [email protected]; 
>[email protected]
>Subject: [Intel-wired-lan] [PATCH net-next] ixgbe: implement get_queue_stats_rx
>
>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]>
>---
>This patch was previously discussed for the net tree:
>Link: 
>https://lore.kernel.org/lkml/[email protected]/
>
>Sending to net-next as suggested by Jacob Keller and Aleksandr Loktionov.
>
>
> 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 bc16e4c93fd4..05d4b8aff1fc 100644
>--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
>+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
>@@ -9759,6 +9759,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)
> {
>@@ -11662,6 +11677,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)

Reviewed-by: Piotr Kwapulinski <[email protected]>

Reply via email to