From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-oa2-f35.google.com (mail-oa2-f35.google.com [74.125.231.99]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DBCD7489FC2 for ; Sun, 20 Sep 2026 19:45:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.231.99 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789933548; cv=none; b=tWybGBNx3BO3JhkvJPLdSSSwpzUCJ4MKYab9X1d8jKhlbkm8nc/PW+nurK8ulI/0NJnhhh4h4KI0e/U4YVawGYs15hBbBQVd0lYDxum7ne+rS6VNxtiBipP6ESG1xSCU0bLMiIsQ1Y3g3w2M/f3j3aJWKaX8WGc/NaWOjw+u46A= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789933548; c=relaxed/simple; bh=L/gVslUU4Nj87gMlJ1iN5b89DCxQ3qLLsz8MQD+nnKM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jARC++Ji3SWCJSmab8/i4egi1QlonvjTcow50bDVmilsn24cCuYQWdhAtB4X70YKY9zwttGoYd15HyTgmTrrubnAOTAGm7CsniH3J2dt7m4Mu8cNq9c1cqu3UX6ZGVYZ2jxSCALAjxbLP2ENXz4PU4cot0+ULBgqnjUutxlkuuo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=b6IxJVgm; arc=none smtp.client-ip=74.125.231.99 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="b6IxJVgm" Received: by mail-oa2-f35.google.com with SMTP id 586e51a60fabf-470417e5b52so1709332fac.3 for ; Sun, 20 Sep 2026 12:45:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789933544; x=1790538344; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=3aFq2H0KJohvHytlOdYBRSeWux+yzT03AinuuVRvEmM=; b=b6IxJVgmucYmvO5f9YkZ/mpQlEpApK7Y+SyeTPT2cj6xbyT9maXXXMh9YSut7YGkxv 8JyzdzOVXIIyxs7j8UBo2RucuIMQ5DPjvFRJ3DUeZEvq8AL7lsh8JCwqppk7Oo9aXft/ P3GlVian8EHjzHZ3ME5mU3zMzPAk9gso/IUfbGWTZk8f9/g5idBOAM+gBzE2S6FxzUeh zfY9z8KQKMI22qch/4ZJG9SO0VWaJ99HBOgBGWepUaXi7pJ28U0NmyqO+pmgQ0kuLu2S kh8DqOe4wYec6c3nZRFwUSfpkcA9MQ7yrki6PJy5MZVB+XeN1rDPKjOY4d3Cy6A94DVV q6cA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789933544; x=1790538344; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=3aFq2H0KJohvHytlOdYBRSeWux+yzT03AinuuVRvEmM=; b=JyMfOsBfqf9MCZ0dNORRcGXc1asG0Ic2VA6g1YQSJi1/sCkbSCoHvSjzJ9vv+YPTY6 kkEggojcJi1Jtc7tL/uQPjpE+2ZfDbMKSKv8/WObJj29a/ajFLDJDfMgu1OyapuwLfYR LdTrOpdHR3hM5SkrbN4iQ4gbYxLOcc50NKm+2lFlTtYY2zTYg9Klsi+ZpQvHEVmLP73S 6FmWhs7RIK/y6UhwDJQtYZDgSBCuxMjq1+7XsN7lIN6Kf9dE7P1ct5lE4cuVfD5xO0ln tRH8nTsWySgKLxIYFFMDLmYF7fM3gMef6GcXwxcmIDBVJhKkBG1Nfe51HBrDtd3xDX2R AhZA== X-Forwarded-Encrypted: i=1; AKwUvBxaSbbmN8PAp97yHvKb3HKYDpt1rWOvQRyC3R2e+YNyuzevvk3C7u14zWaFiVxRW22bv+hWrv9J6oHG@vger.kernel.org X-Gm-Message-State: AFuF++ke371WCuty+tsUeEcP2um7F6xMnGQtw8xepAIlFwSkkg7clnOR F+LhjS1kZ2SnvhWHpUW+YEAUJMJ5d6dEM+LKZFq9PdcEdRFuFx6VuBfZ X-Gm-Gg: AYBFou0mZIvH0FJD2iaqP0QM2vwLxno4ewu/y3AhHuwLBdkrSjO1dE6Tzmxs6Itq6AT bgZrRU8+O5Om1sPmniwdZHs4tU3O+Mdbcb/wSkA/pR1UHTWtOws0JvgzuE3H/HkUionSyFN0HEh M0w8H6IaB28Isn5oyLWuFyi3wze5lCbaJkUeV4EfzuPEdcJg22N38Z9YPDRzZFlrr1A12f96v1i 52H7syVBO6WEXifVM387Didx68ZSN2JOm5PV/Rc9KmQLfGGmST2aivOoKtnfzrj0NuTfcRYb4Oi rn3Y+EQUl/RXdK28Z1pSEUUUEyJjSAnTZbn3uSDrlSRSD+GnxNPT2rsqDHLjvuDsmcjWGYd1p66 srxwWsKhXBrCHrzprGkOLFTCtfDDLxNtLzgLet809x3WVxhfhCcXn3LVetBBRDsGh7iMVgYbtUf eZwZd+LHwaJi0ZVuCOb/KDEKaFiJkayecFl7jZfFJfvlVFwf0/DF7Ixnhp0xMxnEMqQN9KC3t+z Oy8G1O1D7t2Ut4wV3Pf+rg/QR6MTS9brs2zUMRN/l9ZKfhGxRsMMeXH3tyb4MkI0+YqYL8aa9Jd S48zQ6bNySiTYHtJ1VKH2+4CG6Nvc9GAGadsUvop+NJfB1EvPa6JJ5W2qGUQ5h7sSweyGtO1bUj PDLvt/77DLwb+w2/k1DpG X-Received: by 2002:a05:6870:c205:b0:42c:49c7:a499 with SMTP id 586e51a60fabf-486e4ceaa22mr8316127fac.3.1789933544510; Sun, 20 Sep 2026 12:45:44 -0700 (PDT) Received: from [127.0.1.1] (174-29-1-49.hlrn.qwest.net. [174.29.1.49]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-4881f4d7861sm6103834fac.1.2026.09.20.12.45.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 20 Sep 2026 12:45:43 -0700 (PDT) From: James Hilliard Date: Sun, 20 Sep 2026 13:45:29 -0600 Subject: [PATCH net-next v4 3/6] net: stmmac: close the interface after failed hardware resume Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260920-submit-h616-emac1-v1-v4-3-8347dfe2eb7d@gmail.com> References: <20260920-submit-h616-emac1-v1-v4-0-8347dfe2eb7d@gmail.com> In-Reply-To: <20260920-submit-h616-emac1-v1-v4-0-8347dfe2eb7d@gmail.com> To: Richard Genoud , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Alexandre Torgue , Giuseppe Cavallaro , Jose Abreu , Maxime Chevallier , Maxime Coquelin , Russell King , Christian Marangi , Andrew Lunn , Heiner Kallweit , Tiezhu Yang , Huacai Chen Cc: Maxime Ripard , Alastair D'Silva , netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, James Hilliard X-Mailer: b4 0.15.2 System suspend disables NAPI and suspends phylink but retains the IRQs and DMA resources. If hardware setup fails during resume, the interface remains administratively up with NAPI still disabled. Closing it later calls napi_disable() a second time and can hang indefinitely. On hardware-setup or timestamping failure, stop DMA and disable the MAC, then release the suspended data path without repeating NAPI disable. Stop phylink directly from its suspended state rather than restarting the link on hardware which failed to resume. Drop the driver mutex before teardown, retaining RTNL across cleanup and network-core close. Close the netdev to detach the PHY, release its runtime-PM reference and clear its administrative state. Reattach the now-down netdev so a later open can allocate new resources and retry. Preserve the original resume error and leave successful resume unchanged. Fixes: 6896c2449a18 ("net: stmmac: Check stmmac_hw_setup() in stmmac_resume()") Signed-off-by: James Hilliard --- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index 89b773370894..18630ae62316 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -4283,7 +4283,7 @@ static int stmmac_open(struct net_device *dev) return ret; } -static void __stmmac_release(struct net_device *dev) +static void __stmmac_release(struct net_device *dev, bool napi_disabled) { struct stmmac_priv *priv = netdev_priv(dev); u8 chan; @@ -4296,7 +4296,9 @@ static void __stmmac_release(struct net_device *dev) /* Stop and disconnect the PHY */ phylink_stop(priv->phylink); - stmmac_disable_all_queues(priv); + /* Suspend has already disabled NAPI when hardware resume fails. */ + if (!napi_disabled) + stmmac_disable_all_queues(priv); for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++) hrtimer_cancel(&priv->dma_conf.tx_queue[chan].txtimer); @@ -4335,7 +4337,7 @@ static int stmmac_release(struct net_device *dev) if (device_may_wakeup(priv->device)) phylink_speed_down(priv->phylink, false); - __stmmac_release(dev); + __stmmac_release(dev, false); stmmac_legacy_serdes_power_down(priv); phylink_disconnect_phy(priv->phylink); @@ -6212,7 +6214,7 @@ static int stmmac_change_mtu(struct net_device *dev, int new_mtu) return PTR_ERR(dma_conf); } - __stmmac_release(dev); + __stmmac_release(dev, false); ret = __stmmac_open(dev, dma_conf); if (ret) { @@ -8415,7 +8417,7 @@ int stmmac_resume(struct device *dev) ret = stmmac_hw_setup(ndev); if (ret < 0) { netdev_err(priv->dev, "%s: Hw setup failed\n", __func__); - goto error_unlock; + goto error_stop_dma; } if (priv->ptp_enabled) { @@ -8454,9 +8456,13 @@ int stmmac_resume(struct device *dev) error_stop_dma: stmmac_stop_all_dma(priv); stmmac_mac_set(priv, priv->ioaddr, false); -error_unlock: - stmmac_legacy_serdes_power_down(priv); mutex_unlock(&priv->lock); + /* Release the suspended data path before ndo_stop(), which must not + * disable NAPI or free these resources a second time. + */ + __stmmac_release(ndev, true); + netif_close(ndev); + netif_device_attach(ndev); rtnl_unlock(); return ret; -- 2.53.0