984245b66c
The irqchip->irq_set_type method is called by __irq_set_trigger() under
the desc->lock raw spinlock.
The armada-37xx implementation, armada_37xx_irq_set_type(), takes a
plain spinlock, the kind that becomes sleepable on RT.
Therefore, this is an invalid locking scheme for which we get a kernel
splat stating just that ("[ BUG: Invalid wait context ]"), because the
context in which the plain spinlock may sleep is atomic due to the raw
spinlock. We need to go raw spinlocks all the way.
Replace the driver's irq_lock with a raw spinlock, to disable preemption
even on RT.
Cc: <stable@vger.kernel.org> # 5.15+
Fixes:
|
||
---|---|---|
.. | ||
Kconfig | ||
Makefile | ||
pinctrl-ac5.c | ||
pinctrl-armada-37xx.c | ||
pinctrl-armada-38x.c | ||
pinctrl-armada-39x.c | ||
pinctrl-armada-370.c | ||
pinctrl-armada-375.c | ||
pinctrl-armada-ap806.c | ||
pinctrl-armada-cp110.c | ||
pinctrl-armada-xp.c | ||
pinctrl-dove.c | ||
pinctrl-kirkwood.c | ||
pinctrl-mvebu.c | ||
pinctrl-mvebu.h | ||
pinctrl-orion.c |