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
next prev parent reply other threads:[~2026-08-03 6:34 UTC|newest]
Thread overview: 7+ 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]
2026-08-04 3:03 ` Ju Nan
2026-08-04 3:22 ` [PATCH v2] pinctrl: stm32: program the EXTI mux from .alloc instead of .activate Ju Nan
2026-08-04 3:38 ` sashiko-bot
2026-08-04 14:14 ` [PATCH v3] " Ju Nan
2026-08-04 15:12 ` sashiko-bot
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 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.