diff mbox series

[iwl-next,v2,2/2] ixgbe: add link_down_events statistic

Message ID 20250414130007.366132-7-martyna.szapar-mudlaw@linux.intel.com (mailing list archive)
State Awaiting Upstream
Delegated to: Netdev Maintainers
Headers show
Series Add link_down_events counters to ixgbe and ice drivers | expand

Checks

Context Check Description
netdev/series_format warning Target tree name not specified in the subject
netdev/tree_selection success Guessed tree name to be net-next
netdev/ynl success Generated files up to date; no warnings/errors; no diff in generated;
netdev/fixes_present success Fixes tag not required for -next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 1 this patch: 1
netdev/build_tools success No tools touched, skip
netdev/cc_maintainers warning 6 maintainers not CCed: edumazet@google.com anthony.l.nguyen@intel.com kuba@kernel.org pabeni@redhat.com andrew+netdev@lunn.ch przemyslaw.kitszel@intel.com
netdev/build_clang success Errors and warnings before: 2 this patch: 2
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn success Errors and warnings before: 2 this patch: 2
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 36 lines checked
netdev/build_clang_rust success No Rust files in patch. Skipping build
netdev/kdoc success Errors and warnings before: 34 this patch: 34
netdev/source_inline success Was 0 now: 0

Commit Message

Szapar-Mudlaw, Martyna April 14, 2025, 1 p.m. UTC
Introduce a link_down_events counter to the ixgbe 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.

Signed-off-by: Martyna Szapar-Mudlaw <martyna.szapar-mudlaw@linux.intel.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe.h         | 1 +
 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 9 +++++++++
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c    | 2 ++
 3 files changed, 12 insertions(+)

Comments

Kory Maincent April 14, 2025, 1:44 p.m. UTC | #1
On Mon, 14 Apr 2025 15:00:11 +0200
Martyna Szapar-Mudlaw <martyna.szapar-mudlaw@linux.intel.com> wrote:

> Introduce a link_down_events counter to the ixgbe 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.
> 
> Signed-off-by: Martyna Szapar-Mudlaw <martyna.szapar-mudlaw@linux.intel.com>

Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>

Thank you!
Loktionov, Aleksandr April 14, 2025, 2:01 p.m. UTC | #2
> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of
> Martyna Szapar-Mudlaw
> Sent: Monday, April 14, 2025 3:00 PM
> To: intel-wired-lan@lists.osuosl.org
> Cc: netdev@vger.kernel.org; Martyna Szapar-Mudlaw <martyna.szapar-
> mudlaw@linux.intel.com>
> Subject: [Intel-wired-lan] [PATCH iwl-next v2 2/2] ixgbe: add
> link_down_events statistic
> 
> Introduce a link_down_events counter to the ixgbe 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.
> 
> Signed-off-by: Martyna Szapar-Mudlaw <martyna.szapar-
> mudlaw@linux.intel.com>
Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
> ---
>  drivers/net/ethernet/intel/ixgbe/ixgbe.h         | 1 +
>  drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 9 +++++++++
>  drivers/net/ethernet/intel/ixgbe/ixgbe_main.c    | 2 ++
>  3 files changed, 12 insertions(+)
> 
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h
> b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
> index e6a380d4929b..7a8b4b6053c7 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
> @@ -743,6 +743,7 @@ struct ixgbe_adapter {
>  	bool link_up;
>  	unsigned long sfp_poll_time;
>  	unsigned long link_check_timeout;
> +	u32 link_down_events;
> 
>  	struct timer_list service_timer;
>  	struct work_struct service_task;
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
> b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
> index f03925c1f521..e2c474209114 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
> @@ -992,6 +992,14 @@ static void ixgbe_get_regs(struct net_device
> *netdev,
>  	regs_buff[1144] = IXGBE_READ_REG(hw, IXGBE_SECRXSTAT);  }
> 
> +static void ixgbe_get_link_ext_stats(struct net_device *netdev,
> +				     struct ethtool_link_ext_stats *stats) {
> +	struct ixgbe_adapter *adapter = netdev_priv(netdev);
> +
> +	stats->link_down_events = adapter->link_down_events; }
> +
>  static int ixgbe_get_eeprom_len(struct net_device *netdev)  {
>  	struct ixgbe_adapter *adapter = netdev_priv(netdev); @@ -3602,6
> +3610,7 @@ static const struct ethtool_ops ixgbe_ethtool_ops = {
>  	.set_wol                = ixgbe_set_wol,
>  	.nway_reset             = ixgbe_nway_reset,
>  	.get_link               = ethtool_op_get_link,
> +	.get_link_ext_stats	= ixgbe_get_link_ext_stats,
>  	.get_eeprom_len         = ixgbe_get_eeprom_len,
>  	.get_eeprom             = ixgbe_get_eeprom,
>  	.set_eeprom             = ixgbe_set_eeprom,
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
> b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
> index 467f81239e12..cb5c782817fa 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
> @@ -7986,6 +7986,8 @@ static void ixgbe_watchdog_link_is_down(struct
> ixgbe_adapter *adapter)
>  	if (!netif_carrier_ok(netdev))
>  		return;
> 
> +	adapter->link_down_events++;
> +
>  	/* poll for SFP+ cable when link is down */
>  	if (ixgbe_is_sfp(hw) && hw->mac.type == ixgbe_mac_82598EB)
>  		adapter->flags2 |= IXGBE_FLAG2_SEARCH_FOR_SFP;
> --
> 2.47.0
diff mbox series

Patch

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
index e6a380d4929b..7a8b4b6053c7 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
@@ -743,6 +743,7 @@  struct ixgbe_adapter {
 	bool link_up;
 	unsigned long sfp_poll_time;
 	unsigned long link_check_timeout;
+	u32 link_down_events;
 
 	struct timer_list service_timer;
 	struct work_struct service_task;
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
index f03925c1f521..e2c474209114 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
@@ -992,6 +992,14 @@  static void ixgbe_get_regs(struct net_device *netdev,
 	regs_buff[1144] = IXGBE_READ_REG(hw, IXGBE_SECRXSTAT);
 }
 
+static void ixgbe_get_link_ext_stats(struct net_device *netdev,
+				     struct ethtool_link_ext_stats *stats)
+{
+	struct ixgbe_adapter *adapter = netdev_priv(netdev);
+
+	stats->link_down_events = adapter->link_down_events;
+}
+
 static int ixgbe_get_eeprom_len(struct net_device *netdev)
 {
 	struct ixgbe_adapter *adapter = netdev_priv(netdev);
@@ -3602,6 +3610,7 @@  static const struct ethtool_ops ixgbe_ethtool_ops = {
 	.set_wol                = ixgbe_set_wol,
 	.nway_reset             = ixgbe_nway_reset,
 	.get_link               = ethtool_op_get_link,
+	.get_link_ext_stats	= ixgbe_get_link_ext_stats,
 	.get_eeprom_len         = ixgbe_get_eeprom_len,
 	.get_eeprom             = ixgbe_get_eeprom,
 	.set_eeprom             = ixgbe_set_eeprom,
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 467f81239e12..cb5c782817fa 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -7986,6 +7986,8 @@  static void ixgbe_watchdog_link_is_down(struct ixgbe_adapter *adapter)
 	if (!netif_carrier_ok(netdev))
 		return;
 
+	adapter->link_down_events++;
+
 	/* poll for SFP+ cable when link is down */
 	if (ixgbe_is_sfp(hw) && hw->mac.type == ixgbe_mac_82598EB)
 		adapter->flags2 |= IXGBE_FLAG2_SEARCH_FOR_SFP;