> -----Original Message-----
> From: Intel-wired-lan <[email protected]> On Behalf
> Of Kshitiz Bartariya via Intel-wired-lan
> Sent: Tuesday, May 26, 2026 9:48 AM
> To: [email protected]; Nguyen, Anthony L <[email protected]>;
> Kitszel, Przemyslaw <[email protected]>;
> [email protected]; [email protected]; [email protected];
> [email protected]
> Cc: Kshitiz Bartariya <[email protected]>; intel-wired-
> [email protected]; [email protected]; linux-
> [email protected]
> Subject: [Intel-wired-lan] [PATCH net v2] 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]>
> ---
> 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/20260523144022.36484-1-
> [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)


I think it should go to net-next branch
Reviewed-by: Aleksandr Loktionov <[email protected]>

Reply via email to