• R
    PM / Clocks: Do not acquire a mutex under a spinlock · e8b364b8
    Rafael J. Wysocki 提交于
    Commit b7ab83ed (PM: Use spinlock instead of mutex in clock
    management functions) introduced a regression causing clocks_mutex
    to be acquired under a spinlock.  This happens because
    pm_clk_suspend() and pm_clk_resume() call pm_clk_acquire() under
    pcd->lock, but pm_clk_acquire() executes clk_get() which causes
    clocks_mutex to be acquired.  Similarly, __pm_clk_remove(),
    executed under pcd->lock, calls clk_put(), which also causes
    clocks_mutex to be acquired.
    
    To fix those problems make pm_clk_add() call pm_clk_acquire(), so
    that pm_clk_suspend() and pm_clk_resume() don't have to do that.
    Change pm_clk_remove() and pm_clk_destroy() to separate
    modifications of the pcd->clock_list list from the actual removal of
    PM clock entry objects done by __pm_clk_remove().
    Reported-and-tested-by: NGuennadi Liakhovetski <g.liakhovetski@gmx.de>
    Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
    Acked-by: NRussell King <rmk+kernel@arm.linux.org.uk>
    e8b364b8
clock_ops.c 11.0 KB