linux/drivers/mailbox
Jason-JH Lin 2ff8463357 mailbox: mtk-cmdq: Remove pm_runtime APIs from cmdq_mbox_send_data()
[ Upstream commit 3f39f56520 ]

pm_runtime_get_sync() and pm_runtime_put_autosuspend() were previously
called in cmdq_mbox_send_data(), which is under a spinlock in msg_submit()
(mailbox.c). This caused lockdep warnings such as "sleeping function
called from invalid context" when running with lockdebug enabled.

The BUG report:
  BUG: sleeping function called from invalid context at drivers/base/power/runtime.c:1164
  in_atomic(): 1, irqs_disabled(): 128, non_block: 0, pid: 3616, name: kworker/u17:3
    preempt_count: 1, expected: 0
    RCU nest depth: 0, expected: 0
    INFO: lockdep is turned off.
    irq event stamp: 0
    CPU: 1 PID: 3616 Comm: kworker/u17:3 Not tainted 6.1.87-lockdep-14133-g26e933aca785 #1
    Hardware name: Google Ciri sku0/unprovisioned board (DT)
    Workqueue: imgsys_runner imgsys_runner_func
    Call trace:
     dump_backtrace+0x100/0x120
     show_stack+0x20/0x2c
     dump_stack_lvl+0x84/0xb4
     dump_stack+0x18/0x48
     __might_resched+0x354/0x4c0
     __might_sleep+0x98/0xe4
     __pm_runtime_resume+0x70/0x124
     cmdq_mbox_send_data+0xe4/0xb1c
     msg_submit+0x194/0x2dc
     mbox_send_message+0x190/0x330
     imgsys_cmdq_sendtask+0x1618/0x2224
     imgsys_runner_func+0xac/0x11c
     process_one_work+0x638/0xf84
     worker_thread+0x808/0xcd0
     kthread+0x24c/0x324
     ret_from_fork+0x10/0x20

Additionally, pm_runtime_put_autosuspend() should be invoked from the
GCE IRQ handler to ensure the hardware has actually completed its work.

To resolve these issues, remove the pm_runtime calls from
cmdq_mbox_send_data() and delegate power management responsibilities
to the client driver.

Fixes: 8afe816b0c ("mailbox: mtk-cmdq-mailbox: Implement Runtime PM with autosuspend")
Signed-off-by: Jason-JH Lin <jason-jh.lin@mediatek.com>
Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2025-10-19 16:33:41 +02:00
..
arm_mhu.c mailbox: Explicitly include correct DT includes 2023-09-05 10:10:58 -05:00
arm_mhu_db.c mailbox: Explicitly include correct DT includes 2023-09-05 10:10:58 -05:00
arm_mhuv2.c mailbox: arm_mhuv2: clean up loop in get_irq_chan_comb() 2024-12-05 14:02:17 +01:00
arm_mhuv3.c mailbox: arm_mhuv3: Add driver 2024-05-19 22:30:09 -05:00
armada-37xx-rwtm-mailbox.c treewide: change my e-mail address, fix my name 2021-04-09 14:54:23 -07:00
bcm-flexrm-mailbox.c irqchip: Convert all platform MSI users to the new API 2024-02-15 17:55:40 +01:00
bcm-pdc-mailbox.c mailbox: bcm-pdc: remove unused struct 'pdc_dma_map' 2024-07-10 13:24:55 -05:00
bcm2835-mailbox.c mailbox: bcm2835: Fix timeout during suspend mode 2024-09-22 19:19:17 -05:00
hi3660-mailbox.c mailbox: Explicitly include correct DT includes 2023-09-05 10:10:58 -05:00
hi6220-mailbox.c mailbox: Explicitly include correct DT includes 2023-09-05 10:10:58 -05:00
imx-mailbox.c mailbox: imx: Fix TXDB_V2 sending 2025-06-19 15:32:07 +02:00
Kconfig mailbox, remoteproc: omap2+: fix compile testing 2024-09-27 09:11:05 -05:00
mailbox-altera.c mailbox: altera: Make use of the helper function devm_platform_ioremap_resource() 2021-10-16 14:39:48 -05:00
mailbox-mpfs.c mailbox: Explicitly include correct DT includes 2023-09-05 10:10:58 -05:00
mailbox-sti.c mailbox: Use device_get_match_data() 2023-10-15 12:39:16 -05:00
mailbox-test.c mailbox: mailbox-test: Convert to platform remove callback returning void 2024-01-13 23:08:51 -06:00
mailbox-xgene-slimpro.c mailbox: xgene-slimpro: Make use of the helper function devm_platform_ioremap_resource() 2021-10-16 14:39:49 -05:00
mailbox.c mailbox: Not protect module_put with spin_lock_irqsave 2025-07-06 11:01:32 +02:00
mailbox.h mailbox: fix various typos in comments 2021-04-13 20:07:35 -05:00
Makefile mailbox: Add support for QTI CPUCP mailbox controller 2024-07-10 13:24:55 -05:00
mtk-adsp-mailbox.c mailbox: Explicitly include correct DT includes 2023-09-05 10:10:58 -05:00
mtk-cmdq-mailbox.c mailbox: mtk-cmdq: Remove pm_runtime APIs from cmdq_mbox_send_data() 2025-10-19 16:33:41 +02:00
omap-mailbox.c kfifo: don't include dma-mapping.h in kfifo.h 2024-12-05 14:03:03 +01:00
pcc.c mailbox: pcc: Use acpi_os_ioremap() instead of ioremap() 2025-05-29 11:02:04 +02:00
pl320-ipc.c mailbox: fix various typos in comments 2021-04-13 20:07:35 -05:00
platform_mhu.c mailbox: Explicitly include correct DT includes 2023-09-05 10:10:58 -05:00
qcom-apcs-ipc-mailbox.c mailbox: qcom-apcs-ipc: Convert to platform remove callback returning void 2024-01-13 23:08:51 -06:00
qcom-cpucp-mbox.c mailbox: qcom-cpucp: Mark the irq with IRQF_NO_SUSPEND flag 2024-11-12 19:45:25 +01:00
qcom-ipcc.c mailbox: qcom-ipcc: Convert to platform remove callback returning void 2024-01-13 23:08:51 -06:00
rockchip-mailbox.c mailbox: rockchip: fix a typo in module autoloading 2024-09-22 19:19:17 -05:00
sprd-mailbox.c mailbox: sprd: Use devm_clk_get_enabled() helpers 2024-09-22 19:19:17 -05:00
stm32-ipcc.c mailbox: stm32-ipcc: Convert to platform remove callback returning void 2024-01-13 23:08:51 -06:00
sun6i-msgbox.c mailbox: sun6i-msgbox: Convert to platform remove callback returning void 2024-01-13 23:08:51 -06:00
tegra-hsp.c mailbox: tegra-hsp: Define dimensioning masks in SoC data 2025-04-20 10:15:45 +02:00
ti-msgmgr.c mailbox: Use device_get_match_data() 2023-10-15 12:39:16 -05:00
zynqmp-ipi-mailbox.c mailbox: zynqmp-ipi: Fix SGI cleanup on unbind 2025-10-19 16:33:41 +02:00