All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Chen-Yu Tsai" <wenst@chromium.org>
Cc: devicetree@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org
Subject: Re: [PATCH v4 03/14] power: sequencing: Add pwrseq_power_is_on()
Date: Thu, 09 Jul 2026 10:35:54 +0000	[thread overview]
Message-ID: <20260709103554.A87381F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260709095726.704448-4-wenst@chromium.org>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:

New issues:
- [High] pwrseq_power_is_on() returns negative error codes for optional descriptors and disabled builds, which evaluate to true in boolean contexts and break the optional descriptor pattern.

Pre-existing issues:
- [High] A TOCTOU race condition in the lockless check of desc->powered_on causes a reference count leak for unit->enable_count.
--

--- Patch [3]: [PATCH v4 03/14] power: sequencing: Add pwrseq_power_is_on() ---
commit f5ad172d0dbaf149ecc08081af49a9c15c411aa1
Author: Chen-Yu Tsai <wenst@chromium.org>
power: sequencing: Add pwrseq_power_is_on()

This patch introduces pwrseq_power_is_on() to expose the internal power on
state of the power sequencer to consumers. It also adds a fallback stub
for unconfigured builds.

> diff --git a/drivers/power/sequencing/core.c b/drivers/power/sequencing/core.c
> --- a/drivers/power/sequencing/core.c
> +++ b/drivers/power/sequencing/core.c
> @@ -968,6 +968,24 @@ int pwrseq_power_off(struct pwrseq_desc *desc)
>  }
>  EXPORT_SYMBOL_GPL(pwrseq_power_off);

[Severity: High]
This is a pre-existing issue, but can the lockless check of desc->powered_on
in pwrseq_power_on() and pwrseq_power_off() cause a reference count leak
for unit->enable_count?

If multiple threads concurrently call pwrseq_power_on() on the same
descriptor, both can bypass the lockless check:

pwrseq_power_on() {
        if (!desc || desc->powered_on)
                return 0;
        // threads proceed and increment unit->enable_count under lock
}

However, when pwrseq_power_off() is called, it will only decrement the count
once, because the first call sets desc->powered_on = false. Subsequent
power-off calls return early:

pwrseq_power_off() {
        if (!desc || !desc->powered_on)
                return 0; // early exit
        // ...
        desc->powered_on = false;
}

Could this leave the hardware powered on indefinitely and trigger a WARN
on device removal?

> +/**
> + * pwrseq_power_is_on() - Queries the last requested state of the power sequencer.
[ ... ]
> + */
> +int pwrseq_power_is_on(struct pwrseq_desc *desc)
> +{
> +	if (!desc)
> +		return -EINVAL;

[Severity: High]
Will this return value break the optional descriptor pattern?

Consumers using optional power sequencers might call this with a NULL
descriptor. Since -EINVAL evaluates to true in a C boolean context,
would this cause the caller to incorrectly assume the power is on?

Could we return 0 here instead, similar to how pwrseq_power_on() gracefully
returns 0 for NULL descriptors?

> +	return desc->powered_on;
> +}
> +EXPORT_SYMBOL_GPL(pwrseq_power_is_on);
> +

[ ... ]

> diff --git a/include/linux/pwrseq/consumer.h b/include/linux/pwrseq/consumer.h
> --- a/include/linux/pwrseq/consumer.h
> +++ b/include/linux/pwrseq/consumer.h

[ ... ]

> @@ -53,6 +54,11 @@ static inline int pwrseq_power_off(struct pwrseq_desc *desc)
>  	return -ENOSYS;
>  }
>  
> +static inline int pwrseq_power_is_on(struct pwrseq_desc *desc)
> +{
> +	return -ENOSYS;
> +}

[Severity: High]
Does this fallback stub cause similar issues for unconfigured builds?

Returning -ENOSYS will also evaluate to true in boolean checks.
Should this return 0 to ensure consistent behavior when POWER_SEQUENCING
is disabled?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260709095726.704448-1-wenst@chromium.org?part=3

  parent reply	other threads:[~2026-07-09 10:35 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-09  9:57 [PATCH v4 00/14] arm64: mediatek: Add M.2 E-key slot on Chromebooks Chen-Yu Tsai
2026-07-09  9:57 ` [PATCH v4 01/14] device property: Add fwnode_graph_get_port_by_id() Chen-Yu Tsai
2026-07-09 10:13   ` sashiko-bot
2026-07-09  9:57 ` [PATCH v4 02/14] device property: Add fwnode_graph_get_next_port_endpoint() Chen-Yu Tsai
2026-07-09 10:26   ` sashiko-bot
2026-07-09  9:57 ` [PATCH v4 03/14] power: sequencing: Add pwrseq_power_is_on() Chen-Yu Tsai
2026-07-09 10:33   ` Andy Shevchenko
2026-07-09 10:35   ` sashiko-bot [this message]
2026-07-09  9:57 ` [PATCH v4 04/14] usb: hub: Return actual error from hub_configure() in hub_probe() Chen-Yu Tsai
2026-07-09  9:57 ` [PATCH v4 05/14] usb: hub: Associate port@ fwnode with USB port device Chen-Yu Tsai
2026-07-09 11:04   ` sashiko-bot
2026-07-10 12:08   ` Greg Kroah-Hartman
2026-07-13  6:40     ` Chen-Yu Tsai
2026-07-09  9:57 ` [PATCH v4 06/14] usb: core: Move struct usb_port and related APIs to port.h Chen-Yu Tsai
2026-07-09 10:36   ` Andy Shevchenko
2026-07-09 14:30   ` Bartosz Golaszewski
2026-07-09  9:57 ` [PATCH v4 07/14] usb: hub: Pass |struct usb_port*| to usb_port_is_power_on() Chen-Yu Tsai
2026-07-09 10:38   ` Andy Shevchenko
2026-07-09  9:57 ` [PATCH v4 08/14] usb: hub: Use usb_hub_set_port_power() to control port power everywhere Chen-Yu Tsai
2026-07-09 10:39   ` Andy Shevchenko
2026-07-09  9:57 ` [PATCH v4 09/14] usb: hub: Power on connected M.2 E-key connectors with power sequencing API Chen-Yu Tsai
2026-07-09 10:53   ` Andy Shevchenko
2026-07-09 11:45   ` sashiko-bot
2026-07-09  9:57 ` [PATCH v4 10/14] dt-bindings: usb: mediatek,mtk-xhci: Switch to ports for USB connections Chen-Yu Tsai
2026-07-09 11:58   ` sashiko-bot
2026-07-09 14:31   ` Bartosz Golaszewski
2026-07-09  9:57 ` [PATCH v4 11/14] power: sequencing: pcie-m2: support matching on remote "port" node Chen-Yu Tsai
2026-07-09 10:55   ` Andy Shevchenko
2026-07-09  9:57 ` [PATCH v4 12/14] power: sequencing: pcie-m2: Add usb and sdio targets for E-key connector Chen-Yu Tsai
2026-07-13  9:43   ` Wei Deng
2026-07-13  9:57     ` Chen-Yu Tsai
2026-07-13 10:42       ` Chen-Yu Tsai
2026-07-09  9:57 ` [PATCH v4 13/14] arm64: dts: mediatek: mt8195-cherry: Add M.2 E-key slot Chen-Yu Tsai
2026-07-09 12:35   ` sashiko-bot
2026-07-09  9:57 ` [PATCH v4 14/14] arm64: dts: mediatek: mt8188-geralt: Add WiFi/BT as " Chen-Yu Tsai

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=20260709103554.A87381F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=robh@kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=wenst@chromium.org \
    /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.