From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=85.214.127.56 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793743373; b=AisHXtlGqXhfdaaU0xCcOo5U4KMJXn2Vl0trO1motBsuEsO7K7Qd71PV42jH7Di1o/vs BJJWzTRpObdb/fKJGAurSzTGOtr7K9Nb2a9SqVRvYK7JbIfTPjnsGXtMizcmZGOlDjlTx BfJVITm4mPYzbP3MvAzzejmb5mcbLqOEaF0bFlRykhGT3+w4hDwGD7pyZpapt+EZjcvNo p+lJzl+tFqJX1/MhRGyIvvR3grS8LbxG1cz9DKs6jSpbfOCgciY6NAn8+703M5Lsxe6b6 ZqaLVu3IoJcuiU1Nd4Osg1E9KjFQsxxVtuJ+yVZcvQuYWH2vVCw1GjJ4HeY3hC98x+w== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793743373; h=DMARC-Filter:Received:DKIM-Signature:X-Virus-Scanned:Received: Received:From:To:Cc:Subject:Date:Message-ID:X-Mailer:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding; bh=UpfR0l4rFdTHu2SB/T5U0b/UIosYvrWyx1jT7HeevAk=; b=5gHaCHm1TbmF68FgKjh6oW/8w3i8haEcJ0hQFICvpePE9KyczV9nXOzR3dGlYkiGrupw 574D14Myjo2gJJRjNlAzj1vNPH7UL13HmgUSEQYPwsYTNChQ0jRHNS7eecGdzcNF9mYQt vzpmHi4Ot1TUBcPaYDG07SjOKjRzO6yoTn20PTY1XlgGsJ2VK6MT/Ix7cogyDnY/wKcrB JFPE35MnxSOVUbYaI0tO9MnPFzpjn2XQrgMj0KdXptH/CO1UDlQtNRvTCZHkYCT8YEylT P/gf+Pxdsoo6rAR7+nq6zUhRVIMnEUIp2mOM9JCAAHosqcpPeKNoAtk/vf/IdL7mqCg== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=szelinsky.de; spf=pass smtp.mailfrom=szelinsky.de; dkim=temperror header.d=szelinsky.de header.i=@szelinsky.de header.a=rsa-sha256 header.s=mail header.b=lJC7xQ6G; arc=none smtp.remote-ip=85.214.127.56 Received: from szelinsky.de (szelinsky.de [85.214.127.56]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4BE7E606D81B; Tue, 3 Nov 2026 22:02:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 4BE7E606D81B Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=szelinsky.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=szelinsky.de Authentication-Results: smtp.subspace.kernel.org; dkim=temperror header.d=szelinsky.de header.i=@szelinsky.de header.a=rsa-sha256 header.s=mail header.b=lJC7xQ6G Received: from localhost (localhost [127.0.0.1]) by szelinsky.de (Postfix) with ESMTP id 5E201E83701; Tue, 03 Nov 2026 23:02:46 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=szelinsky.de; s=mail; t=1793743366; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=UpfR0l4rFdTHu2SB/T5U0b/UIosYvrWyx1jT7HeevAk=; b=lJC7xQ6Gg9i1USb3z3hev7Ari/wxaxpVvLQZmkoLb3j33KUY6VIkC83MMrnJHWeTQgvsiz Yon5bnIedznKUbVSwrzDcgdkMQRUU3MJyRK9GJdV3UA+zT95en7czfNxD783mv9SLaO8p+ sKc5/EL0ic7KFPfki731uZFzsc1MLL/SrQGj6VyfUsfHrKuKoP4TUlUgBgOZtWCt8RVg+v Xao7EDatclOYEhXpDOVh9363MzNoYe5seCasE8C7AoPgnDC2FkdavMlclFC/FnxMFG56kq kACy/Bq+b4IgGxJqiMj7rm5wy3P/+k1IGy7q3267Gi6N1e3ahsDGvzo2bk2x+A== X-Virus-Scanned: Debian amavis at szelinsky.de Received: from szelinsky.de ([127.0.0.1]) by localhost (szelinsky.de [127.0.0.1]) (amavis, port 10025) with ESMTP id NN7KtEizZYEC; Tue, 3 Nov 2026 23:02:46 +0100 (CET) Received: from p14sgen5.lanhh (dslb-088-070-183-026.088.070.pools.vodafone-ip.de [88.70.183.26]) by szelinsky.de (Postfix) with ESMTPSA; Tue, 03 Nov 2026 23:02:45 +0100 (CET) From: Carlo Szelinsky To: Oleksij Rempel , Kory Maincent , Andrew Lunn , "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Simon Horman , Mark Brown , Liam Girdwood , Maxime Chevallier , Kyle Swenson , Ross Cawston , netdev-bot+sashiko@kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Carlo Szelinsky Subject: [PATCH net v3 13/14] net: pse-pd: pd692x0: release the manager power budget through devres Date: Tue, 3 Nov 2026 23:02:16 +0100 Message-ID: <20261103220217.1131971-14-github@szelinsky.de> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20261103220217.1131971-1-github@szelinsky.de> References: <20261103220217.1131971-1-github@szelinsky.de> X-Mailing-List: netdev@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit pd692x0 reserves a power budget on each manager's supply in setup_pi_matrix(), but gives it back only on that function's own errors and in remove(). If probe fails later, or the request fails for one manager after others succeeded, the budget stays reserved on vmain. Each probe retry, e.g. after -EPROBE_DEFER, reserves it again until nothing is left. Release the budget from a devm action instead, and drop the explicit release calls. Found by code inspection. Not reproduced. Fixes: 1c67f9c54cdc ("net: pse-pd: pd692x0: Fix power budget leak in manager setup error path") Reviewed-by: Kory Maincent Signed-off-by: Carlo Szelinsky --- drivers/net/pse-pd/pd692x0.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/drivers/net/pse-pd/pd692x0.c b/drivers/net/pse-pd/pd692x0.c index 209de9cec849..34f0dfbccd06 100644 --- a/drivers/net/pse-pd/pd692x0.c +++ b/drivers/net/pse-pd/pd692x0.c @@ -1224,8 +1224,9 @@ static void pd692x0_of_put_managers(struct pd692x0_priv *priv, } } -static void pd692x0_managers_free_pw_budget(struct pd692x0_priv *priv) +static void pd692x0_managers_free_pw_budget(void *data) { + struct pd692x0_priv *priv = data; int i; for (i = 0; i < PD692X0_MAX_MANAGERS; i++) { @@ -1279,31 +1280,39 @@ static int pd692x0_setup_pi_matrix(struct pse_controller_dev *pcdev) if (ret) goto err_of_managers; + /* Frees whatever pd692x0_req_managers_pw_budget() manages to + * request, on any later probe failure and on unbind. Added after + * the manager regulators so that it runs before devres unregisters + * them and their supply goes away. + */ + ret = devm_add_action_or_reset(&priv->client->dev, + pd692x0_managers_free_pw_budget, priv); + if (ret) + goto err_of_managers; + ret = pd692x0_req_managers_pw_budget(priv); if (ret) goto err_of_managers; ret = pd692x0_set_ports_matrix(priv, manager); if (ret) - goto err_managers_req_pw; + goto err_of_managers; /* Do not init the conf if it is already saved */ if (!priv->cfg_saved) { ret = pd692x0_hw_conf_init(priv); if (ret) - goto err_managers_req_pw; + goto err_of_managers; ret = pd692x0_save_user_byte(priv); if (ret) - goto err_managers_req_pw; + goto err_of_managers; } pd692x0_of_put_managers(priv, manager); kfree(manager); return 0; -err_managers_req_pw: - pd692x0_managers_free_pw_budget(priv); err_of_managers: pd692x0_of_put_managers(priv, manager); err_free_manager: @@ -1855,7 +1864,6 @@ static void pd692x0_i2c_remove(struct i2c_client *client) { struct pd692x0_priv *priv = i2c_get_clientdata(client); - pd692x0_managers_free_pw_budget(priv); firmware_upload_unregister(priv->fwl); } -- 2.43.0