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