linux-rt-devel.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
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

      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).