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 Closes: https://github.com/systemd/systemd/issues/25925 Suggested-by: Matt Vollrath Reviewed-by: Matt Vollrath Tested-by: Matt Vollrath Assisted-by: LLM Signed-off-by: Craig I. Hagan --- 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