From: sashiko-bot@kernel.org
To: "Ju Nan" <junan76@163.com>
Cc: mfd@lists.linux.dev, linux-rt-devel@lists.linux.dev,
lee@kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] pinctrl: stm32: use a raw spinlock regmap to program the EXTI mux
Date: Mon, 03 Aug 2026 06:34:30 +0000 [thread overview]
Message-ID: <20260803063431.205EC1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260803061718.43210-1-junan76@163.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Bypassing standard syscon regmap initialization leaves the syscfg clock disabled, leading to hardware bus faults on platforms where the syscfg node requires a clock.
- [High] If another driver sharing the syscon node probes before pinctrl, the generic syscon layer will create a default regmap without `use_raw_spinlock`, causing the PREEMPT_RT sleeping-in-atomic bug to persist.
--
--- Patch [1]: [PATCH] pinctrl: stm32: use a raw spinlock regmap to program the EXTI mux ---
commit e662d8a81eaff2488e3427af7c289ca0a5b94fde
Author: Ju Nan <junan76@163.com>
Subject: pinctrl: stm32: use a raw spinlock regmap to program the EXTI mux
This commit addresses an invalid wait context issue on PREEMPT_RT by manually
publishing a regmap with use_raw_spinlock = true for the st,syscfg node. It
attempts to preempt the generic syscon layer from instantiating a default
regmap protected by a sleeping spinlock. The interrupt multiplexer is then
programmed using this raw-spinlock-protected regmap.
Closes: https://lore.kernel.org/all/20220202174430.pf37tt6lua2op3gc@pengutronix.de/
> diff --git a/drivers/pinctrl/stm32/pinctrl-stm32.c b/drivers/pinctrl/stm32/pinctrl-stm32.c
> index 6a99708a5a23c..39df117489d12 100644
> --- a/drivers/pinctrl/stm32/pinctrl-stm32.c
> +++ b/drivers/pinctrl/stm32/pinctrl-stm32.c
[ ... ]
> @@ -1757,6 +1757,68 @@ static struct irq_domain *stm32_pctrl_get_irq_domain(struct platform_device *pde
[ ... ]
> +static void stm32_pctrl_publish_syscfg_regmap(struct device_node *np)
> +{
> + struct regmap_config config = stm32_pctrl_syscfg_regmap_config;
> + struct device_node *syscfg_np;
> + struct regmap *regmap;
> + void __iomem *base;
> + struct resource res;
[ ... ]
> + /*
> + * The regmap is handed over to the syscon layer, which never releases
> + * it, so it must outlive this driver: no device managed allocation
> + * here, and no device to attach it to either.
> + */
> + regmap = regmap_init_mmio(NULL, base, &config);
> + if (IS_ERR(regmap)) {
> + iounmap(base);
> + goto out_put;
> + }
[Severity: High]
Does bypassing the standard syscon regmap initialization leave the syscfg
clock disabled?
The generic syscon handling normally calls of_clk_get() and
regmap_mmio_attach_clk(). Since this manual initialization skips that, the
clock is never attached to the regmap.
On platforms like STM32F4/F7/H7 where the syscfg node explicitly requires a
clock, could writing to the EXTI mux registers in stm32_gpio_domain_activate()
with the clock disabled trigger an imprecise external abort (bus fault)?
> +
> + /*
> + * A regmap is already registered for that node, most likely by the
> + * other pinctrl instance sharing it. Drop ours and use that one.
> + */
> + if (of_syscon_register_regmap(syscfg_np, regmap)) {
> + regmap_exit(regmap);
> + iounmap(base);
> + }
[Severity: High]
If another driver sharing the st,syscfg node (like Ethernet MAC, I2C, or USB)
probes before pinctrl, won't the generic syscon layer have already
instantiated a default regmap without use_raw_spinlock?
In that scenario, of_syscon_register_regmap() would return an error and the
driver silently discards its raw regmap. Since the driver then falls back to
the already registered sleeping regmap, does this cause the PREEMPT_RT
sleeping-in-atomic bug to persist when stm32_gpio_domain_activate() writes to
the regmap under the raw desc->lock?
> +
> +out_put:
> + of_node_put(syscfg_np);
> +}
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260803061718.43210-1-junan76@163.com?part=1
prev parent reply other threads:[~2026-08-03 6:34 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-03 6:17 [PATCH] pinctrl: stm32: use a raw spinlock regmap to program the EXTI mux Ju Nan
2026-08-03 6:34 ` sashiko-bot [this message]
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=20260803063431.205EC1F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=junan76@163.com \
--cc=lee@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rt-devel@lists.linux.dev \
--cc=mfd@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).