/[packages]/cauldron/kernel/current/PATCHES/patches/0092-scsi-ufs-Schedule-clk-gating-work-on-correct-queue.patch
ViewVC logotype

Contents of /cauldron/kernel/current/PATCHES/patches/0092-scsi-ufs-Schedule-clk-gating-work-on-correct-queue.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1329221 - (show annotations) (download)
Fri Nov 9 22:05:45 2018 UTC (5 years, 10 months ago) by tmb
File size: 3297 byte(s)
add fixes from sashas autosel queue
1 From 8312029ecbe0adfe0425203caf0ed67b46a3c78b Mon Sep 17 00:00:00 2001
2 From: Evan Green <evgreen@chromium.org>
3 Date: Fri, 5 Oct 2018 10:27:32 -0700
4 Subject: [PATCH 092/145] scsi: ufs: Schedule clk gating work on correct queue
5
6 [ Upstream commit f4bb7704699beee9edfbee875daa9089c86cf724 ]
7
8 With commit 10e5e37581fc ("scsi: ufs: Add clock ungating to a separate
9 workqueue"), clock gating work was moved to a separate work queue with
10 WQ_MEM_RECLAIM set, since clock gating could occur from a memory reclaim
11 context. Unfortunately, clk_gating.gate_work was left queued via
12 schedule_delayed_work, which is a system workqueue that does not have
13 WQ_MEM_RECLAIM set. Because ufshcd_ungate_work attempts to cancel
14 gate_work, the following warning appears:
15
16 [ 14.174170] workqueue: WQ_MEM_RECLAIM ufs_clk_gating_0:ufshcd_ungate_work is flushing !WQ_MEM_RECLAIM events:ufshcd_gate_work
17 [ 14.174179] WARNING: CPU: 4 PID: 173 at kernel/workqueue.c:2440 check_flush_dependency+0x110/0x118
18 [ 14.205725] CPU: 4 PID: 173 Comm: kworker/u16:3 Not tainted 4.14.68 #1
19 [ 14.212437] Hardware name: Google Cheza (rev1) (DT)
20 [ 14.217459] Workqueue: ufs_clk_gating_0 ufshcd_ungate_work
21 [ 14.223107] task: ffffffc0f6a40080 task.stack: ffffff800a490000
22 [ 14.229195] PC is at check_flush_dependency+0x110/0x118
23 [ 14.234569] LR is at check_flush_dependency+0x110/0x118
24 [ 14.239944] pc : [<ffffff80080cad14>] lr : [<ffffff80080cad14>] pstate: 60c001c9
25 [ 14.333050] Call trace:
26 [ 14.427767] [<ffffff80080cad14>] check_flush_dependency+0x110/0x118
27 [ 14.434219] [<ffffff80080cafec>] start_flush_work+0xac/0x1fc
28 [ 14.440046] [<ffffff80080caeec>] flush_work+0x40/0x94
29 [ 14.445246] [<ffffff80080cb288>] __cancel_work_timer+0x11c/0x1b8
30 [ 14.451433] [<ffffff80080cb4b8>] cancel_delayed_work_sync+0x20/0x30
31 [ 14.457886] [<ffffff80085b9294>] ufshcd_ungate_work+0x24/0xd0
32 [ 14.463800] [<ffffff80080cfb04>] process_one_work+0x32c/0x690
33 [ 14.469713] [<ffffff80080d0154>] worker_thread+0x218/0x338
34 [ 14.475361] [<ffffff80080d527c>] kthread+0x120/0x130
35 [ 14.480470] [<ffffff8008084814>] ret_from_fork+0x10/0x18
36
37 The simple solution is to put the gate_work on the same WQ_MEM_RECLAIM
38 work queue as the ungate_work.
39
40 Fixes: 10e5e37581fc ("scsi: ufs: Add clock ungating to a separate workqueue")
41 Signed-off-by: Evan Green <evgreen@chromium.org>
42 Reviewed-by: Douglas Anderson <dianders@chromium.org>
43 Reviewed-by: Stephen Boyd <swboyd@chromium.org>
44 Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
45 Signed-off-by: Sasha Levin <sashal@kernel.org>
46 ---
47 drivers/scsi/ufs/ufshcd.c | 5 +++--
48 1 file changed, 3 insertions(+), 2 deletions(-)
49
50 diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
51 index c55f38ec391c..54074dd483a7 100644
52 --- a/drivers/scsi/ufs/ufshcd.c
53 +++ b/drivers/scsi/ufs/ufshcd.c
54 @@ -1691,8 +1691,9 @@ static void __ufshcd_release(struct ufs_hba *hba)
55
56 hba->clk_gating.state = REQ_CLKS_OFF;
57 trace_ufshcd_clk_gating(dev_name(hba->dev), hba->clk_gating.state);
58 - schedule_delayed_work(&hba->clk_gating.gate_work,
59 - msecs_to_jiffies(hba->clk_gating.delay_ms));
60 + queue_delayed_work(hba->clk_gating.clk_gating_workq,
61 + &hba->clk_gating.gate_work,
62 + msecs_to_jiffies(hba->clk_gating.delay_ms));
63 }
64
65 void ufshcd_release(struct ufs_hba *hba)
66 --
67 2.19.1
68

  ViewVC Help
Powered by ViewVC 1.1.30