linux-stable/drivers/pinctrl/qcom
Julia Cartwright 47b03ca903 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>
2017-01-26 11:06:15 +01:00
..
Kconfig pinctrl: qcom: Add msm8994 pinctrl driver 2016-11-04 23:55:36 +01:00
Makefile pinctrl: qcom: Add msm8994 pinctrl driver 2016-11-04 23:55:36 +01:00
pinctrl-apq8064.c pinctrl: qcom: drop owner assignment from platform_drivers 2014-10-20 16:21:23 +02:00
pinctrl-apq8084.c pinctrl: qcom: drop owner assignment from platform_drivers 2014-10-20 16:21:23 +02:00
pinctrl-ipq4019.c pinctrl: qcom: ipq4019: fix register offsets 2016-03-31 11:56:13 +02:00
pinctrl-ipq8064.c pinctrl: qcom: drop owner assignment from platform_drivers 2014-10-20 16:21:23 +02:00
pinctrl-mdm9615.c pinctrl: qcom: Add support for MDM9615 TLMM 2016-06-29 10:10:52 +02:00
pinctrl-msm.c pinctrl: qcom: Use raw spinlock variants 2017-01-26 11:06:15 +01:00
pinctrl-msm.h pinctrl: qcom: increase variable size for register offsets 2015-01-30 14:32:44 +01:00
pinctrl-msm8x74.c pinctrl: qcom: msm8974: Add hsic_ctl pinmux 2016-06-29 10:14:46 +02:00
pinctrl-msm8660.c pinctrl: qcom: msm8660: rename some SDC1->SDC4 2017-01-03 09:26:20 +01:00
pinctrl-msm8916.c pinctrl: qcom: Add msm8916 pinctrl driver 2015-01-30 14:35:09 +01:00
pinctrl-msm8960.c pinctrl: qcom: drop owner assignment from platform_drivers 2014-10-20 16:21:23 +02:00
pinctrl-msm8994.c pinctrl: qcom: Add msm8994 pinctrl driver 2016-11-04 23:55:36 +01:00
pinctrl-msm8996.c pinctrl: qcom: Add msm8996 pinctrl driver 2015-12-01 10:29:03 +01:00
pinctrl-qdf2xxx.c pinctrl: qcom: qdf2xxx: improve error checking and reporting 2015-12-01 09:59:02 +01:00
pinctrl-spmi-gpio.c pinctrl: qcom: Add generic ssbi and spmi GPIO/MPP bindings 2016-08-11 10:18:46 +02:00
pinctrl-spmi-mpp.c pinctrl: qcom: Add generic ssbi and spmi GPIO/MPP bindings 2016-08-11 10:18:46 +02:00
pinctrl-ssbi-gpio.c pinctrl: ssbi-gpi: Use devm_pinctrl_register() for pinctrl registration 2016-04-21 00:02:53 +02:00
pinctrl-ssbi-mpp.c pinctrl: qcom-ssbi: support for PM8058 2016-06-15 08:37:31 +02:00