mirror of
https://github.com/torvalds/linux.git
synced 2026-05-20 21:08:08 +02:00
A recursive lockdep warning occurs if you call regulator_set_optimum_mode() on a regulator with a supply because there is no nesting annotation for the rdev->mutex. To avoid this warning, get the supply's load before locking the regulator's mutex to avoid grabbing the same class of lock twice. ============================================= [ INFO: possible recursive locking detected ] 3.4.0 #3257 Tainted: G W --------------------------------------------- swapper/0/1 is trying to acquire lock: (&rdev->mutex){+.+.+.}, at: [<c036e9e0>] regulator_get_voltage+0x18/0x38 but task is already holding lock: (&rdev->mutex){+.+.+.}, at: [<c036ef38>] regulator_set_optimum_mode+0x24/0x224 other info that might help us debug this: Possible unsafe locking scenario: CPU0 ---- lock(&rdev->mutex); lock(&rdev->mutex); *** DEADLOCK *** May be due to missing lock nesting notation 3 locks held by swapper/0/1: #0: (&__lockdep_no_validate__){......}, at: [<c03dbb48>] __driver_attach+0x40/0x8c #1: (&__lockdep_no_validate__){......}, at: [<c03dbb58>] __driver_attach+0x50/0x8c #2: (&rdev->mutex){+.+.+.}, at: [<c036ef38>] regulator_set_optimum_mode+0x24/0x224 stack backtrace: [<c001521c>] (unwind_backtrace+0x0/0x12c) from [<c00cc4d4>] (validate_chain+0x760/0x1080) [<c00cc4d4>] (validate_chain+0x760/0x1080) from [<c00cd744>] (__lock_acquire+0x950/0xa10) [<c00cd744>] (__lock_acquire+0x950/0xa10) from [<c00cd990>] (lock_acquire+0x18c/0x1e8) [<c00cd990>] (lock_acquire+0x18c/0x1e8) from [<c080c248>] (mutex_lock_nested+0x68/0x3c4) [<c080c248>] (mutex_lock_nested+0x68/0x3c4) from [<c036e9e0>] (regulator_get_voltage+0x18/0x38) [<c036e9e0>] (regulator_get_voltage+0x18/0x38) from [<c036efb8>] (regulator_set_optimum_mode+0xa4/0x224) ... Signed-off-by: Stephen Boyd <sboyd@codeaurora.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> |
||
|---|---|---|
| .. | ||
| 88pm8607.c | ||
| aat2870-regulator.c | ||
| ab3100.c | ||
| ab8500.c | ||
| ad5398.c | ||
| anatop-regulator.c | ||
| core.c | ||
| da903x.c | ||
| da9052-regulator.c | ||
| db8500-prcmu.c | ||
| dbx500-prcmu.c | ||
| dbx500-prcmu.h | ||
| dummy.c | ||
| dummy.h | ||
| fixed-helper.c | ||
| fixed.c | ||
| gpio-regulator.c | ||
| isl6271a-regulator.c | ||
| Kconfig | ||
| lp3971.c | ||
| lp3972.c | ||
| Makefile | ||
| max1586.c | ||
| max8649.c | ||
| max8660.c | ||
| max8925-regulator.c | ||
| max8952.c | ||
| max8997.c | ||
| max8998.c | ||
| mc13xxx-regulator-core.c | ||
| mc13xxx.h | ||
| mc13783-regulator.c | ||
| mc13892-regulator.c | ||
| of_regulator.c | ||
| palmas-regulator.c | ||
| pcap-regulator.c | ||
| pcf50633-regulator.c | ||
| rc5t583-regulator.c | ||
| s5m8767.c | ||
| tps6105x-regulator.c | ||
| tps6507x-regulator.c | ||
| tps6524x-regulator.c | ||
| tps6586x-regulator.c | ||
| tps62360-regulator.c | ||
| tps65023-regulator.c | ||
| tps65090-regulator.c | ||
| tps65217-regulator.c | ||
| tps65910-regulator.c | ||
| tps65912-regulator.c | ||
| twl-regulator.c | ||
| userspace-consumer.c | ||
| virtual.c | ||
| wm831x-dcdc.c | ||
| wm831x-isink.c | ||
| wm831x-ldo.c | ||
| wm8350-regulator.c | ||
| wm8400-regulator.c | ||
| wm8994-regulator.c | ||