linux-stable/drivers/regulator
Jeffrey Carlyle 8cbf811dfd regulator: avoid deadlock when disabling regulator with supply
I have a regulator A that sets regulator B as its supply. When I call
set_supply to add B as the supply for A, regulator A gets added to the
supply_list for regulator B.

When I call regulator_disable(A), I end up with a call chain like this:

regulator_disable(A)
> mutex_lock(A)
> _regulator_disable(A)
>> _regulator_disable(B)
>>> _notifier_call_chain(B)
>>>> mutex_lock(A)

Which results in dead lock since we are trying to acquire the mutex lock
for regulator A which we already hold.

This patch addresses this issue by moving the call to disable regulator
B outside of the lock aquired inside the initial call to
regulator_disable.

This change also addresses the issue of not acquiring the mutex for
regulator B before calling _regulator_disable(B).

Signed-off-by: Jeffrey Carlyle <jeff.carlyle@motorola.com>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2010-10-28 22:40:31 +01:00
..
88pm8607.c regulator: 88pm8607 - fix value range checking for accessing info->vol_table 2010-09-05 11:15:52 +01:00
ab3100.c regulator: ab3100 - fix the logic to remove already registered regulators in error path 2010-09-01 12:59:33 +01:00
ab8500.c regulator: ab8500 - fix off-by-one value range checking for selector 2010-09-05 11:15:52 +01:00
ad5398.c i2c: Remove obsolete cleanup for clientdata 2010-09-30 14:14:22 +02:00
bq24022.c Regulators: ab3100/bq24022: add a missing .owner field in regulator_desc 2010-05-25 10:16:02 +01:00
core.c regulator: avoid deadlock when disabling regulator with supply 2010-10-28 22:40:31 +01:00
da903x.c regulator: keep index within bounds in da9034_get_ldo12_voltage() 2009-12-17 10:27:25 +00:00
dummy.c regulator: Provide optional dummy regulator for consumers 2010-03-03 14:49:26 +00:00
dummy.h regulator: Provide optional dummy regulator for consumers 2010-03-03 14:49:26 +00:00
fixed.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
isl6271a-regulator.c i2c: Remove obsolete cleanup for clientdata 2010-09-30 14:14:22 +02:00
Kconfig Regulator: LP3972 PMIC regulator driver 2010-10-28 22:40:31 +01:00
lp3971.c regulator: lp3971 - remove unnecessary ret value checking in lp3971_i2c_write() 2010-08-11 11:38:02 +01:00
lp3972.c Regulator: lp3972 cleanup 2010-10-28 22:40:31 +01:00
Makefile regulator: Add option for machine drivers to enable the dummy regulator 2010-10-28 22:40:31 +01:00
max1586.c regulator: max1586 - improve the logic of choosing selector 2010-09-01 12:59:33 +01:00
max8649.c regulator: max8649 - fix setting extclk_freq 2010-10-02 14:19:45 +01:00
max8660.c regulator: max8660 - fix a memory leak in max8660_remove() 2010-08-11 11:38:02 +01:00
max8925-regulator.c regulator: fix enabling regulator issue on max8925 2010-04-28 15:24:34 +01:00
max8952.c MAX8952 PMIC Driver Initial Release 2010-10-28 22:40:31 +01:00
max8998.c regulator: set max8998->dev to &pdev->dev. 2010-09-01 12:59:34 +01:00
mc13783-regulator.c mc13783-regulator: fix vaild voltage range checking for mc13783_fixed_regulator_set_voltage 2010-05-25 10:16:02 +01:00
pcap-regulator.c Regulators: pcap-regulator - clean up driver data after removal 2010-03-03 14:49:29 +00:00
pcf50633-regulator.c mfd: Fix pcf50633-regulator drvdata usage 2009-12-13 19:21:20 +01:00
tps6507x-regulator.c regulator: tps6507x - remove incorrect comments 2010-09-01 12:59:34 +01:00
tps6586x-regulator.c regulator: tps6586x-regulator - fix bit_mask parameter for tps6586x_set_bits() 2010-09-01 12:59:34 +01:00
tps65023-regulator.c tps65023: Allow registering similar TPS65021 2010-08-11 11:38:01 +01:00
twl-regulator.c twl6030: regulator: Remove vsel tables and use formula for calculation 2010-05-25 10:16:02 +01:00
userspace-consumer.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
virtual.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
wm831x-dcdc.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
wm831x-isink.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
wm831x-ldo.c regulator: wm831x-ldo - fix the logic to set REGULATOR_MODE_IDLE and REGULATOR_MODE_STANDBY modes 2010-09-06 11:14:47 +01:00
wm8350-regulator.c regulator: wm8350-regulator - fix the logic of checking REGULATOR_MODE_STANDBY mode 2010-09-06 11:14:47 +01:00
wm8400-regulator.c Regulators: wm8400 - cleanup platform driver data handling 2010-03-03 14:49:30 +00:00
wm8994-regulator.c regulator: Default GPIO controlled WM8994 regulators to disabled 2010-08-11 11:38:02 +01:00