Skip to content

Commit 7d80e24

Browse files
jhovoldBartosz Golaszewski
authored andcommitted
gpio: mmio: fix bad guard conversion
A recent spinlock guard conversion consistently used the wrong guard so that interrupts are no longer disabled while holding the chip lock (which can cause deadlocks). Fixes: 7e061b4 ("gpio: mmio: use lock guards") Signed-off-by: Johan Hovold <johan@kernel.org> Link: https://lore.kernel.org/r/20251203105206.24453-1-johan@kernel.org Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
1 parent dae9750 commit 7d80e24

1 file changed

Lines changed: 5 additions & 5 deletions

File tree

drivers/gpio/gpio-mmio.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ static int gpio_mmio_set(struct gpio_chip *gc, unsigned int gpio, int val)
231231
struct gpio_generic_chip *chip = to_gpio_generic_chip(gc);
232232
unsigned long mask = gpio_mmio_line2mask(gc, gpio);
233233

234-
guard(raw_spinlock)(&chip->lock);
234+
guard(raw_spinlock_irqsave)(&chip->lock);
235235

236236
if (val)
237237
chip->sdata |= mask;
@@ -262,7 +262,7 @@ static int gpio_mmio_set_set(struct gpio_chip *gc, unsigned int gpio, int val)
262262
struct gpio_generic_chip *chip = to_gpio_generic_chip(gc);
263263
unsigned long mask = gpio_mmio_line2mask(gc, gpio);
264264

265-
guard(raw_spinlock)(&chip->lock);
265+
guard(raw_spinlock_irqsave)(&chip->lock);
266266

267267
if (val)
268268
chip->sdata |= mask;
@@ -302,7 +302,7 @@ static void gpio_mmio_set_multiple_single_reg(struct gpio_chip *gc,
302302
struct gpio_generic_chip *chip = to_gpio_generic_chip(gc);
303303
unsigned long set_mask, clear_mask;
304304

305-
guard(raw_spinlock)(&chip->lock);
305+
guard(raw_spinlock_irqsave)(&chip->lock);
306306

307307
gpio_mmio_multiple_get_masks(gc, mask, bits, &set_mask, &clear_mask);
308308

@@ -391,7 +391,7 @@ static int gpio_mmio_dir_in(struct gpio_chip *gc, unsigned int gpio)
391391
{
392392
struct gpio_generic_chip *chip = to_gpio_generic_chip(gc);
393393

394-
scoped_guard(raw_spinlock, &chip->lock) {
394+
scoped_guard(raw_spinlock_irqsave, &chip->lock) {
395395
chip->sdir &= ~gpio_mmio_line2mask(gc, gpio);
396396

397397
if (chip->reg_dir_in)
@@ -431,7 +431,7 @@ static void gpio_mmio_dir_out(struct gpio_chip *gc, unsigned int gpio, int val)
431431
{
432432
struct gpio_generic_chip *chip = to_gpio_generic_chip(gc);
433433

434-
guard(raw_spinlock)(&chip->lock);
434+
guard(raw_spinlock_irqsave)(&chip->lock);
435435

436436
chip->sdir |= gpio_mmio_line2mask(gc, gpio);
437437

0 commit comments

Comments
 (0)