提交 bff52352 编写于 作者: E Enric Balletbo i Serra 提交者: Felipe Balbi

usb: dwc3: of-simple: fix oops by unbalanced clk disable call

dwc3_of_simple_dev_pm_ops has never been used since commit a0d8c4cf
("usb: dwc3: of-simple: set dev_pm_ops"), but this commit has brought
and oops when unbind the device due this sequence:

  dwc3_of_simple_remove
   -> clk_disable ...
      -> pm_runtime_put_sync
         -> dwc3_of_simple_runtime_suspend
            -> clk_disable (again)

This double call to clk_core_disable causes a kernel oops like this:

 WARNING: CPU: 1 PID: 4022 at drivers/clk/clk.c:656 clk_core_disable+0x78/0x80
 CPU: 1 PID: 4022 Comm: bash Not tainted 4.15.0-rc4+ #44
 Hardware name: Google Kevin (DT)
 pstate: 80000085 (Nzcv daIf -PAN -UAO)
 pc : clk_core_disable+0x78/0x80
 lr : clk_core_disable_lock+0x20/0x38
 sp : ffff00000bbf3a90
 ...
 Call trace:
  clk_core_disable+0x78/0x80
  clk_disable+0x1c/0x30
  dwc3_of_simple_runtime_suspend+0x30/0x50
  pm_generic_runtime_suspend+0x28/0x40

This patch fixes the unbalanced clk disable call by setting the num_clocks
variable to zero once the clocks were disabled.

Fixes: a0d8c4cf ("usb: dwc3: of-simple: set dev_pm_ops")
Signed-off-by: NEnric Balletbo i Serra <enric.balletbo@collabora.com>
Signed-off-by: NFelipe Balbi <felipe.balbi@linux.intel.com>
上级 7928b2cb
...@@ -143,6 +143,7 @@ static int dwc3_of_simple_remove(struct platform_device *pdev) ...@@ -143,6 +143,7 @@ static int dwc3_of_simple_remove(struct platform_device *pdev)
clk_disable_unprepare(simple->clks[i]); clk_disable_unprepare(simple->clks[i]);
clk_put(simple->clks[i]); clk_put(simple->clks[i]);
} }
simple->num_clocks = 0;
reset_control_assert(simple->resets); reset_control_assert(simple->resets);
reset_control_put(simple->resets); reset_control_put(simple->resets);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册