* [PATCH net] ixgbe: implement get_queue_stats_rx
@ 2026-05-23 14:40 Kshitiz Bartariya
2026-05-25 15:53 ` Jakub Kicinski
0 siblings, 1 reply; 2+ messages in thread
From: Kshitiz Bartariya @ 2026-05-23 14:40 UTC (permalink / raw)
To: anthony.l.nguyen, przemyslaw.kitszel, andrew+netdev, davem,
edumazet, kuba, pabeni
Cc: Kshitiz Bartariya, intel-wired-lan, netdev, linux-kernel
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().
- hw_gro_packets and hw_gro_wire_packets: filled only when RSC
is enabled on the ring
Signed-off-by: Kshitiz Bartariya <kshitiz.bartariya@zohomail.in>
---
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 29 +++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 2646ee6f295f..f40309f6c72b 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -9740,6 +9740,34 @@ 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;
+
+ if (idx >= adapter->num_rx_queues)
+ return;
+
+ ring = adapter->rx_ring[idx];
+ if (!ring)
+ return;
+
+ 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;
+
+ if (ring_is_rsc_enabled(ring)) {
+ stats->hw_gro_packets = ring->rx_stats.rsc_flush;
+ stats->hw_gro_wire_packets = ring->rx_stats.rsc_flush +
+ ring->rx_stats.rsc_count;
+ }
+}
+
+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 +11671,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)
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH net] ixgbe: implement get_queue_stats_rx
2026-05-23 14:40 [PATCH net] ixgbe: implement get_queue_stats_rx Kshitiz Bartariya
@ 2026-05-25 15:53 ` Jakub Kicinski
0 siblings, 0 replies; 2+ messages in thread
From: Jakub Kicinski @ 2026-05-25 15:53 UTC (permalink / raw)
To: Kshitiz Bartariya
Cc: anthony.l.nguyen, przemyslaw.kitszel, andrew+netdev, davem,
edumazet, pabeni, intel-wired-lan, netdev, linux-kernel
On Sat, 23 May 2026 20:10:16 +0530 Kshitiz Bartariya wrote:
> 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().
>
> - hw_gro_packets and hw_gro_wire_packets: filled only when RSC
> is enabled on the ring
ixgbe does not advertise hw_gro in netdev features,
how can it report related stats..
> Signed-off-by: Kshitiz Bartariya <kshitiz.bartariya@zohomail.in>
> ---
> drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 29 +++++++++++++++++++
> 1 file changed, 29 insertions(+)
>
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
> index 2646ee6f295f..f40309f6c72b 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
> @@ -9740,6 +9740,34 @@ 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;
> +
> + if (idx >= adapter->num_rx_queues)
> + return;
> +
> + ring = adapter->rx_ring[idx];
> + if (!ring)
> + return;
Are these checks really necessary? core already checks against
real_num_rx_queues
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-05-25 15:53 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-23 14:40 [PATCH net] ixgbe: implement get_queue_stats_rx Kshitiz Bartariya
2026-05-25 15:53 ` Jakub Kicinski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox