]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
i40e: add link_down_events statistic
authorDawid Osuchowski <dawid.osuchowski@linux.intel.com>
Wed, 21 May 2025 14:23:32 +0000 (16:23 +0200)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Mon, 9 Jun 2025 16:56:18 +0000 (09:56 -0700)
Introduce a link_down_events counter to the i40e driver, incremented
each time the link transitions from up to down.
This counter can help diagnose issues related to link stability,
such as port flapping or unexpected link drops.

The value is exposed via ethtool's get_link_ext_stats() interface.

Co-developed-by: Martyna Szapar-Mudlaw <martyna.szapar-mudlaw@linux.intel.com>
Signed-off-by: Martyna Szapar-Mudlaw <martyna.szapar-mudlaw@linux.intel.com>
Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
Signed-off-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Tested-by: Rinitha S <sx.rinitha@intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/i40e/i40e.h
drivers/net/ethernet/intel/i40e/i40e_ethtool.c
drivers/net/ethernet/intel/i40e/i40e_main.c

index c67963bfe14ed0b6c34d6a4be10e4f95327b3240..54d5fdc303ca315ccae9e0f93c9c5699ee072a11 100644 (file)
@@ -548,6 +548,7 @@ struct i40e_pf {
        u16 empr_count; /* EMP reset count */
        u16 pfr_count; /* PF reset count */
        u16 sw_int_count; /* SW interrupt count */
+       u32 link_down_events;
 
        struct mutex switch_mutex;
        u16 lan_vsi;       /* our default LAN VSI */
index 814e20325feb70d7aff894962ce3432df8c77ffe..c7f2d85eafcd8da37eaecc52fd516256dc7c2829 100644 (file)
@@ -2750,6 +2750,15 @@ skip_ol_tests:
        netif_info(pf, drv, netdev, "testing failed\n");
 }
 
+static void i40e_get_link_ext_stats(struct net_device *netdev,
+                                   struct ethtool_link_ext_stats *stats)
+{
+       struct i40e_netdev_priv *np = netdev_priv(netdev);
+       struct i40e_pf *pf = np->vsi->back;
+
+       stats->link_down_events = pf->link_down_events;
+}
+
 static void i40e_get_wol(struct net_device *netdev,
                         struct ethtool_wolinfo *wol)
 {
@@ -5810,6 +5819,7 @@ static const struct ethtool_ops i40e_ethtool_ops = {
        .get_regs               = i40e_get_regs,
        .nway_reset             = i40e_nway_reset,
        .get_link               = ethtool_op_get_link,
+       .get_link_ext_stats     = i40e_get_link_ext_stats,
        .get_wol                = i40e_get_wol,
        .set_wol                = i40e_set_wol,
        .set_eeprom             = i40e_set_eeprom,
index 67faf5a8dcbfedf547ed340b98d16eac854c673d..fcfa2162a3dddb542b9f1eb2b1141eeabe3dd6c4 100644 (file)
@@ -9960,6 +9960,9 @@ static void i40e_link_event(struct i40e_pf *pf)
             new_link == netif_carrier_ok(vsi->netdev)))
                return;
 
+       if (!new_link && old_link)
+               pf->link_down_events++;
+
        i40e_print_link_message(vsi, new_link);
 
        /* Notify the base of the switch tree connected to