2023-04-03 17:54:22

by William Breathitt Gray

[permalink] [raw]
Subject: [PATCH 0/2] Fix possible deadlocks for i8255 GPIO drivers

The 104-dio-48e and 104-idi-48 drivers leverage regmap-irq to handle
IRQ. The default regmap locking utilizes spinlocks but this can result
in deadlocks for IRQ chips when running -rt kernels [0]. Enable
use_raw_spinlock for the regmap_config of these drivers to prevent such.

[0] https://lore.kernel.org/all/1466065537-82027-1-git-send-email-mika.westerberg@linux.intel.com/

William Breathitt Gray (2):
gpio: 104-dio-48e: Enable use_raw_spinlock for dio48e_regmap_config
gpio: 104-idi-48: Enable use_raw_spinlock for idi48_regmap_config

drivers/gpio/gpio-104-dio-48e.c | 1 +
drivers/gpio/gpio-104-idi-48.c | 1 +
2 files changed, 2 insertions(+)


base-commit: d49765b5f4320a402fbc4ed5edfd73d87640f27c
--
2.39.2


2023-04-03 17:54:39

by William Breathitt Gray

[permalink] [raw]
Subject: [PATCH 1/2] gpio: 104-dio-48e: Enable use_raw_spinlock for dio48e_regmap_config

The dio48e regmap can be used in an interrupt context by regmap-irq. To
prevent a deadlock, enable use_raw_spinlock for dio48e_regmap_config.

Fixes: 2f7e845f512f ("gpio: 104-dio-48e: Migrate to the regmap-irq API")
Signed-off-by: William Breathitt Gray <[email protected]>
---
drivers/gpio/gpio-104-dio-48e.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/gpio/gpio-104-dio-48e.c b/drivers/gpio/gpio-104-dio-48e.c
index a3846faf3780..11c48130bb8f 100644
--- a/drivers/gpio/gpio-104-dio-48e.c
+++ b/drivers/gpio/gpio-104-dio-48e.c
@@ -86,6 +86,7 @@ static const struct regmap_config dio48e_regmap_config = {
.volatile_table = &dio48e_volatile_table,
.precious_table = &dio48e_precious_table,
.cache_type = REGCACHE_FLAT,
+ .use_raw_spinlock = true,
};

/* only bit 3 on each respective Port C supports interrupts */
--
2.39.2

2023-04-03 17:55:35

by William Breathitt Gray

[permalink] [raw]
Subject: [PATCH 2/2] gpio: 104-idi-48: Enable use_raw_spinlock for idi48_regmap_config

The idi48 regmap can be used in an interrupt context by regmap-irq. To
prevent a deadlock, enable use_raw_spinlock for idi48_regmap_config.

Fixes: e28432a77365 ("gpio: 104-idi-48: Migrate to the regmap-irq API")
Signed-off-by: William Breathitt Gray <[email protected]>
---
drivers/gpio/gpio-104-idi-48.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/gpio/gpio-104-idi-48.c b/drivers/gpio/gpio-104-idi-48.c
index ca2175b84e24..ba73ee9c0c29 100644
--- a/drivers/gpio/gpio-104-idi-48.c
+++ b/drivers/gpio/gpio-104-idi-48.c
@@ -81,6 +81,7 @@ static const struct regmap_config idi48_regmap_config = {
.wr_table = &idi_48_wr_table,
.rd_table = &idi_48_rd_table,
.precious_table = &idi_48_precious_table,
+ .use_raw_spinlock = true,
};

#define IDI48_NGPIO 48
--
2.39.2

2023-04-04 14:15:59

by Linus Walleij

[permalink] [raw]
Subject: Re: [PATCH 0/2] Fix possible deadlocks for i8255 GPIO drivers

On Mon, Apr 3, 2023 at 7:53 PM William Breathitt Gray
<[email protected]> wrote:

> The 104-dio-48e and 104-idi-48 drivers leverage regmap-irq to handle
> IRQ. The default regmap locking utilizes spinlocks but this can result
> in deadlocks for IRQ chips when running -rt kernels [0]. Enable
> use_raw_spinlock for the regmap_config of these drivers to prevent such.
>
> [0] https://lore.kernel.org/all/1466065537-82027-1-git-send-email-mika.westerberg@linux.intel.com/

This looks reasonable.
Reviewed-by: Linus Walleij <[email protected]>

Yours,
Linus Walleij

2023-04-11 19:14:11

by Bartosz Golaszewski

[permalink] [raw]
Subject: Re: [PATCH 0/2] Fix possible deadlocks for i8255 GPIO drivers

On Mon, Apr 3, 2023 at 7:53 PM William Breathitt Gray
<[email protected]> wrote:
>
> The 104-dio-48e and 104-idi-48 drivers leverage regmap-irq to handle
> IRQ. The default regmap locking utilizes spinlocks but this can result
> in deadlocks for IRQ chips when running -rt kernels [0]. Enable
> use_raw_spinlock for the regmap_config of these drivers to prevent such.
>
> [0] https://lore.kernel.org/all/1466065537-82027-1-git-send-email-mika.westerberg@linux.intel.com/
>
> William Breathitt Gray (2):
> gpio: 104-dio-48e: Enable use_raw_spinlock for dio48e_regmap_config
> gpio: 104-idi-48: Enable use_raw_spinlock for idi48_regmap_config
>
> drivers/gpio/gpio-104-dio-48e.c | 1 +
> drivers/gpio/gpio-104-idi-48.c | 1 +
> 2 files changed, 2 insertions(+)
>
>
> base-commit: d49765b5f4320a402fbc4ed5edfd73d87640f27c
> --
> 2.39.2
>

Both queued for fixes.

Bart