From 70335261b7c78461103497ca60e190b742e02774 Mon Sep 17 00:00:00 2001 From: Liang Chen Date: Sun, 12 Apr 2020 16:15:12 +0800 Subject: [PATCH] soc: rockchip: system_monitor: make sure thermal work is done before reboot Thermal work is bound to a cpu which may offline while reboot, and it will cause warning as below: [ 37.344392] WARNING: CPU: 0 PID: 1 at kernel/workqueue.c:858 wq_worker_waking_up+0x50/0x9c [ 37.345118] Modules linked in: [ 37.345407] CPU: 0 PID: 1 Comm: init Not tainted 4.19.111 #187 [ 37.345927] Hardware name: Rockchip RK3399 EVB IND LPDDR4 Board edp (Android) (DT) [ 37.346599] pstate: 20400085 (nzCv daIf +PAN -UAO) [ 37.347030] pc : wq_worker_waking_up+0x50/0x9c [ 37.347427] lr : wq_worker_waking_up+0x18/0x9c [ 37.444388] Call trace: [ 37.444615] wq_worker_waking_up+0x50/0x9c [ 37.444990] try_to_wake_up+0x42c/0x600 [ 37.445342] default_wake_function+0x14/0x1c [ 37.445730] autoremove_wake_function+0x18/0x58 [ 37.446139] __wake_up_common+0xb0/0x138 [ 37.446491] __wake_up_common_lock+0x7c/0xc4 [ 37.446876] __wake_up+0x14/0x1c [ 37.447174] rk3x_i2c_irq+0x564/0x7bc [ 37.447503] rk3x_i2c_restart_notify+0x44/0xf0 [ 37.447902] atomic_notifier_call_chain+0x4c/0x84 [ 37.448323] do_kernel_i2c_restart+0x20/0x28 [ 37.448710] machine_restart+0x20/0x58 [ 37.449050] kernel_restart+0x100/0x110 [ 37.449402] __arm64_sys_reboot+0x140/0x20c [ 37.449778] el0_svc_common+0x98/0x150 [ 37.450119] el0_svc_handler+0x60/0x78 [ 37.450459] el0_svc+0x8/0xc Change-Id: I21b30e95ce99cb186d443c66049d279e0805c5d7 Signed-off-by: Liang Chen --- drivers/soc/rockchip/rockchip_system_monitor.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/soc/rockchip/rockchip_system_monitor.c b/drivers/soc/rockchip/rockchip_system_monitor.c index cffb408cbc35..2ebfa2d4aed0 100644 --- a/drivers/soc/rockchip/rockchip_system_monitor.c +++ b/drivers/soc/rockchip/rockchip_system_monitor.c @@ -1393,6 +1393,7 @@ static int rockchip_monitor_reboot_notifier(struct notifier_block *nb, unsigned long action, void *ptr) { rockchip_set_system_status(SYS_STATUS_REBOOT); + cancel_delayed_work_sync(&system_monitor->thermal_work); return NOTIFY_OK; }