linux/drivers/mailbox
Jassi Brar 8299f4bfa9 mailbox: avoid timer start from callback
[ Upstream commit c7dacf5b0f ]

If the txdone is done by polling, it is possible for msg_submit() to start
the timer while txdone_hrtimer() callback is running. If the timer needs
recheduling, it could already be enqueued by the time hrtimer_forward_now()
is called, leading hrtimer to loudly complain.

WARNING: CPU: 3 PID: 74 at kernel/time/hrtimer.c:932 hrtimer_forward+0xc4/0x110
CPU: 3 PID: 74 Comm: kworker/u8:1 Not tainted 5.9.0-rc2-00236-gd3520067d01c-dirty #5
Hardware name: Libre Computer AML-S805X-AC (DT)
Workqueue: events_freezable_power_ thermal_zone_device_check
pstate: 20000085 (nzCv daIf -PAN -UAO BTYPE=--)
pc : hrtimer_forward+0xc4/0x110
lr : txdone_hrtimer+0xf8/0x118
[...]

This can be fixed by not starting the timer from the callback path. Which
requires the timer reloading as long as any message is queued on the
channel, and not just when current tx is not done yet.

Fixes: 0cc67945ea ("mailbox: switch to hrtimer for tx_complete polling")
Reported-by: Da Xue <da@libre.computer>
Reviewed-by: Sudeep Holla <sudeep.holla@arm.com>
Tested-by: Sudeep Holla <sudeep.holla@arm.com>
Acked-by: Jerome Brunet <jbrunet@baylibre.com>
Tested-by: Jerome Brunet <jbrunet@baylibre.com>
Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2020-10-30 10:38:21 +01:00
..
arm_mhu.c Merge branch 'mailbox-for-next' of git://git.linaro.org/landing-teams/working/fujitsu/integration 2015-09-05 18:11:04 -07:00
bcm-flexrm-mailbox.c mailbox: bcm-flexrm-mailbox: Fix FlexRM ring flush timeout issue 2019-03-23 20:09:49 +01:00
bcm-pdc-mailbox.c mailbox: bcm-pdc: Add Northstar Plus support to PDC driver 2017-03-28 23:27:56 +05:30
bcm2835-mailbox.c mailbox: bcm2835: Fix of_xlate return value 2018-06-06 22:21:59 +05:30
hi3660-mailbox.c mailbox: Add support for Hi3660 mailbox 2018-03-20 11:15:54 +08:00
hi6220-mailbox.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
imx-mailbox.c mailbox: imx: Fix Tx doorbell shutdown path 2020-01-04 19:13:17 +01:00
Kconfig mailbox: Add support for i.MX messaging unit 2018-08-15 09:53:07 +05:30
mailbox-altera.c mailbox: Convert timers to use timer_setup() 2017-11-06 12:49:51 -08:00
mailbox-sti.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
mailbox-test.c mailbox: mailbox-test: fix null pointer if no mmio 2019-12-05 09:21:35 +01:00
mailbox-xgene-slimpro.c mailbox: xgene-slimpro: Fix potential NULL pointer dereference 2018-08-03 18:56:08 +05:30
mailbox.c mailbox: avoid timer start from callback 2020-10-30 10:38:21 +01:00
mailbox.h Mailbox: Add support for Platform Communication Channel 2014-11-27 12:51:09 +05:30
Makefile mailbox: Add support for i.MX messaging unit 2018-08-15 09:53:07 +05:30
mtk-cmdq-mailbox.c mailbox: mediatek: Add check for possible failure of kzalloc 2020-01-27 14:49:56 +01:00
omap-mailbox.c mailbox/omap: use of_device_get_match_data() to get match data 2018-08-03 18:57:15 +05:30
pcc.c mailbox: PCC: handle parse error 2018-11-13 11:08:18 -08:00
pl320-ipc.c mailbox: pl320: remove __raw IO 2016-06-24 13:32:31 +05:30
platform_mhu.c mailbox: Add Platform Message-Handling-Unit variant driver 2016-09-07 13:07:17 +05:30
qcom-apcs-ipc-mailbox.c mailbox: qcom-apcs: fix max_register value 2020-01-27 14:51:14 +01:00
rockchip-mailbox.c mailbox: rockchip: avoid 64-bit division 2016-03-16 09:18:15 +05:30
stm32-ipcc.c mailbox: stm32_ipcc: add spinlock to fix channels concurrent access 2019-12-05 09:21:34 +01:00
tegra-hsp.c mailbox: tegra-hsp: Use after free in tegra_hsp_remove_doorbells() 2016-11-18 14:32:13 +01:00
ti-msgmgr.c mailbox: ti-msgmgr: Off by one in ti_msgmgr_of_xlate() 2020-01-27 14:50:04 +01:00