]> git.baikalelectronics.ru Git - kernel.git/commit
mailbox: avoid timer start from callback
authorJassi Brar <jaswinder.singh@linaro.org>
Fri, 16 Oct 2020 17:20:56 +0000 (12:20 -0500)
committerJassi Brar <jaswinder.singh@linaro.org>
Sat, 17 Oct 2020 00:09:17 +0000 (19:09 -0500)
commit1038f0f74e7e41c4c81fd00d541247aab151e851
treeadc30faf45a233f1c42f8b3b720a0360c77309cb
parentf7f217ac380eb59125660a5fef91b576c36c1f24
mailbox: avoid timer start from callback

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: 815338e6ecdc ("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>
drivers/mailbox/mailbox.c