mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Kory Maincent <kory.maincent@bootlin.com>
To: Carlo Szelinsky <github@szelinsky.de>,
	Oleksij Rempel <o.rempel@pengutronix.de>,
	Andrew Lunn <andrew+netdev@lunn.ch>,
	"David S . Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@kernel.org>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>
Cc: Piotr Kubik <piotr.kubik@adtran.com>,
	Sai Krishna <saikrishnag@marvell.com>,
	Simon Horman <horms@kernel.org>,
	Kyle Swenson <kyle.swenson@est.tech>,
	netdev-bot+sashiko@kernel.org, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH net 10/10] net: pse-pd: reject a power limit whose current does not fit an int
Date: Mon, 19 Oct 2026 14:53:02 +0200	[thread overview]
Message-ID: <8f1a899c-e026-4887-8d5d-400c5c73581f@bootlin.com> (raw)
In-Reply-To: <20261018082314.48950-11-github@szelinsky.de>



On 10/18/26 10:23, Carlo Szelinsky wrote:
> pse_ethtool_set_pw_limit() turns the power limit into a current as
> mW * 10^9 / uV and stores it in an int. For the largest allowed limit,
> 99900 mW, that overflows below about 46.5 mV. Only 0 V is rejected, and
> si3474 reports the measured voltage of each port. A negative result then
> hits the BUG_ON() in regulator_check_current_limit().
> 
> pse_pi_get_current_limit() does the same conversion and can return a
> wrapped value that looks like an error code.
> 
> Do the conversion in one helper that returns -ERANGE when the result
> does not fit an int.

Same as patch 9. This is not a fix.
Can you send both to net-next instead.
You can add my R-by tag to it.

> Fixes: 4a83abcef5f4 ("net: pse-pd: Add new power limit get and set c33 features")
> Signed-off-by: Carlo Szelinsky <github@szelinsky.de>
> ---
>   drivers/net/pse-pd/pse_core.c | 25 +++++++++++++++----------
>   1 file changed, 15 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/net/pse-pd/pse_core.c b/drivers/net/pse-pd/pse_core.c
> index 0d1e5d5039f8..3e333bef4e48 100644
> --- a/drivers/net/pse-pd/pse_core.c
> +++ b/drivers/net/pse-pd/pse_core.c
> @@ -741,12 +741,19 @@ static int pse_pi_get_voltage(struct regulator_dev *rdev)
>   	return ret;
>   }
>   
> +/* uA = mW * 1000000000 / uV, which does not fit an int for a low uV */
> +static int pse_mw_to_ua(unsigned int mW, int uV)
> +{
> +	u64 uA = DIV_ROUND_CLOSEST_ULL((u64)mW * 1000000000ull, uV);
> +
> +	return uA > INT_MAX ? -ERANGE : uA;
> +}
> +
>   static int pse_pi_get_current_limit(struct regulator_dev *rdev)
>   {
>   	struct pse_controller_dev *pcdev = rdev_get_drvdata(rdev);
>   	const struct pse_controller_ops *ops;
>   	int id, uV, mW, ret;
> -	s64 tmp_64;
>   
>   	ops = pcdev->ops;
>   	id = rdev_get_id(rdev);
> @@ -769,10 +776,7 @@ static int pse_pi_get_current_limit(struct regulator_dev *rdev)
>   		goto out;
>   	uV = ret;
>   
> -	tmp_64 = mW;
> -	tmp_64 *= 1000000000ull;
> -	/* uA = mW * 1000000000 / uV */
> -	ret = DIV_ROUND_CLOSEST_ULL(tmp_64, uV);
> +	ret = pse_mw_to_ua(mW, uV);
>   
>   out:
>   	mutex_unlock(&pcdev->lock);
> @@ -1910,7 +1914,6 @@ int pse_ethtool_set_pw_limit(struct pse_control *psec,
>   {
>   	int uV, uA, ret, previous_pw_allocated = 0;
>   	bool updated;
> -	s64 tmp_64;
>   
>   	if (pw_limit > MAX_PI_PW)
>   		return -ERANGE;
> @@ -1928,10 +1931,12 @@ int pse_ethtool_set_pw_limit(struct pse_control *psec,
>   	}
>   	uV = ret;
>   
> -	tmp_64 = pw_limit;
> -	tmp_64 *= 1000000000ull;
> -	/* uA = mW * 1000000000 / uV */
> -	uA = DIV_ROUND_CLOSEST_ULL(tmp_64, uV);
> +	uA = pse_mw_to_ua(pw_limit, uV);
> +	if (uA < 0) {
> +		NL_SET_ERR_MSG(extack,
> +			       "PSE voltage read is too low to set the limit");
> +		return uA;
> +	}
>   
>   	/* Update power budget only in software power control case and
>   	 * if a Power Device is powered.

-- 
Köry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com


  reply	other threads:[~2026-10-19 12:53 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-18  8:23 [PATCH net 00/10] net: pse-pd: assorted lifetime and error-path fixes Carlo Szelinsky
2026-10-18  8:23 ` [PATCH net 01/10] net: pse-pd: size the notification kfifo after defaulting nr_lines Carlo Szelinsky
2026-10-19  9:22   ` Kory Maincent
2026-10-18  8:23 ` [PATCH net 02/10] net: pse-pd: fix module refcount leak in pse_control_get_internal() Carlo Szelinsky
2026-10-19  8:51   ` netdev-bot+sashiko
2026-10-19  9:31   ` Kory Maincent
2026-10-18  8:23 ` [PATCH net 03/10] net: pse-pd: do not keep a failed IRQ in pcdev->irq Carlo Szelinsky
2026-10-19  9:33   ` Kory Maincent
2026-10-18  8:23 ` [PATCH net 04/10] net: pse-pd: do not reach a freed PHY from the notification worker Carlo Szelinsky
2026-10-19  8:51   ` netdev-bot+sashiko
2026-10-18  8:23 ` [PATCH net 05/10] net: pse-pd: check the PI state under the lock when setting a power limit Carlo Szelinsky
2026-10-19  8:51   ` netdev-bot+sashiko
2026-10-19 12:30     ` Kory Maincent
2026-10-18  8:23 ` [PATCH net 06/10] net: pse-pd: do not tie a shared power domain to its creator's devres Carlo Szelinsky
2026-10-19  8:51   ` netdev-bot+sashiko
2026-10-18  8:23 ` [PATCH net 07/10] net: pse-pd: pd692x0: release the manager power budget through devres Carlo Szelinsky
2026-10-19 12:45   ` Kory Maincent
2026-10-18  8:23 ` [PATCH net 08/10] net: pse-pd: pd692x0: defer probe while a manager supply is unresolved Carlo Szelinsky
2026-10-19 12:47   ` Kory Maincent
2026-10-18  8:23 ` [PATCH net 09/10] net: pse-pd: si3474: fix use-after-free in ancillary client error path Carlo Szelinsky
2026-10-19 12:50   ` Kory Maincent
2026-10-18  8:23 ` [PATCH net 10/10] net: pse-pd: reject a power limit whose current does not fit an int Carlo Szelinsky
2026-10-19 12:53   ` Kory Maincent [this message]
2026-10-18 23:32 ` [PATCH net 00/10] net: pse-pd: assorted lifetime and error-path fixes Ross Cawston

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8f1a899c-e026-4887-8d5d-400c5c73581f@bootlin.com \
    --to=kory.maincent@bootlin.com \
    --cc=andrew+netdev@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=edumazet@kernel.org \
    --cc=github@szelinsky.de \
    --cc=horms@kernel.org \
    --cc=kuba@kernel.org \
    --cc=kyle.swenson@est.tech \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev-bot+sashiko@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=o.rempel@pengutronix.de \
    --cc=pabeni@redhat.com \
    --cc=piotr.kubik@adtran.com \
    --cc=saikrishnag@marvell.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®