From 8c07126830c76b3b4940bd5010fcab2922fe460d Mon Sep 17 00:00:00 2001 From: Finley Xiao Date: Mon, 28 Oct 2019 20:47:55 +0800 Subject: [PATCH] PM / devfreq: rockchip_dmc: stop monitor only when enable auto-freq This fix the warning: WARNING: CPU: 1 PID: 1 at kernel/workqueue.c:2934 __flush_work+0x1f8/0x220 Modules linked in: CPU: 1 PID: 1 Comm: init Not tainted 4.19.53 #303 Hardware name: Rockchip RK3399 EVB IND LPDDR4 Board edp (Android) (DT) pstate: 00400005 (nzcv daif +PAN -UAO) pc : __flush_work+0x1f8/0x220 lr : __cancel_work_timer+0x12c/0x1a8 sp : ffffff800804ba20 x29: ffffff800804ba20 x28: ffffffc0f1870000 x27: 0000000000000000 x26: ffffffc0f1870000 x25: ffffff800804bb30 x24: ffffff80094e8000 x23: ffffff80080d1910 x22: 0000000000000000 x21: ffffff800933d000 x20: ffffffc0f0777350 x19: ffffff80094e85b8 x18: ffffffffffffffff x17: 0000000000000000 x16: 0000000000000001 x15: ffffff800933da88 x14: ffffff80894ecdf7 x13: ffffff80094ece05 x12: ffffff80094ed240 x11: ffffff800935e000 x10: 0000000000000000 x9 : ffffffc00a3a0180 x8 : 0000000000000004 x7 : 0000000002487900 x6 : 0000000000000001 x5 : 0000000000000001 x4 : 0000000000000800 x3 : ffffff800933da88 x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffffffc0f0777350 Call trace: __flush_work+0x1f8/0x220 __cancel_work_timer+0x12c/0x1a8 cancel_delayed_work_sync+0x10/0x18 devfreq_monitor_stop+0x10/0x18 rockchip_dmcfreq_system_status_notifier+0x150/0x160 notifier_call_chain+0x50/0x90 __blocking_notifier_call_chain+0x50/0x78 blocking_notifier_call_chain+0x14/0x20 rockchip_set_system_status+0xb0/0xd0 rockchip_monitor_reboot_notifier+0x10/0x20 notifier_call_chain+0x50/0x90 __blocking_notifier_call_chain+0x50/0x78 blocking_notifier_call_chain+0x14/0x20 kernel_restart_prepare+0x1c/0x40 kernel_restart+0x14/0x78 __se_sys_reboot+0x1cc/0x208 __arm64_sys_reboot+0x18/0x20 el0_svc_common+0xbc/0x188 el0_svc_handler+0x2c/0x80 el0_svc+0x8/0xc ---[ end trace 4548dcc701eee1b0 ]--- Change-Id: I479d0abdfcf6aa144036983c57b0878e104cd8e0 Signed-off-by: Finley Xiao --- drivers/devfreq/rockchip_dmc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/devfreq/rockchip_dmc.c b/drivers/devfreq/rockchip_dmc.c index 616379470130..5589cf4d2041 100644 --- a/drivers/devfreq/rockchip_dmc.c +++ b/drivers/devfreq/rockchip_dmc.c @@ -2775,7 +2775,8 @@ static int rockchip_dmcfreq_system_status_notifier(struct notifier_block *nb, } if (dmcfreq->reboot_rate && (status & SYS_STATUS_REBOOT)) { - devfreq_monitor_stop(dmcfreq->devfreq); + if (dmcfreq->auto_freq_en) + devfreq_monitor_stop(dmcfreq->devfreq); target_rate = dmcfreq->reboot_rate; goto next; }