linux-kernelorg-stable/drivers/pinctrl/qcom
Praveen Talari 1c2e70397b pinctrl: qcom: msm: Fix deadlock in pinmux configuration
Replace disable_irq() with disable_irq_nosync() in msm_pinmux_set_mux()
to prevent deadlock when wakeup IRQ is triggered on the same
GPIO being reconfigured.

The issue occurs when a wakeup IRQ is triggered on a GPIO and the IRQ
handler attempts to reconfigure the same GPIO's pinmux. In this scenario,
msm_pinmux_set_mux() calls disable_irq() which waits for the currently
running IRQ handler to complete, creating a circular dependency that
results in deadlock.

Using disable_irq_nosync() avoids waiting for the IRQ handler to
complete, preventing the deadlock condition while still properly
disabling the interrupt during pinmux reconfiguration.

Suggested-by: Prasad Sodagudi <prasad.sodagudi@oss.qualcomm.com>
Signed-off-by: Praveen Talari <praveen.talari@oss.qualcomm.com>
Reviewed-by: Bjorn Andersson <andersson@kernel.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
2025-11-12 13:41:34 +01:00
..
Kconfig pinctrl: qcom: Add SDM660 LPASS LPI TLMM 2025-09-10 15:35:42 +02:00
Kconfig.msm pinctrl: qcom: Add glymur pinctrl driver 2025-09-08 14:56:47 +02:00
Makefile pinctrl: qcom: Add SDM660 LPASS LPI TLMM 2025-09-10 15:35:42 +02:00
pinctrl-apq8064.c pinctrl: qcom: switch to devm_gpiochip_add_data() 2025-06-09 10:16:45 +02:00
pinctrl-apq8084.c pinctrl: qcom: switch to devm_gpiochip_add_data() 2025-06-09 10:16:45 +02:00
pinctrl-glymur.c pinctrl: qcom: Add glymur pinctrl driver 2025-09-08 14:56:47 +02:00
pinctrl-ipq4019.c pinctrl: qcom: switch to devm_gpiochip_add_data() 2025-06-09 10:16:45 +02:00
pinctrl-ipq5018.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-ipq5332.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-ipq5424.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-ipq6018.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-ipq8064.c pinctrl: qcom: switch to devm_gpiochip_add_data() 2025-06-09 10:16:45 +02:00
pinctrl-ipq8074.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-ipq9574.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-lpass-lpi.c pinctrl: qcom: lpass-lpi: Add ability to use custom pin offsets 2025-09-10 15:35:41 +02:00
pinctrl-lpass-lpi.h pinctrl: qcom: lpass-lpi: Add ability to use custom pin offsets 2025-09-10 15:35:41 +02:00
pinctrl-mdm9607.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-mdm9615.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-milos.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-msm.c pinctrl: qcom: msm: Fix deadlock in pinmux configuration 2025-11-12 13:41:34 +01:00
pinctrl-msm.h pinctrl: qcom: add infrastructure for marking pin functions as GPIOs 2025-09-08 14:23:07 +02:00
pinctrl-msm8x74.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-msm8226.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-msm8660.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-msm8909.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-msm8916.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-msm8917.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-msm8953.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-msm8960.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-msm8976.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-msm8994.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-msm8996.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-msm8998.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-qcm2290.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-qcs404.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-qcs615.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-qcs8300.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-qdf2xxx.c pinctrl: qcom: switch to devm_gpiochip_add_data() 2025-06-09 10:16:45 +02:00
pinctrl-qdu1000.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sa8775p.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sar2130p.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sc7180.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sc7280-lpass-lpi.c pinctrl: Switch back to struct platform_driver::remove() 2024-10-11 21:45:47 +02:00
pinctrl-sc7280.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sc8180x.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sc8280xp-lpass-lpi.c pinctrl: Switch back to struct platform_driver::remove() 2024-10-11 21:45:47 +02:00
pinctrl-sc8280xp.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sdm660-lpass-lpi.c pinctrl: qcom: Add SDM660 LPASS LPI TLMM 2025-09-10 15:35:42 +02:00
pinctrl-sdm660.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sdm670.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sdm845.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sdx55.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sdx65.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sdx75.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sm4250-lpass-lpi.c pinctrl: Switch back to struct platform_driver::remove() 2024-10-11 21:45:47 +02:00
pinctrl-sm4450.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sm6115-lpass-lpi.c pinctrl: Switch back to struct platform_driver::remove() 2024-10-11 21:45:47 +02:00
pinctrl-sm6115.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sm6125.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sm6350.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sm6375.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sm7150.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sm8150.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sm8250-lpass-lpi.c pinctrl: Switch back to struct platform_driver::remove() 2024-10-11 21:45:47 +02:00
pinctrl-sm8250.c pinctrl: qcom: sm8250: Add egpio support 2025-09-08 14:24:32 +02:00
pinctrl-sm8350-lpass-lpi.c pinctrl: Switch back to struct platform_driver::remove() 2024-10-11 21:45:47 +02:00
pinctrl-sm8350.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sm8450-lpass-lpi.c pinctrl: Switch back to struct platform_driver::remove() 2024-10-11 21:45:47 +02:00
pinctrl-sm8450.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sm8550-lpass-lpi.c pinctrl: Switch back to struct platform_driver::remove() 2024-10-11 21:45:47 +02:00
pinctrl-sm8550.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sm8650-lpass-lpi.c pinctrl: Switch back to struct platform_driver::remove() 2024-10-11 21:45:47 +02:00
pinctrl-sm8650.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-sm8750.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
pinctrl-spmi-gpio.c pinctrl: generic: rename PIN_CONFIG_OUTPUT to LEVEL 2025-09-08 14:24:20 +02:00
pinctrl-spmi-mpp.c pinctrl: generic: rename PIN_CONFIG_OUTPUT to LEVEL 2025-09-08 14:24:20 +02:00
pinctrl-ssbi-gpio.c pinctrl: generic: rename PIN_CONFIG_OUTPUT to LEVEL 2025-09-08 14:24:20 +02:00
pinctrl-ssbi-mpp.c pinctrl: generic: rename PIN_CONFIG_OUTPUT to LEVEL 2025-09-08 14:24:20 +02:00
pinctrl-x1e80100.c pinctrl: qcom: mark the `gpio` and `egpio` pins function as non-strict functions 2025-09-08 14:23:15 +02:00
tlmm-test.c pinctrl: qcom: add multi TLMM region option parameter 2025-07-03 23:44:21 +02:00