linux/drivers/soc
Saranya R f4489260f5 soc: qcom: pdr: Fix the potential deadlock
commit 2eeb03ad9f upstream.

When some client process A call pdr_add_lookup() to add the look up for
the service and does schedule locator work, later a process B got a new
server packet indicating locator is up and call pdr_locator_new_server()
which eventually sets pdr->locator_init_complete to true which process A
sees and takes list lock and queries domain list but it will timeout due
to deadlock as the response will queued to the same qmi->wq and it is
ordered workqueue and process B is not able to complete new server
request work due to deadlock on list lock.

Fix it by removing the unnecessary list iteration as the list iteration
is already being done inside locator work, so avoid it here and just
call schedule_work() here.

       Process A                        Process B

                                     process_scheduled_works()
pdr_add_lookup()                      qmi_data_ready_work()
 process_scheduled_works()             pdr_locator_new_server()
                                         pdr->locator_init_complete=true;
   pdr_locator_work()
    mutex_lock(&pdr->list_lock);

     pdr_locate_service()                  mutex_lock(&pdr->list_lock);

      pdr_get_domain_list()
       pr_err("PDR: %s get domain list
               txn wait failed: %d\n",
               req->service_name,
               ret);

Timeout error log due to deadlock:

"
 PDR: tms/servreg get domain list txn wait failed: -110
 PDR: service lookup for msm/adsp/sensor_pd:tms/servreg failed: -110
"

Thanks to Bjorn and Johan for letting me know that this commit also fixes
an audio regression when using the in-kernel pd-mapper as that makes it
easier to hit this race. [1]

Link: https://lore.kernel.org/lkml/Zqet8iInnDhnxkT9@hovoldconsulting.com/ # [1]
Fixes: fbe639b44a ("soc: qcom: Introduce Protection Domain Restart helpers")
CC: stable@vger.kernel.org
Reviewed-by: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
Tested-by: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
Tested-by: Johan Hovold <johan+linaro@kernel.org>
Signed-off-by: Saranya R <quic_sarar@quicinc.com>
Co-developed-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com>
Signed-off-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com>
Link: https://lore.kernel.org/r/20250212163720.1577876-1-mukesh.ojha@oss.qualcomm.com
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2025-03-28 22:03:31 +01:00
..
amlogic soc: amlogic: meson-gx-socinfo: add new SoCs id 2024-08-20 17:27:27 +02:00
apple soc: apple: mailbox: error pointers are negative integers 2024-01-30 11:34:49 -08:00
aspeed soc/aspeed: Convert to platform remove callback returning void 2023-10-13 15:04:12 +10:30
atmel soc: atmel: fix device_node release in atmel_soc_device_init() 2025-02-08 09:57:36 +01:00
bcm SoC driver updates for 6.7 2023-11-01 14:46:51 -10:00
canaan soc: canaan: Deprecate SOC_CANAAN and use SOC_CANAAN_K210 for K210 2024-04-05 16:42:50 +01:00
cirrus soc: ep93xx: drop reference to removed EP93XX_SOC_COMMON config 2024-09-26 12:58:18 +00:00
dove soc: dove: add missing of_node_put 2023-09-20 11:28:02 +02:00
fsl soc: fsl: rcpm: fix missing of_node_put() in copy_ippdexpcr1_setting() 2024-12-05 14:02:57 +01:00
fujitsu soc/fujitsu: a64fx-diag: Convert to platform remove callback returning void 2023-10-14 23:27:01 +02:00
gemini soc: Add SoC driver for Gemini 2018-01-04 17:01:53 +01:00
hisilicon soc: hisilicon: kunpeng_hccs: replace MAILBOX dependency with PCC 2024-04-25 02:09:46 +00:00
imx soc: imx8m: Unregister cpufreq and soc dev in cleanup path 2025-03-28 22:03:25 +01:00
ixp4xx soc: add missing MODULE_DESCRIPTION() macros 2024-06-27 16:42:50 +02:00
lantiq soc: lantiq: convert to devm_platform_ioremap_resource 2020-01-10 11:44:52 -08:00
litex drivers/soc/litex: drop obsolete dependency on COMPILE_TEST 2024-06-27 16:33:39 +02:00
loongson soc: loongson: loongson2_guts: Add check for devm_kstrdup() 2025-02-27 04:30:22 -08:00
mediatek soc: mediatek: mtk-devapc: Fix leaking IO map on driver remove 2025-02-17 10:05:32 +01:00
microchip soc: microchip: Fix POLARFIRE_SOC_SYS_CTRL input prompt 2024-01-22 16:39:40 +00:00
nuvoton soc: nuvoton: Add SoC info driver for WPCM450 2023-02-01 17:11:36 +01:00
pxa spi: pxa2xx: Use proper SSP header in soc/pxa/ssp.c 2024-03-25 00:49:17 +00:00
qcom soc: qcom: pdr: Fix the potential deadlock 2025-03-28 22:03:31 +01:00
renesas soc: renesas: Enable TMU support on R-Car Gen2 2024-03-26 09:25:06 +01:00
rockchip soc: rockchip: grf: Add rk3576 default GRF values 2024-08-23 12:33:58 +02:00
samsung soc: samsung: exynos-pmu: Fix uninitialized ret in tensor_set_bits_atomic() 2025-02-17 10:05:32 +01:00
sunxi soc: sunxi: sram: Constify struct regmap_config 2024-07-11 00:47:13 +08:00
tegra soc/tegra: fuse: Update Tegra234 nvmem keepout list 2025-02-21 14:01:23 +01:00
ti soc: ti: smartreflex: Use IRQF_NO_AUTOEN flag in request_irq() 2024-12-05 14:01:25 +01:00
ux500 ARM: ux500: do not directly dereference __iomem 2022-11-08 21:13:56 +01:00
versatile soc: versatile: enable compile testing 2024-08-30 15:40:11 +02:00
xilinx drivers: soc: xilinx: add the missing kfree in xlnx_add_cb_for_suspend() 2024-12-05 14:01:24 +01:00
Kconfig soc: Add SoC driver for Cirrus ep93xx 2024-09-12 14:33:10 +00:00
Makefile soc: convert ep93xx to devicetree 2024-09-26 12:00:25 -07:00