gpio: pl061: returning with lock held in pl061_irq_type()
Subsystems (2)
PATCH 1/1 gpio: pl061: returning with lock held in pl061_irq_type()
We were returning with "chip->lock" held by mistake. It's safe to move the return to before we take the spinlock.
Fixes 1dbf7f299f90 ('gpio: pl061: detail IRQ trigger handling')
Signed-off-by Dan Carpenter <[email protected]>
drivers/gpio/gpio-pl061.c +7 -6
@@ -152,12 +152,6 @@ static int pl061_irq_type(struct irq_data *d, unsigned trigger)if (offset <0 || offset >=PL061_GPIO_NR )return -EINVAL ; -spin_lock_irqsave (&chip->lock, flags); - - gpioiev =readb (chip->base +GPIOIEV ); - gpiois =readb (chip->base +GPIOIS ); - gpioibe =readb (chip->base +GPIOIBE ); -if ((trigger & (IRQ_TYPE_LEVEL_HIGH |IRQ_TYPE_LEVEL_LOW )) && (trigger & (IRQ_TYPE_EDGE_RISING |IRQ_TYPE_EDGE_FALLING ))) {
@@ -168,6 +162,13 @@ static int pl061_irq_type(struct irq_data *d, unsigned trigger)return -EINVAL ; } + +spin_lock_irqsave (&chip->lock, flags); + + gpioiev =readb (chip->base +GPIOIEV ); + gpiois =readb (chip->base +GPIOIS ); + gpioibe =readb (chip->base +GPIOIBE ); +if (trigger & (IRQ_TYPE_LEVEL_HIGH |IRQ_TYPE_LEVEL_LOW )) {bool polarity = trigger &IRQ_TYPE_LEVEL_HIGH ;
Quoted 5 lines · Dan Carpenter
We were returning with "
chip->lock" held by mistake. It's safe to move the return to before we take the spinlock.Fixes 1dbf7f299f90 ('gpio: pl061: detail IRQ trigger handling')Signed-off-by Dan Carpenter <[email protected]>
Thanks, patch applied.
Yours,
Linus Walleij