• Enric Balletbo i Serra's avatar
    usb: dwc3: of-simple: fix oops by unbalanced clk disable call · bff52352
    Enric Balletbo i Serra authored
    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: default avatarEnric Balletbo i Serra <enric.balletbo@collabora.com>
    Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
    bff52352
dwc3-of-simple.c 4.76 KB