linux/drivers/mailbox
Jason-JH Lin 37ce5a4207 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:37:12 +02:00
..
arm_mhu.c mailbox: arm_mhu: Constify amba_id table 2025-03-26 20:58:25 -05:00
arm_mhu_db.c mailbox: arm_mhu_db: Constify amba_id table 2025-03-26 20:58:25 -05:00
arm_mhuv2.c mailbox: arm_mhuv2: Constify amba_id table 2025-03-26 20:58:25 -05: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
ast2700-mailbox.c mailbox: aspeed: add mailbox driver for AST27XX series SoC 2025-08-06 12:45:05 -05:00
bcm-flexrm-mailbox.c mailbox: Switch back to struct platform_driver::remove() 2024-11-24 13:11:01 -06:00
bcm-pdc-mailbox.c mailbox: Switch back to struct platform_driver::remove() 2024-11-24 13:11:01 -06:00
bcm2835-mailbox.c mailbox: bcm2835: Fix timeout during suspend mode 2024-09-22 19:19:17 -05:00
bcm74110-mailbox.c mailbox: bcm74110: Fix spelling mistake 2025-08-06 12:45:05 -05:00
cix-mailbox.c mailbox: add CIX mailbox driver 2025-07-21 17:14:55 +02:00
cv1800-mailbox.c mailbox: sophgo: add mailbox driver for CV18XX series SoC 2025-05-26 16:23:39 -05:00
exynos-mailbox.c mailbox: Remove unneeded semicolon 2025-03-26 20:58:26 -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-05-26 16:23:39 -05:00
Kconfig mailbox: aspeed: add mailbox driver for AST27XX series SoC 2025-08-06 12:45:05 -05:00
mailbox-altera.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
mailbox-mchp-ipc-sbi.c mailbox: add Microchip IPC support 2025-01-18 16:09:48 -06:00
mailbox-mpfs.c mailbox: mpfs: fix copy and paste bug in probe 2025-01-18 16:04:51 -06:00
mailbox-sti.c mailbox: Use device_get_match_data() 2023-10-15 12:39:16 -05:00
mailbox-test.c mailbox: Switch back to struct platform_driver::remove() 2024-11-24 13:11:01 -06:00
mailbox-th1520.c mailbox: th1520: Fix memory corruption due to incorrect array size 2025-01-18 16:20:55 -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: Use guard/scoped_guard for spinlock 2025-05-26 16:23:39 -05:00
mailbox.h mailbox: explicitly include <linux/bits.h> 2025-03-26 20:58:25 -05:00
Makefile mailbox: aspeed: add mailbox driver for AST27XX series SoC 2025-08-06 12:45:05 -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:37:12 +02:00
omap-mailbox.c kfifo: don't include dma-mapping.h in kfifo.h 2024-10-23 08:05:20 +02:00
pcc.c mailbox/pcc: support mailbox management of the shared buffer 2025-08-07 23:49:56 -05:00
pl320-ipc.c mailbox: pl320-ipc: Constify amba_id table 2025-03-26 20:58:24 -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: Assign OF node to clock controller child device 2025-05-29 10:01:35 -05:00
qcom-cpucp-mbox.c mailbox: qcom-cpucp: Mark the irq with IRQF_NO_SUSPEND flag 2024-11-24 12:56:31 -06:00
qcom-ipcc.c mailbox: Use dev_fwnode() 2025-08-06 12:41:38 -05: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: Switch back to struct platform_driver::remove() 2024-11-24 13:11:01 -06:00
sun6i-msgbox.c mailbox: Switch back to struct platform_driver::remove() 2024-11-24 13:11:01 -06:00
tegra-hsp.c mailbox: tegra-hsp: Define dimensioning masks in SoC data 2025-03-26 20:58:24 -05:00
ti-msgmgr.c mailbox: ti-msgmgr: Remove use of of_match_ptr() helper 2024-11-24 12:57:49 -06:00
zynqmp-ipi-mailbox.c mailbox: zynqmp-ipi: Fix SGI cleanup on unbind 2025-10-19 16:37:11 +02:00