From: sashiko-bot@kernel.org
To: Zhipeng.wang_1@oss.nxp.com
Cc: Frank.Li@kernel.org, imx@lists.linux.dev
Subject: Re: [PATCH v6 6/9] irqchip/imx-irqsteer: Let devres own the clock
Date: Thu, 08 Oct 2026 09:13:08 +0000 [thread overview]
Message-ID: <sashiko-outbox-163905@kernel.org> (raw)
In-Reply-To: <20261008090231.796511-7-Zhipeng.wang_1@oss.nxp.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] pm: clock underflow warning on devres cleanup if pm_runtime_resume_and_get() fails
--
commit 7ea8370844753a72ff02a8217ace864b04cf2175
Author: Zhipeng Wang <zhipeng.wang_1@nxp.com>
irqchip/imx-irqsteer: Let devres own the clock
This commit transitions the imx-irqsteer driver to use devm_clk_get_enabled()
for clock lifecycle management. It also limits runtime PM callbacks to
clk_enable() and clk_disable() since preparation is handled by devres.
> diff --git a/drivers/irqchip/irq-imx-irqsteer.c b/drivers/irqchip/irq-imx-irqsteer.c
> index fa233de9bc2b2..15ee50f65d54c 100644
> --- a/drivers/irqchip/irq-imx-irqsteer.c
> +++ b/drivers/irqchip/irq-imx-irqsteer.c
[ ... ]
> @@ -273,15 +266,23 @@ static int imx_irqsteer_probe(struct platform_device *pdev)
> platform_set_drvdata(pdev, data);
>
> return 0;
> -out:
> - clk_disable_unprepare(data->ipg_clk);
> - return ret;
> }
>
> static void imx_irqsteer_remove(struct platform_device *pdev)
> {
> struct irqsteer_data *irqsteer_data = platform_get_drvdata(pdev);
> - int i;
> + int i, ret;
> +
> + /*
> + * The device may be runtime-suspended here, in which case the runtime
> + * suspend callback has already dropped the clock enable count. Resume
> + * it so the devres clk_disable_unprepare(), which runs after remove(),
> + * finds the clock enabled and stays balanced. On success drop the
> + * usage count again with pm_runtime_put_noidle(): it must not trigger a
> + * suspend (which would re-disable the clock) and must not leak to the
> + * next probe of this persistent device.
> + */
> + ret = pm_runtime_resume_and_get(&pdev->dev);
>
> for (i = 0; i < irqsteer_data->irq_count; i++) {
> if (!irqsteer_data->irq[i])
> @@ -294,8 +295,8 @@ static void imx_irqsteer_remove(struct platform_device *pdev)
>
> irq_domain_remove(irqsteer_data->domain);
>
> - if (!pm_runtime_status_suspended(&pdev->dev))
> - clk_disable_unprepare(irqsteer_data->ipg_clk);
> + if (ret >= 0)
> + pm_runtime_put_noidle(&pdev->dev);
[Severity: Medium]
If pm_runtime_resume_and_get() fails, the device remains suspended and its
clock remains disabled.
Since devres owns the clock via devm_clk_get_enabled(), won't devres
unconditionally call clk_disable_unprepare() after imx_irqsteer_remove()
returns?
Could this trigger a WARN(core->enable_count == 0) in the clock framework and
unbalance the clock state?
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261008090231.796511-1-Zhipeng.wang_1@oss.nxp.com?part=6
next prev parent reply other threads:[~2026-10-08 9:13 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-08 9:02 [PATCH v6 0/9] irqchip/imx-irqsteer: Allow building as module Zhipeng.wang_1
2026-10-08 9:02 ` [PATCH v6 1/9] irqchip/imx-irqsteer: Call chained_irq_exit() on the handler error path Zhipeng.wang_1
2026-10-08 9:02 ` [PATCH v6 2/9] irqchip/imx-irqsteer: Validate IRQ count before creating domain Zhipeng.wang_1
2026-10-08 20:36 ` Frank Li
2026-10-08 9:02 ` [PATCH v6 3/9] irqchip/imx-irqsteer: Dispose of parent IRQ mappings in remove() Zhipeng.wang_1
2026-10-08 9:02 ` [PATCH v6 4/9] irqchip/imx-irqsteer: Convert to devm_pm_runtime_set_active_enabled() Zhipeng.wang_1
2026-10-08 9:21 ` sashiko-bot
2026-10-08 20:46 ` Frank Li
2026-10-10 8:38 ` Zhipeng Wang (OSS)
2026-10-08 20:41 ` Frank Li
2026-10-10 8:26 ` Zhipeng Wang (OSS)
2026-10-12 19:25 ` Frank Li
2026-10-08 9:02 ` [PATCH v6 5/9] irqchip/imx-irqsteer: Mask all interrupts in probe() Zhipeng.wang_1
2026-10-08 9:18 ` sashiko-bot
2026-10-08 20:59 ` Frank Li
2026-10-08 9:02 ` [PATCH v6 6/9] irqchip/imx-irqsteer: Let devres own the clock Zhipeng.wang_1
2026-10-08 9:13 ` sashiko-bot [this message]
2026-10-08 20:54 ` Frank Li
2026-10-08 9:02 ` [PATCH v6 7/9] irqchip/imx-irqsteer: Allow building as module Zhipeng.wang_1
2026-10-08 9:19 ` sashiko-bot
2026-10-08 9:02 ` [PATCH v6 8/9] genirq/irqdomain: Add devm_irq_domain_create_linear() Zhipeng.wang_1
2026-10-08 9:02 ` [PATCH v6 9/9] irqchip/imx-irqsteer: Use devm_irq_domain_create_linear() Zhipeng.wang_1
2026-10-08 9:15 ` sashiko-bot
2026-10-08 21:01 ` Frank Li
2026-10-10 9:06 ` Zhipeng Wang (OSS)
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=sashiko-outbox-163905@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=Frank.Li@kernel.org \
--cc=Zhipeng.wang_1@oss.nxp.com \
--cc=imx@lists.linux.dev \
--cc=sashiko-reviews@lists.linux.dev \
/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.