Linux kernel and device drivers for NXP i.MX platforms
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Peng Fan (OSS)" <peng.fan@oss.nxp.com>
Cc: imx@lists.linux.dev, Frank.Li@kernel.org, linux-gpio@vger.kernel.org
Subject: Re: [PATCH v4 10/10] gpio: mxc: use BIT() macro for single-bit operations
Date: Wed, 07 Oct 2026 10:56:01 +0000	[thread overview]
Message-ID: <sashiko-outbox-162890@kernel.org> (raw)
In-Reply-To: <20261007-gpio-mxc-cleanup-v4-10-c9f5a8b50df9@nxp.com>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] gpio: mxc: race condition in gpio_set_irq_type updating port->both_edges
--

commit 71b368728fc9ada85f870f46f968a6583a740b0c
Author: Peng Fan <peng.fan@nxp.com>

gpio: mxc: use BIT() macro for single-bit operations

This commit replaces open-coded shifts with the BIT() macro to avoid potential
signed-shift issues and improve consistency. No functional changes are
intended.

> diff --git a/drivers/gpio/gpio-mxc.c b/drivers/gpio/gpio-mxc.c
> index 39de616cd434f..ad50b602c4a16 100644
> --- a/drivers/gpio/gpio-mxc.c
> +++ b/drivers/gpio/gpio-mxc.c
> @@ -209,7 +209,7 @@ static int gpio_set_irq_type(struct irq_data *d, u32 type)
>  	int edge;
>  	void __iomem *reg = port->base;
>  
> -	port->both_edges &= ~(1 << gpio_idx);
> +	port->both_edges &= ~BIT(gpio_idx);

[Severity: Medium]
Could this unprotected read-modify-write on the shared port bitmask lead to a
race condition?

Concurrent updates to the shared port->both_edges bitmask could cause one CPU
to overwrite and lose the IRQ edge configuration of another pin, potentially
leading to missed interrupts or stuck IRQ lines.

This can happen during parallel device probing or via userspace GPIO
configuration (e.g., libgpiod/sysfs) when two CPU cores concurrently call
gpio_set_irq_type() for different GPIO pins on the same port.

The IRQ subsystem serializes irq_set_type() on a per-pin basis (via
desc->lock), not per-port.

While the driver correctly takes the port-wide lock later in this function via
scoped_guard(gpio_generic_lock_irqsave, &port->gen_gc) for its MMIO register
updates, it performs read-modify-write operations on the shared
port->both_edges software mask completely outside of this critical section.

[ ... ]

> @@ -229,7 +229,7 @@ static int gpio_set_irq_type(struct irq_data *d, u32 type)
>  				edge = GPIO_INT_HIGH_LEV;
>  				pr_debug("mxc: set GPIO %d to high trigger\n", gpio_idx);
>  			}
> -			port->both_edges |= 1 << gpio_idx;
> +			port->both_edges |= BIT(gpio_idx);

[Severity: Medium]
This appears to be a second unprotected modification in the IRQ_TYPE_EDGE_BOTH
path.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261007-gpio-mxc-cleanup-v4-0-c9f5a8b50df9@nxp.com?part=10

  reply	other threads:[~2026-10-07 10:56 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-07 10:44 [PATCH v4 00/10] gpio: mxc: bug fixes and probe cleanup Peng Fan (OSS)
2026-10-07 10:44 ` [PATCH v4 01/10] gpio: mxc: fix race between chained IRQ handler install and probe completion Peng Fan (OSS)
2026-10-07 10:57   ` sashiko-bot
2026-10-08  9:44     ` Bartosz Golaszewski
2026-10-09  0:57       ` Peng Fan
2026-10-07 10:44 ` [PATCH v4 02/10] gpio: mxc: fix wakeup_pads bit operations Peng Fan (OSS)
2026-10-08 19:59   ` Frank Li
2026-10-09  0:59     ` Peng Fan
2026-10-07 10:44 ` [PATCH v4 03/10] gpio: mxc: use for_each_set_bit() to iterate wakeup pads Peng Fan (OSS)
2026-10-08 20:00   ` Frank Li
2026-10-07 10:44 ` [PATCH v4 04/10] gpio: mxc: replace of_device_is_compatible() with hwdata flags Peng Fan (OSS)
2026-10-08 20:05   ` Frank Li
2026-10-07 10:44 ` [PATCH v4 05/10] gpio: mxc: convert pad wakeup compatible checks to " Peng Fan (OSS)
2026-10-08 20:10   ` Frank Li
2026-10-09  1:00     ` Peng Fan
2026-10-07 10:44 ` [PATCH v4 06/10] gpio: mxc: convert probe error handling to devres Peng Fan (OSS)
2026-10-07 10:59   ` sashiko-bot
2026-10-08  9:47     ` Bartosz Golaszewski
2026-10-09  2:25       ` Peng Fan
2026-10-08 20:12   ` Frank Li
2026-10-09  2:18     ` Peng Fan
2026-10-07 10:44 ` [PATCH v4 07/10] gpio: mxc: switch probe error paths to dev_err_probe() Peng Fan (OSS)
2026-10-07 11:02   ` sashiko-bot
2026-10-08 20:15   ` Frank Li
2026-10-07 10:44 ` [PATCH v4 08/10] gpio: mxc: use local dev variable Peng Fan (OSS)
2026-10-07 11:03   ` sashiko-bot
2026-10-08 20:16   ` Frank Li
2026-10-07 10:44 ` [PATCH v4 09/10] gpio: mxc: introduce MXC_ICR macros and use field_prep/field_get Peng Fan (OSS)
2026-10-08 20:25   ` Frank Li
2026-10-07 10:44 ` [PATCH v4 10/10] gpio: mxc: use BIT() macro for single-bit operations Peng Fan (OSS)
2026-10-07 10:56   ` sashiko-bot [this message]
2026-10-09  2:32     ` Peng Fan
2026-10-08 20:26   ` Frank Li

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-162890@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=Frank.Li@kernel.org \
    --cc=imx@lists.linux.dev \
    --cc=linux-gpio@vger.kernel.org \
    --cc=peng.fan@oss.nxp.com \
    --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