linux/drivers/base
Rafael J. Wysocki e8b364b88c PM / Clocks: Do not acquire a mutex under a spinlock
Commit b7ab83e (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: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
2011-09-26 19:40:23 +02:00
..
power PM / Clocks: Do not acquire a mutex under a spinlock 2011-09-26 19:40:23 +02:00
regmap Merge branch 'for-linus' of git://opensource.wolfsonmicro.com/regmap 2011-09-08 16:47:52 -07:00
attribute_container.c
base.h PM: Remove sysdev suspend, resume and shutdown operations 2011-05-11 21:37:15 +02:00
bus.c
class.c
core.c drivers/base/core.c: Fixed brace coding style issue. 2011-04-22 17:06:30 -07:00
cpu.c
dd.c Merge branch 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6 2011-05-19 18:24:11 -07:00
devres.c base/devres.c: quiet sparse noise about context imbalance 2011-08-22 14:12:24 -07:00
devtmpfs.c drivers/base/devtmpfs.c: correct annotation of `setup_done' 2011-08-08 13:53:50 -07:00
dma-coherent.c
dma-mapping.c
driver.c
firmware_class.c firmware loader: allow builtin firmware load even if usermodehelper is disabled 2011-08-24 15:55:30 -07:00
firmware.c
hypervisor.c
init.c
isa.c
Kconfig Merge branch 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6 2011-07-25 23:06:24 -07:00
Makefile Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap 2011-07-23 11:14:47 -07:00
map.c
memory.c atomic: use <linux/atomic.h> 2011-07-26 16:49:47 -07:00
module.c
node.c mm: per-node vmstat: show proper vmstats 2011-05-25 08:39:07 -07:00
platform.c driver core: fix kernel-doc warning in platform.c 2011-08-08 13:53:49 -07:00
sys.c PM: Remove sysdev suspend, resume and shutdown operations 2011-05-11 21:37:15 +02:00
syscore.c PM: Reintroduce dropped call to check_wakeup_irqs 2011-07-11 10:51:49 +02:00
topology.c
transport_class.c