Commit f0768aec authored by Dawid Osuchowski's avatar Dawid Osuchowski Committed by Tony Nguyen
Browse files

i40e: add link_down_events statistic



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: default avatarMartyna Szapar-Mudlaw <martyna.szapar-mudlaw@linux.intel.com>
Signed-off-by: default avatarMartyna Szapar-Mudlaw <martyna.szapar-mudlaw@linux.intel.com>
Reviewed-by: default avatarMichal Swiatkowski <michal.swiatkowski@linux.intel.com>
Signed-off-by: default avatarDawid Osuchowski <dawid.osuchowski@linux.intel.com>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Tested-by: Rinitha S <sx.rinitha@intel.com> (A Contingent worker at Intel)
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
parent e7aee24a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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 */
+10 −0
Original line number Diff line number Diff line
@@ -2750,6 +2750,15 @@ static void i40e_diag_test(struct net_device *netdev,
	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,
+3 −0
Original line number Diff line number Diff line
@@ -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