Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ssb: gpio: Use generic_handle_irq_safe()

On PREEMPT_RT enabled kernels the demultiplex interrupt handler is force
threaded and runs with interrupts enabled. The invocation of
generic_handle_domain_irq() with interrupts enabled triggers a lockdep
warning due to a non-irq safe lock acquisition.

Instead of disabling interrupts on the driver level, use
generic_handle_domain_irq_safe().

[ tglx: Split out from combo patch ]

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/YnkfWFzvusFFktSt@linutronix.de

authored by

Sebastian Andrzej Siewior and committed by
Thomas Gleixner
f285de79 f460c701

+4 -2
+4 -2
drivers/ssb/driver_gpio.c
··· 132 132 return IRQ_NONE; 133 133 134 134 for_each_set_bit(gpio, &irqs, bus->gpio.ngpio) 135 - generic_handle_irq(ssb_gpio_to_irq(&bus->gpio, gpio)); 135 + generic_handle_domain_irq_safe(bus->irq_domain, gpio); 136 + 136 137 ssb_chipco_gpio_polarity(chipco, irqs, val & irqs); 137 138 138 139 return IRQ_HANDLED; ··· 331 330 return IRQ_NONE; 332 331 333 332 for_each_set_bit(gpio, &irqs, bus->gpio.ngpio) 334 - generic_handle_irq(ssb_gpio_to_irq(&bus->gpio, gpio)); 333 + generic_handle_domain_irq_safe(bus->irq_domain, gpio); 334 + 335 335 ssb_extif_gpio_polarity(extif, irqs, val & irqs); 336 336 337 337 return IRQ_HANDLED;