diff mbox series

[iwl-net,v3] e1000e: restore jumbo config after DMoff exit

Message ID 20260928210552.13266-1-hagan@amazon.com
State Under Review
Delegated to: Anthony Nguyen
Headers show
Series [iwl-net,v3] e1000e: restore jumbo config after DMoff exit | expand

Commit Message

Craig I. Hagan Sept. 28, 2026, 9:05 p.m. UTC
On an I219 (pch_spt+) at jumbo MTU, after a link partner reset (e.g. a
switch reboot) the interface can come back up unable to pass traffic until
it is manually reset. Observed on I219-LM (8086:15b7) at MTU 9000.

When the MAC exits the DMoff state on link-up, the watchdog resets only
the PHY. A bare PHY reset does not re-run the jumbo-frame workaround
(e1000_lv_jumbo_workaround_ich8lan), so the jumbo configuration is left
unapplied and traffic stalls. This was seen with NIC runtime PM disabled;
if runtime PM were enabled, the device should go through a full reset on
resume, avoiding this issue.

Request a full reset (FLAG_RESTART_NOW) instead of the bare PHY reset when
the MAC exits DMoff, so the normal reset path re-applies the jumbo-frame
configuration.

Fixes: def4ec6dce39 ("e1000e: PCIm function state support")
Cc: stable@vger.kernel.org
Reported-by: Fabio Sabai <sabfabio@amazon.com>
Closes: https://github.com/systemd/systemd/issues/25925
Suggested-by: Matt Vollrath <tactii@gmail.com>
Reviewed-by: Matt Vollrath <tactii@gmail.com>
Tested-by: Matt Vollrath <tactii@gmail.com>
Assisted-by: LLM
Signed-off-by: Craig I. Hagan <hagan@amazon.com>
---
v3: Correct the Fixes: tag to def4ec6dce39 ("e1000e: PCIm function
    state support"), which introduced the DMoff-exit bare PHY reset;
    2e7256f12cdb only added a pre-condition. This lets stable reach
    the affected trees (v5.3+, including 5.4/5.10). Add Reviewed-by/
    Tested-by from Matt Vollrath.
v2: Rework per review: request a full reset on DMoff exit so the
    jumbo-frame workaround is re-applied (root cause identified by
    Matt Vollrath); drop the diagnostic e_info. v1:
    https://lore.kernel.org/netdev/20260923235832.473-1-hagan@amazon.com/

 drivers/net/ethernet/intel/e1000e/netdev.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

Comments

Loktionov, Aleksandr Sept. 29, 2026, 7:05 a.m. UTC | #1
> -----Original Message-----
> From: Craig I. Hagan <hagan@amazon.com>
> Sent: Monday, September 28, 2026 11:06 PM
> To: Nguyen, Anthony L <anthony.l.nguyen@intel.com>; Kitszel,
> Przemyslaw <przemyslaw.kitszel@intel.com>
> Cc: Andrew Lunn <andrew+netdev@lunn.ch>; David S . Miller
> <davem@davemloft.net>; Eric Dumazet <edumazet@google.com>; Jakub
> Kicinski <kuba@kernel.org>; Paolo Abeni <pabeni@redhat.com>; intel-
> wired-lan@lists.osuosl.org; netdev@vger.kernel.org; linux-
> kernel@vger.kernel.org; stable@vger.kernel.org; Fabio Sabai
> <sabfabio@amazon.com>; Matt Vollrath <tactii@gmail.com>
> Subject: [PATCH iwl-net v3] e1000e: restore jumbo config after DMoff
> exit
> 
> On an I219 (pch_spt+) at jumbo MTU, after a link partner reset (e.g. a
> switch reboot) the interface can come back up unable to pass traffic
> until it is manually reset. Observed on I219-LM (8086:15b7) at MTU
> 9000.
> 
> When the MAC exits the DMoff state on link-up, the watchdog resets
> only the PHY. A bare PHY reset does not re-run the jumbo-frame
> workaround (e1000_lv_jumbo_workaround_ich8lan), so the jumbo
> configuration is left unapplied and traffic stalls. This was seen with
> NIC runtime PM disabled; if runtime PM were enabled, the device should
> go through a full reset on resume, avoiding this issue.
> 
> Request a full reset (FLAG_RESTART_NOW) instead of the bare PHY reset
> when the MAC exits DMoff, so the normal reset path re-applies the
> jumbo-frame configuration.
> 
> Fixes: def4ec6dce39 ("e1000e: PCIm function state support")
> Cc: stable@vger.kernel.org
> Reported-by: Fabio Sabai <sabfabio@amazon.com>
> Closes: https://github.com/systemd/systemd/issues/25925
> Suggested-by: Matt Vollrath <tactii@gmail.com>
> Reviewed-by: Matt Vollrath <tactii@gmail.com>
> Tested-by: Matt Vollrath <tactii@gmail.com>
> Assisted-by: LLM
> Signed-off-by: Craig I. Hagan <hagan@amazon.com>
> ---
> v3: Correct the Fixes: tag to def4ec6dce39 ("e1000e: PCIm function
>     state support"), which introduced the DMoff-exit bare PHY reset;
>     2e7256f12cdb only added a pre-condition. This lets stable reach
>     the affected trees (v5.3+, including 5.4/5.10). Add Reviewed-by/
>     Tested-by from Matt Vollrath.
> v2: Rework per review: request a full reset on DMoff exit so the
>     jumbo-frame workaround is re-applied (root cause identified by
>     Matt Vollrath); drop the diagnostic e_info. v1:
>     https://lore.kernel.org/netdev/20260923235832.473-1-
> hagan@amazon.com/
> 
>  drivers/net/ethernet/intel/e1000e/netdev.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c
> b/drivers/net/ethernet/intel/e1000e/netdev.c
> index 844f31ab3..df7da86a8 100644
> --- a/drivers/net/ethernet/intel/e1000e/netdev.c
> +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
> @@ -5264,9 +5264,11 @@ static void e1000_watchdog_task(struct
> work_struct *work)
>  					usleep_range(10000, 20000);
>  					pcim_state = er32(STATUS);
> 
> -					/* Checking if MAC exited DMoff
> state */
> -					if (!(pcim_state &
> E1000_STATUS_PCIM_STATE))
> -						e1000_phy_hw_reset(&adapter-
> >hw);
> +					/* MAC exited DMoff; do a full
> reset. */
> +					if (!(pcim_state &
> E1000_STATUS_PCIM_STATE)) {
> +						adapter->flags |=
> FLAG_RESTART_NOW;
> +						goto link_up;
> +					}
>  				}
>  			}
> 
> --
> 2.47.3

Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
diff mbox series

Patch

diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index 844f31ab3..df7da86a8 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -5264,9 +5264,11 @@  static void e1000_watchdog_task(struct work_struct *work)
 					usleep_range(10000, 20000);
 					pcim_state = er32(STATUS);
 
-					/* Checking if MAC exited DMoff state */
-					if (!(pcim_state & E1000_STATUS_PCIM_STATE))
-						e1000_phy_hw_reset(&adapter->hw);
+					/* MAC exited DMoff; do a full reset. */
+					if (!(pcim_state & E1000_STATUS_PCIM_STATE)) {
+						adapter->flags |= FLAG_RESTART_NOW;
+						goto link_up;
+					}
 				}
 			}