> -----Original Message----- > From: Intel-wired-lan <[email protected]> On Behalf > Of Petr Oros > Sent: Thursday, February 12, 2026 8:53 AM > To: [email protected] > Cc: Drewek, Wojciech <[email protected]>; Kitszel, Przemyslaw > <[email protected]>; Eric Dumazet <[email protected]>; > [email protected]; Andrew Lunn <[email protected]>; > Nguyen, Anthony L <[email protected]>; Simon Horman > <[email protected]>; Michal Swiatkowski > <[email protected]>; Jakub Kicinski > <[email protected]>; Paolo Abeni <[email protected]>; David S. Miller > <[email protected]>; [email protected] > Subject: [Intel-wired-lan] [PATCH iwl-net 2/2] ice: use > ice_update_eth_stats() for representor stats > > ice_repr_get_stats64() and __ice_get_ethtool_stats() call > ice_update_vsi_stats() on the VF's src_vsi. This always returns early > because ICE_VSI_DOWN is permanently set for VF VSIs — ice_up() is > never called on them since queues are managed by iavf through > virtchnl. > > In __ice_get_ethtool_stats() the original code called > ice_update_vsi_stats() for all VSIs including representors, iterated > over ice_gstrings_vsi_stats[] to populate the data, and then bailed > out with an early return before the per-queue ring stats section. That > early return was necessary because representor VSIs have no rings on > the PF side — the rings belong to the VF driver (iavf), so accessing > per-queue stats would be invalid. > > Move the representor handling to the top of __ice_get_ethtool_stats() > and call ice_update_eth_stats() directly to read the hardware GLV_* > counters. This matches ice_get_vf_stats() which already uses > ice_update_eth_stats() for the same VF VSI in legacy mode. Apply the > same fix to ice_repr_get_stats64(). > > Note that ice_gstrings_vsi_stats[] contains five software ring > counters (rx_buf_failed, rx_page_failed, tx_linearize, tx_busy, > tx_restart) that are always zero for representors since the PF never > processes packets on VF rings. This is pre-existing behavior unchanged > by this patch. > > Fixes: 7aae80cef7ba ("ice: add port representor ethtool ops and > stats") > Signed-off-by: Petr Oros <[email protected]> > --- > drivers/net/ethernet/intel/ice/ice_ethtool.c | 14 +++++++++++--- > drivers/net/ethernet/intel/ice/ice_repr.c | 3 ++- > 2 files changed, 13 insertions(+), 4 deletions(-) > > diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c > b/drivers/net/ethernet/intel/ice/ice_ethtool.c > index 3565a5d96c6d18..0b8775621f1567 100644 > --- a/drivers/net/ethernet/intel/ice/ice_ethtool.c > +++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c > @@ -1926,6 +1926,17 @@ __ice_get_ethtool_stats(struct net_device > *netdev, > int i = 0; > char *p; > > + if (ice_is_port_repr_netdev(netdev)) { > + ice_update_eth_stats(vsi); > + > + for (j = 0; j < ICE_VSI_STATS_LEN; j++) { > + p = (char *)vsi + > ice_gstrings_vsi_stats[j].stat_offset; > + data[i++] = > (ice_gstrings_vsi_stats[j].sizeof_stat == > + sizeof(u64)) ? *(u64 *)p : *(u32 *)p; > + } > + return; > + } > + > ice_update_pf_stats(pf); > ice_update_vsi_stats(vsi); > > @@ -1935,9 +1946,6 @@ __ice_get_ethtool_stats(struct net_device > *netdev, > sizeof(u64)) ? *(u64 *)p : *(u32 *)p; > } > > - if (ice_is_port_repr_netdev(netdev)) > - return; > - > /* populate per queue stats */ > rcu_read_lock(); > > diff --git a/drivers/net/ethernet/intel/ice/ice_repr.c > b/drivers/net/ethernet/intel/ice/ice_repr.c > index 2a84f656405828..f1e82ba155cff2 100644 > --- a/drivers/net/ethernet/intel/ice/ice_repr.c > +++ b/drivers/net/ethernet/intel/ice/ice_repr.c > @@ -2,6 +2,7 @@ > /* Copyright (C) 2019-2021, Intel Corporation. */ > > #include "ice.h" > +#include "ice_lib.h" > #include "ice_eswitch.h" > #include "devlink/devlink.h" > #include "devlink/port.h" > @@ -67,7 +68,7 @@ ice_repr_get_stats64(struct net_device *netdev, > struct rtnl_link_stats64 *stats) > return; > vsi = repr->src_vsi; > > - ice_update_vsi_stats(vsi); > + ice_update_eth_stats(vsi); > eth_stats = &vsi->eth_stats; > > stats->tx_packets = eth_stats->tx_unicast + eth_stats- > >tx_broadcast + > -- > 2.52.0
Reviewed-by: Aleksandr Loktionov <[email protected]>
