diff options
author | Julia Cartwright <julia@ni.com> | 2017-01-20 10:13:47 -0600 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2017-01-26 11:06:15 +0100 |
commit | 47b03ca903fb07a69ba88d2e1629fe145771f116 (patch) | |
tree | 28bd5f02a37a030214028aae22f64a3228516160 /drivers/gpio/gpio-aspeed.c | |
parent | 1f7b8eae5c16e6b16c6467ac8e96d0af9c9de81e (diff) | |
download | lwn-47b03ca903fb07a69ba88d2e1629fe145771f116.tar.gz lwn-47b03ca903fb07a69ba88d2e1629fe145771f116.zip |
pinctrl: qcom: Use raw spinlock variants
The MSM pinctrl driver currently implements an irq_chip for handling
GPIO interrupts; due to how irq_chip handling is done, it's necessary
for the irq_chip methods to be invoked from hardirq context, even on a
a real-time kernel. Because the spinlock_t type becomes a "sleeping"
spinlock w/ RT kernels, it is not suitable to be used with irq_chips.
A quick audit of the operations under the lock reveal that they do only
minimal, bounded work, and are therefore safe to do under a raw
spinlock.
On real-time kernels, this fixes an OOPs which looks like the following,
as reported by Brian Wrenn:
kernel BUG at kernel/locking/rtmutex.c:1014!
Internal error: Oops - BUG: 0 [#1] PREEMPT SMP
Modules linked in: spidev_irq(O) smsc75xx wcn36xx [last unloaded: spidev]
CPU: 0 PID: 1163 Comm: irq/144-mmc0 Tainted: G W O 4.4.9-linaro-lt-qcom #1
PC is at rt_spin_lock_slowlock+0x80/0x2d8
LR is at rt_spin_lock_slowlock+0x68/0x2d8
[..]
Call trace:
rt_spin_lock_slowlock
rt_spin_lock
msm_gpio_irq_ack
handle_edge_irq
generic_handle_irq
msm_gpio_irq_handler
generic_handle_irq
__handle_domain_irq
gic_handle_irq
Reported-by: Brian Wrenn <dcbrianw@gmail.com>
Tested-by: Brian Wrenn <dcbrianw@gmail.com>
Signed-off-by: Julia Cartwright <julia@ni.com>
Acked-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/gpio/gpio-aspeed.c')
0 files changed, 0 insertions, 0 deletions