From: Oleksij Rempel <o.rempel@pengutronix.de>
To: Kory Maincent <kory.maincent@bootlin.com>
Cc: netdev-bot+sashiko@kernel.org, github@szelinsky.de,
andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@kernel.org,
kuba@kernel.org, pabeni@redhat.com, piotr.kubik@adtran.com,
saikrishnag@marvell.com, horms@kernel.org, kyle.swenson@est.tech,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
kernel@pengutronix.de, broonie@kernel.org, lgirdwood@gmail.com,
mazziesaccount@gmail.com, Marc Kleine-Budde <mkl@pengutronix.de>
Subject: Re: [PATCH net 05/10] net: pse-pd: check the PI state under the lock when setting a power limit
Date: Tue, 20 Oct 2026 07:40:44 +0200 [thread overview]
Message-ID: <atb-3EIJynaRwuwe@pengutronix.de> (raw)
In-Reply-To: <bb8eaf92-2b5b-46a1-b39d-a29ae273a3b5@bootlin.com>
CCing regulator related folks.
On Mon, Oct 19, 2026 at 02:30:24PM +0200, Kory Maincent wrote:
>
> On 10/19/26 10:51, netdev-bot+sashiko@kernel.org wrote:
> > > previous_pw_allocated = pi->pw_allocated_mW;
> > > pw_diff = pw_req - previous_pw_allocated;
> > > if (!pw_diff) {
> >
> > [ ... ]
> >
> > > @@ -1908,21 +1920,17 @@ int pse_ethtool_set_pw_limit(struct pse_control *psec,
> > > /* Update power budget only in software power control case and
> > > * if a Power Device is powered.
> > > */
> > > - if (pse_pw_d_is_sw_pw_control(psec->pcdev,
> > > - psec->pcdev->pi[psec->id].pw_d) &&
> > > - psec->pcdev->pi[psec->id].admin_state_enabled &&
> > > - psec->pcdev->pi[psec->id].isr_pd_detected) {
> > > - ret = pse_pi_update_pw_budget(psec->pcdev, psec->id,
> > > - pw_limit, extack);
> > > - if (ret < 0)
> > > - return ret;
> > > - previous_pw_allocated = ret;
> > > - }
> > > + ret = pse_pi_update_pw_budget(psec->pcdev, psec->id, pw_limit,
> > > + &updated, extack);
> > > + if (ret < 0)
> > > + return ret;
> > > + previous_pw_allocated = ret;
> > > ret = regulator_set_current_limit(psec->ps, 0, uA);
> >
> > [Severity: Medium]
> > The scenario in the commit message, where budget is reserved for a port
> > that is no longer powered, looks closed now. But can the budget and the
> > hardware limit still drift apart in the other direction?
> >
> > The state check and the budget change now share one pcdev->lock critical
> > section. The hardware limit is still written in a separate one:
> >
> > pse_ethtool_set_pw_limit()
> > pse_pi_update_pw_budget() <- takes and drops pcdev->lock
> > regulator_set_current_limit()
> > pse_pi_set_current_limit() <- takes pcdev->lock again
> > ops->pi_set_pw_limit()
> >
> > The threaded pse_isr() only needs pcdev->lock, so it can run in between:
> >
> > CPU0 (ethtool set_pw_limit)
> > pse_pi_update_pw_budget()
> > sees isr_pd_detected == false
> > *updated = false, nothing reserved
> > mutex_unlock(&pcdev->lock)
> >
> > CPU1 (pse_isr, classification event)
> > pse_set_config_isr()
> > isr_pd_detected = true
> > _pse_pi_delivery_power_sw_pw_ctrl()
> > pw_req = min(pi_get_pw_req(), pi_get_pw_limit()) <- old hw limit
> > pse_pi_allocate_pw_budget(pcdev, id, pw_req, extack)
> > ops->pi_enable()
> >
> > CPU0
> > regulator_set_current_limit()
> > pse_pi_set_current_limit()
> > ops->pi_set_pw_limit() <- new, higher limit
>
> @Oleksij, Here is another example of an issue related to the PSE PI being a
> regulator provider.
>
> @Carlo, Kyle is working on a series that remove the support for a PSE PI
> being a regulator provider. We will see where it goes.
Removing the regulator provider support is a bad idea:
- We will end up implementing a poor man's regulator framework inside the
network subsystem. Networking folks will have to deal with physical constraints
already solved by the power management community, requiring a different mindset
and domain experience.
- We lose built-in regulator infrastructure: DT safety constraints
(regulator-max-microamp), over-current/under-voltage notifications, and
sysfs/debugfs (regulator_summary) visibility.
- The race above is just a lock scope issue across pcdev->lock and the
regulator call, not a flaw in the abstraction.
- Writing a custom power state machine in net/ will introduce more bugs than it
fixes - especially if we overestimate our ability to upstream complex custom
logic under LLM review supervision.
Let's fix the lock serialization instead of dropping the framework.
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
next prev parent reply other threads:[~2026-10-20 5:40 UTC|newest]
Thread overview: 35+ 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 19:56 ` Carlo Szelinsky
2026-10-19 9:31 ` Kory Maincent
2026-10-19 19:56 ` Carlo Szelinsky
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-19 19:56 ` Carlo Szelinsky
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-19 19:56 ` Carlo Szelinsky
2026-10-20 5:40 ` Oleksij Rempel [this message]
2026-10-20 10:19 ` Kory Maincent
2026-10-19 19:56 ` Carlo Szelinsky
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-19 19:56 ` Carlo Szelinsky
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-19 19:56 ` Carlo Szelinsky
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
2026-10-19 19:56 ` Carlo Szelinsky
2026-10-18 23:32 ` [PATCH net 00/10] net: pse-pd: assorted lifetime and error-path fixes Ross Cawston
2026-10-19 19:56 ` Carlo Szelinsky
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=atb-3EIJynaRwuwe@pengutronix.de \
--to=o.rempel@pengutronix.de \
--cc=andrew+netdev@lunn.ch \
--cc=broonie@kernel.org \
--cc=davem@davemloft.net \
--cc=edumazet@kernel.org \
--cc=github@szelinsky.de \
--cc=horms@kernel.org \
--cc=kernel@pengutronix.de \
--cc=kory.maincent@bootlin.com \
--cc=kuba@kernel.org \
--cc=kyle.swenson@est.tech \
--cc=lgirdwood@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mazziesaccount@gmail.com \
--cc=mkl@pengutronix.de \
--cc=netdev-bot+sashiko@kernel.org \
--cc=netdev@vger.kernel.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.