Devicetree
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Mikhail Kshevetskiy" <mikhail.kshevetskiy@iopsys.eu>
Cc: conor+dt@kernel.org, devicetree@vger.kernel.org, robh@kernel.org
Subject: Re: [PATCH v11 21/37] pinctrl: airoha: fix edge-triggered interrupts handling
Date: Thu, 06 Aug 2026 22:23:52 +0000	[thread overview]
Message-ID: <20260806222353.1FE7F1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260806220615.4078303-22-mikhail.kshevetskiy@iopsys.eu>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Double-clearing of the interrupt status creates a race condition that leads to permanently lost edge interrupts.
- [High] Accessing a syscon regmap from within IRQ flow handler callbacks violates raw lock nesting rules, causing deadlocks on PREEMPT_RT.
--

--- Patch [21]: [PATCH v11 21/37] pinctrl: airoha: fix edge-triggered interrupts handling ---
commit 1d404909643557ff6d1ca5162d1185d537256a4a
Author: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
pinctrl: airoha: fix edge-triggered interrupts handling

This patch updates the airoha pinctrl driver to correct edge-triggered 
interrupt handling. It introduces a custom irq_ack callback and explicitly 
configures the flow handlers for edge and level interrupts.

> diff --git a/drivers/pinctrl/airoha/pinctrl-airoha.c b/drivers/pinctrl/airoha/pinctrl-airoha.c
> index 4859fcebac7de..960b0731459cd 100644
> --- a/drivers/pinctrl/airoha/pinctrl-airoha.c
> +++ b/drivers/pinctrl/airoha/pinctrl-airoha.c

[ ... ]

> +static void airoha_irq_ack(struct irq_data *data)
> +{
> +	struct gpio_chip *gc = irq_data_get_irq_chip_data(data);
> +	struct airoha_pinctrl *pinctrl = gpiochip_get_data(gc);
> +	struct airoha_pinctrl_gpiochip *gpiochip = &pinctrl->gpiochip;
> +	u8 offset = data->hwirq % AIROHA_PIN_BANK_SIZE;
> +	u8 index = data->hwirq / AIROHA_PIN_BANK_SIZE;
> +
> +	if (data->hwirq >= ARRAY_SIZE(gpiochip->irq_type))
> +		return;
> +
> +	regmap_write(pinctrl->regmap, gpiochip->status[index], BIT(offset));

[Severity: High]
Does this regmap_write call violate wait-type lock nesting rules on
preempt-rt systems?

With the changes to airoha_irq_type setting the flow handler to
handle_edge_irq, airoha_irq_ack is now invoked from the fast-path where a
raw_spinlock_t is held.

However, regmap_write on a syscon regmap acquires a standard spinlock_t,
which is a sleepable lock on preempt-rt kernels. Can this lead to
deadlocks or lockdep warnings?

> +}
> +
>  static int airoha_irq_type(struct irq_data *data, unsigned int type)

[ ... ]

> @@ -2673,8 +2702,7 @@ static irqreturn_t airoha_irq_handler(int irq, void *data)
>  		for_each_set_bit(irq, &status, AIROHA_PIN_BANK_SIZE) {
>  			u32 offset = irq + i * AIROHA_PIN_BANK_SIZE;
>  
> -			generic_handle_irq(irq_find_mapping(girq->domain,
> -							    offset));
> +			generic_handle_domain_irq(girq->domain, offset);
>  			regmap_write(pinctrl->regmap,
>  				     pinctrl->gpiochip.status[i], BIT(irq));

[Severity: High]
Is it possible for this manual regmap_write to cause newly latched edge 
interrupts to be permanently lost?

Because handle_edge_irq now correctly calls airoha_irq_ack to clear the
status bit early, a new edge interrupt can latch during handler execution.

After generic_handle_domain_irq returns, this trailing regmap_write clears
the same status bit again unconditionally. If a new edge interrupt arrives
while the domain handler is executing, won't this second clear wipe it out?

>  		}

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260806220615.4078303-1-mikhail.kshevetskiy@iopsys.eu?part=21

  reply	other threads:[~2026-08-06 22:23 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-06 22:05 [PATCH v11 00/37] pinctrl: airoha: split on shared and SoC drivers, add more SoCs Mikhail Kshevetskiy
2026-08-06 22:05 ` [PATCH v11 01/37] dt-bindings: pinctrl: airoha: en7581: fix misprint in i2s function name Mikhail Kshevetskiy
2026-08-06 22:05 ` [PATCH v11 02/37] dt-bindings: pinctrl: airoha: an7583: fix device tree binding schema Mikhail Kshevetskiy
2026-08-06 22:05 ` [PATCH v11 03/37] pinctrl: airoha: fix mdio bitfield names Mikhail Kshevetskiy
2026-08-06 22:05 ` [PATCH v11 04/37] pinctrl: airoha: an7581: fix pinconf of i2c_scl/i2c_sda pins Mikhail Kshevetskiy
2026-08-06 22:18   ` sashiko-bot
2026-08-06 22:05 ` [PATCH v11 05/37] pinctrl: airoha: an7583: fix I2C0_SDA_PD register bit order Mikhail Kshevetskiy
2026-08-06 22:05 ` [PATCH v11 06/37] dt-bindings: pinctrl: airoha: en7581: allow configuration of pcie_reset pins as gpio or pwm Mikhail Kshevetskiy
2026-08-06 22:31   ` sashiko-bot
2026-08-06 22:05 ` [PATCH v11 07/37] pinctrl: airoha: an7581: fix mux/conf of pcie_reset pins Mikhail Kshevetskiy
2026-08-06 22:05 ` [PATCH v11 08/37] dt-bindings: pinctrl: airoha: an7583: allow configuration of non-gpio default pins as gpio and pwm Mikhail Kshevetskiy
2026-08-06 22:26   ` sashiko-bot
2026-08-06 22:05 ` [PATCH v11 09/37] pinctrl: airoha: an7583: fix muxing of non-gpio default pins Mikhail Kshevetskiy
2026-08-06 22:05 ` [PATCH v11 10/37] pinctrl: airoha: fix I2C1 pin mux config for AN7581 Mikhail Kshevetskiy
2026-08-06 22:20   ` sashiko-bot
2026-08-06 22:05 ` [PATCH v11 11/37] dt-bindings: pinctrl: airoha: an7583: add i2c0 group for i2c function Mikhail Kshevetskiy
2026-08-06 22:20   ` sashiko-bot
2026-08-06 22:05 ` [PATCH v11 12/37] pinctrl: airoha: fix I2C pin mux config for AN7583 Mikhail Kshevetskiy
2026-08-06 22:05 ` [PATCH v11 13/37] pinctrl: airoha: fix AN7583 MDIO pin mux config Mikhail Kshevetskiy
2026-08-06 22:21   ` sashiko-bot
2026-08-06 22:05 ` [PATCH v11 14/37] pinctrl: airoha: an7583: fix spi group pins Mikhail Kshevetskiy
2026-08-06 22:05 ` [PATCH v11 15/37] pinctrl: airoha: add missed get_direction() function for gpio_chip Mikhail Kshevetskiy
2026-08-06 22:05 ` [PATCH v11 16/37] pinctrl: airoha: add set_direction() helper " Mikhail Kshevetskiy
2026-08-06 22:28   ` sashiko-bot
2026-08-06 22:05 ` [PATCH v11 17/37] pinctrl: airoha: minor improvements Mikhail Kshevetskiy
2026-08-06 22:21   ` sashiko-bot
2026-08-06 22:05 ` [PATCH v11 18/37] pinctrl: airoha: fix getting gpiochip/pinctrl pointers in the IRQ handling code Mikhail Kshevetskiy
2026-08-06 22:05 ` [PATCH v11 19/37] pinctrl: airoha: add missed IRQ resource helpers Mikhail Kshevetskiy
2026-08-06 22:21   ` sashiko-bot
2026-08-06 22:05 ` [PATCH v11 20/37] pinctrl: airoha: fix IRQ mask/unmask code Mikhail Kshevetskiy
2026-08-06 22:24   ` sashiko-bot
2026-08-06 22:05 ` [PATCH v11 21/37] pinctrl: airoha: fix edge-triggered interrupts handling Mikhail Kshevetskiy
2026-08-06 22:23   ` sashiko-bot [this message]
2026-08-06 22:06 ` [PATCH v11 22/37] pinctrl: airoha: remove not needed irq_type[] array Mikhail Kshevetskiy
2026-08-06 22:06 ` [PATCH v11 23/37] pinctrl: airoha: statically allocate gpio regs structure Mikhail Kshevetskiy
2026-08-06 22:31   ` sashiko-bot
2026-08-06 22:06 ` [PATCH v11 24/37] pinctrl: airoha: move common definitions to the separate header Mikhail Kshevetskiy
2026-08-06 22:06 ` [PATCH v11 25/37] pinctrl: airoha: split driver on shared code and SoC specific drivers Mikhail Kshevetskiy
2026-08-06 22:37   ` sashiko-bot
2026-08-06 22:06 ` [PATCH v11 26/37] pinctrl: airoha: an7581: remove en7581 prefix from variable names Mikhail Kshevetskiy
2026-08-06 22:06 ` [PATCH v11 27/37] pinctrl: airoha: an7583: remove an7583 prefix from variable names and definitions Mikhail Kshevetskiy
2026-08-06 22:06 ` [PATCH v11 28/37] pinctrl: airoha: an7583: rename registers to match its an7583 names Mikhail Kshevetskiy
2026-08-06 22:06 ` [PATCH v11 29/37] dt-bindings: pinctrl: airoha: an7583: add missed features Mikhail Kshevetskiy
2026-08-06 22:26   ` sashiko-bot
2026-08-06 22:06 ` [PATCH v11 30/37] pinctrl: airoha: an7583: add support for npu_uart pinmux Mikhail Kshevetskiy
2026-08-06 22:06 ` [PATCH v11 31/37] pinctrl: airoha: an7583: add support for pon_alt pinmux Mikhail Kshevetskiy
2026-08-06 22:06 ` [PATCH v11 32/37] pinctrl: airoha: an7583: add support for olt pinmux Mikhail Kshevetskiy
2026-08-06 22:06 ` [PATCH v11 33/37] dt-bindings: pinctrl: airoha: add support of en7523 pin controller Mikhail Kshevetskiy
2026-08-06 22:34   ` sashiko-bot
2026-08-06 22:06 ` [PATCH v11 34/37] pinctrl: airoha: add support of en7523 SoC Mikhail Kshevetskiy
2026-08-06 22:33   ` sashiko-bot
2026-08-06 22:06 ` [PATCH v11 35/37] pinctrl: airoha: try to find chip scu node by phandle first Mikhail Kshevetskiy
2026-08-06 22:29   ` sashiko-bot
2026-08-06 22:06 ` [PATCH v11 36/37] dt-bindings: pinctrl: airoha: add support of an7563 pin controller Mikhail Kshevetskiy
2026-08-06 22:34   ` sashiko-bot
2026-08-06 22:06 ` [PATCH v11 37/37] pinctrl: airoha: add support of an7563 SoC Mikhail Kshevetskiy
2026-08-07 16:07 ` [PATCH v11 00/37] pinctrl: airoha: split on shared and SoC drivers, add more SoCs Linus Walleij
2026-08-07 16:17   ` Benjamin Larsson
2026-08-07 16:38   ` Mikhail Kshevetskiy
2026-08-07 17:20     ` Linus Walleij
2026-08-07 17:22       ` Mikhail Kshevetskiy
2026-08-07 18:45 ` Linus Walleij
2026-08-07 19:02   ` Mikhail Kshevetskiy

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=20260806222353.1FE7F1F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=mikhail.kshevetskiy@iopsys.eu \
    --cc=robh@kernel.org \
    --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