linux/drivers/regulator
Niklas Cassel e5e21f70bf
regulator: core: Take lock before applying system load
Take the regulator lock before applying system load.

Fixes the following lockdep splat:

[    5.583581] WARNING: CPU: 1 PID: 16 at drivers/regulator/core.c:925 drms_uA_update+0x114/0x360
[    5.588467] Modules linked in:
[    5.596833] CPU: 1 PID: 16 Comm: kworker/1:0 Not tainted 5.0.0-rc6-next-20190213-00002-g0fce66ab480f #18
[    5.599933] Hardware name: Qualcomm Technologies, Inc. APQ 8016 SBC (DT)
[    5.609544] Workqueue: events qcom_channel_state_worker
[    5.616209] pstate: 60000005 (nZCv daif -PAN -UAO)
[    5.621152] pc : drms_uA_update+0x114/0x360
[    5.626006] lr : drms_uA_update+0x110/0x360
[    5.630084] sp : ffff0000124b3490
[    5.634242] x29: ffff0000124b3490 x28: ffff800005326e00
[    5.637735] x27: ffff0000124b35f8 x26: 000000000032bc48
[    5.643117] x25: ffff800004c7e800 x24: ffff800004c6d500
[    5.648411] x23: ffff800004c38a80 x22: 00000000000000d1
[    5.653706] x21: 00000000001ab3f0 x20: ffff800004c7e800
[    5.659001] x19: ffff0000114c3000 x18: ffffffffffffffff
[    5.664297] x17: 0000000000000000 x16: 0000000000000000
[    5.669592] x15: ffff0000114c3808 x14: 0720072007200720
[    5.674888] x13: 00000000199c9b28 x12: ffff80002bcccc40
[    5.680183] x11: ffff000012286000 x10: ffff0000114c3808
[    5.685477] x9 : 0720072007200720 x8 : ffff000010e9e808
[    5.690772] x7 : ffff0000106da568 x6 : 0000000000000000
[    5.696067] x5 : 0000000000000000 x4 : 0000000000000000
[    5.701362] x3 : 0000000000000004 x2 : 0000000000000000
[    5.706658] x1 : 0000000000000000 x0 : 0000000000000000
[    5.711952] Call trace:
[    5.717223]  drms_uA_update+0x114/0x360
[    5.719405]  regulator_register+0xb30/0x1140
[    5.723230]  devm_regulator_register+0x4c/0xa8
[    5.727745]  rpm_reg_probe+0xfc/0x1b0
[    5.731992]  platform_drv_probe+0x50/0xa0
[    5.735727]  really_probe+0x20c/0x2b8
[    5.739718]  driver_probe_device+0x58/0x100
[    5.743368]  __device_attach_driver+0x90/0xd0
[    5.747363]  bus_for_each_drv+0x64/0xc8
[    5.751870]  __device_attach+0xd8/0x138
[    5.755516]  device_initial_probe+0x10/0x18
[    5.759341]  bus_probe_device+0x98/0xa0
[    5.763502]  device_add+0x3d0/0x640
[    5.767319]  of_device_add+0x48/0x58
[    5.770793]  of_platform_device_create_pdata+0xb0/0x128
[    5.774629]  of_platform_bus_create+0x174/0x370
[    5.779569]  of_platform_populate+0x78/0xe0
[    5.784082]  qcom_smd_rpm_probe+0x80/0xa0
[    5.788245]  rpmsg_dev_probe+0x114/0x1a0
[    5.792411]  really_probe+0x20c/0x2b8
[    5.796401]  driver_probe_device+0x58/0x100
[    5.799964]  __device_attach_driver+0x90/0xd0
[    5.803960]  bus_for_each_drv+0x64/0xc8
[    5.808468]  __device_attach+0xd8/0x138
[    5.812115]  device_initial_probe+0x10/0x18
[    5.815936]  bus_probe_device+0x98/0xa0
[    5.820099]  device_add+0x3d0/0x640
[    5.823916]  device_register+0x1c/0x28
[    5.827391]  rpmsg_register_device+0x4c/0x90
[    5.831216]  qcom_channel_state_worker+0x170/0x298
[    5.835651]  process_one_work+0x294/0x6e8
[    5.840241]  worker_thread+0x40/0x450
[    5.844318]  kthread+0x11c/0x120
[    5.847961]  ret_from_fork+0x10/0x18
[    5.851260] irq event stamp: 9090
[    5.854820] hardirqs last  enabled at (9089): [<ffff000010160798>] console_unlock+0x3e0/0x5b0
[    5.858086] hardirqs last disabled at (9090): [<ffff0000100817cc>] do_debug_exception+0x104/0x140
[    5.866596] softirqs last  enabled at (9086): [<ffff000010082024>] __do_softirq+0x474/0x574
[    5.875446] softirqs last disabled at (9079): [<ffff0000100f2254>] irq_exit+0x13c/0x148
[    5.883598] ---[ end trace 6984ef7f081afa21 ]---

Fixes: fa94e48e13 ("regulator: core: Apply system load even if no consumer loads")
Signed-off-by: Niklas Cassel <niklas.cassel@linaro.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
2019-02-15 17:45:11 +00:00
..
88pg86x.c regulator: 88pg86x: new i2c dual regulator chip 2018-03-09 13:01:17 +00:00
88pm800.c regulator: 88pm800: constify regulator_ops structures 2017-01-31 20:32:26 +00:00
88pm8607.c regulator: Use of_node_name_eq for node name comparisons 2018-12-06 19:56:51 +00:00
aat2870-regulator.c regulator: aat2870-regulator: constify regulator_ops structure 2017-01-31 20:35:49 +00:00
ab3100.c
ab8500-ext.c
ab8500.c regulator: ab8500: Drop AB8540/9540 support 2018-04-16 13:08:59 +01:00
act8865-regulator.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
act8945a-regulator.c regulator: act8945a-regulator: make symbol act8945a_pm static 2018-12-19 18:09:37 +00:00
ad5398.c regulator: ad5398: constify regulator_ops structure 2017-01-31 20:38:27 +00:00
anatop-regulator.c regulator: anatop: Switch to SPDX identifier 2018-05-24 15:17:07 +01:00
arizona-ldo1.c regulator: arizona-ldo1: Rely on core to handle GPIO descriptor 2018-12-12 16:49:36 +00:00
arizona-micsupp.c regulator: arizona-micsupp: Factor out generic initialization 2017-04-25 16:36:31 +01:00
as3711-regulator.c regulator: as3711: convert to SPDX identifiers 2018-11-13 16:21:50 -08:00
as3722-regulator.c
axp20x-regulator.c regulator: axp20x: fix ALDO2, DLDO2 and ELDO3 definitions for AXP803 2019-02-04 09:54:20 +01:00
bcm590xx-regulator.c regulator: bcm590xx: Fix .enable_reg for BCM590XX_REG_VSR 2019-01-07 16:12:33 +00:00
bd718x7-regulator.c Merge branch 'for-linus' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator into regulator-4.21 2018-12-11 20:44:49 +00:00
bd9571mwv-regulator.c regulator: bd9571mwv: convert to SPDX identifiers 2018-11-13 16:21:49 -08:00
core.c regulator: core: Take lock before applying system load 2019-02-15 17:45:11 +00:00
cpcap-regulator.c regulator: Add support for CPCAP regulators on Motorola Xoom devices. 2018-07-24 15:37:08 +01:00
da903x.c
da9052-regulator.c regulator: da9052: Use lowercase regulator names to match the DT 2019-01-25 17:52:59 +00:00
da9055-regulator.c regulator: da905{2,5}: Remove unnecessary array check 2018-09-20 18:28:09 -07:00
da9062-regulator.c regulator: da9061: BUCK and LDO regulator driver 2017-06-07 19:47:24 +01:00
da9063-regulator.c regulator: da9063: Handle less LDOs on DA9063L 2018-07-04 07:17:08 +01:00
da9210-regulator.c regulator: core: Use ww_mutex for regulators locking 2018-11-19 12:33:17 +00:00
da9210-regulator.h
da9211-regulator.c regulator: da9211: Hand over GPIO to regulator core 2018-12-11 01:04:37 +00:00
da9211-regulator.h regulator: da9211: update for supporting da9223/4/5 2017-10-31 11:01:14 +00:00
db8500-prcmu.c
dbx500-prcmu.c regulator: convert to DEFINE_SHOW_ATTRIBUTE 2018-12-20 14:38:42 +00:00
dbx500-prcmu.h
devres.c regulator: core: optimize devm_regulator_bulk_get() 2017-02-04 11:37:25 +01:00
dummy.c
dummy.h
fan53555.c regulator: fan53555: fix I2C device ids 2017-08-21 16:57:53 +01:00
fixed-helper.c regulator: fixed: Convert to use GPIO descriptor only 2018-09-17 14:32:22 -07:00
fixed.c regulator: fixed: Let core handle GPIO descriptor 2018-12-11 01:03:40 +00:00
gpio-regulator.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
helpers.c regulator/mfd: Support for the ROHM BD71847 2018-09-28 15:07:30 +01:00
hi655x-regulator.c Merge remote-tracking branches 'regulator/topic/helpers', 'regulator/topic/hi655x', 'regulator/topic/lm363x', 'regulator/topic/ltc3589' and 'regulator/topic/ltc3676' into regulator-next 2017-04-30 22:17:31 +09:00
hi6421-regulator.c regulator: hi6421: Describe consumed platform device 2017-06-07 20:25:49 +01:00
hi6421v530-regulator.c regulator: hi6421v530: Describe consumed platform device 2017-06-14 18:27:20 +01:00
internal.h regulator: core: Only count load for enabled consumers 2018-11-22 14:38:00 +00:00
isl6271a-regulator.c
isl9305.c regulator: isl9305: Add missing .owner field in regulator_desc 2018-08-28 19:41:36 +01:00
Kconfig regulator: mcp16502: Select REGMAP_I2C to fix build error 2018-12-21 11:02:24 +00:00
lm363x-regulator.c regulator: lm363x: Let core handle GPIO descriptor 2018-12-11 01:03:49 +00:00
lochnagar-regulator.c regulator: lochnagar: Fix n_voltages setting for VDDCORE 2019-02-07 14:13:07 +00:00
lp872x.c
lp873x-regulator.c regulator: lp873x: Add support for populating input supply 2016-11-11 15:36:38 +00:00
lp3971.c
lp3972.c
lp8755.c regulator: lp8755: fix spelling mistake "acceess" -> "access" 2017-05-19 17:56:37 +01:00
lp8788-buck.c
lp8788-ldo.c regulator: lp8788-ldo: Let core handle GPIO descriptor 2018-12-11 01:03:54 +00:00
lp87565-regulator.c regulator: lp87565: Enable LP87565_BUCK_CTRL_1_FPWM_MP_0_2 2018-04-17 10:57:21 +01:00
ltc3589.c regmap: split up regmap_config.use_single_rw 2018-09-07 13:03:55 +01:00
ltc3676.c regmap: split up regmap_config.use_single_rw 2018-09-07 13:03:55 +01:00
Makefile regulator: mcp16502: add regulator driver for MCP16502 2018-12-13 12:19:04 +00:00
max1586.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
max8649.c
max8660.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
max8907-regulator.c regulator: max8907-regulator: constify regulator_ops structure 2017-01-31 20:54:26 +00:00
max8925-regulator.c regulator: max8925-regulator: constify regulator_ops structure 2017-01-31 20:54:41 +00:00
max8952.c regulator: max8952: Let core handle GPIO descriptor 2018-12-11 01:03:59 +00:00
max8973-regulator.c regulator: max8973: Let core handle GPIO descriptor 2018-12-11 01:04:31 +00:00
max8997-regulator.c regulator: Use of_node_name_eq for node name comparisons 2018-12-06 19:56:51 +00:00
max8998.c regulator: maxim: Add SPDX license identifiers 2018-08-08 10:52:50 +01:00
max14577-regulator.c regulator: maxim: Add SPDX license identifiers 2018-08-08 10:52:50 +01:00
max77620-regulator.c regulator: max77620: Initialize values for DT properties 2019-01-10 12:07:29 +00:00
max77686-regulator.c regulator: max77686: Let core handle GPIO descriptor 2018-12-11 01:04:08 +00:00
max77693-regulator.c regulator: maxim: Add SPDX license identifiers 2018-08-08 10:52:50 +01:00
max77802-regulator.c regulator: maxim: Add SPDX license identifiers 2018-08-08 10:52:50 +01:00
mc13xxx-regulator-core.c regulator: Use of_node_name_eq for node name comparisons 2018-12-06 19:56:51 +00:00
mc13xxx.h regulator: mc13xxx: Use lowercase regulator names to match the DT 2019-01-25 17:51:05 +00:00
mc13783-regulator.c regulator: mc13xxx: Use lowercase regulator names to match the DT 2019-01-25 17:51:05 +00:00
mc13892-regulator.c regulator: mc13xxx: Use lowercase regulator names to match the DT 2019-01-25 17:51:05 +00:00
mcp16502.c regulator: mcp16502: Fix missing n_voltages setting 2018-12-20 14:38:27 +00:00
mt6311-regulator.c
mt6311-regulator.h
mt6323-regulator.c
mt6380-regulator.c regulator: mt6380: Add support for MT6380 2017-08-15 12:50:48 +01:00
mt6397-regulator.c
of_regulator.c regulator: Allow regulator nodes to contain their own init data 2018-12-04 16:41:38 +00:00
palmas-regulator.c drivers/regulator: fix a missing check of return value 2018-12-19 12:37:52 +00:00
pbias-regulator.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
pcap-regulator.c regulator: pcap-regulator: constify regulator_ops structure 2017-01-31 20:57:31 +00:00
pcf50633-regulator.c regulator: pcf50633-regulator: constify regulator_ops structure 2017-01-31 20:58:15 +00:00
pfuze100-regulator.c regulator: pfuze100-regulator: add coin support to PF0100 2018-11-06 17:27:46 +00:00
pv88060-regulator.c regulator: pv88060-regulator: constify regulator_ops structure 2017-01-31 20:58:46 +00:00
pv88060-regulator.h
pv88080-regulator.c regulator: pv88080-regulator: constify regulator_ops structure 2017-01-31 20:59:01 +00:00
pv88080-regulator.h
pv88090-regulator.c regulator: pv88090: Exception handling for out of bounds 2017-08-30 16:12:17 +01:00
pv88090-regulator.h regulator: pv88090: Exception handling for out of bounds 2017-08-30 16:12:17 +01:00
pwm-regulator.c regulator: pwm-regulator: Remove unneeded gpiod NULL check 2017-07-24 16:26:35 +01:00
qcom_rpm-regulator.c regulator: qcom_rpm-regulator: add NULL check on of_match_device() return value 2017-07-07 13:42:03 +01:00
qcom_smd-regulator.c regulator: qcom: Add PMS405 regulators 2018-09-20 10:06:37 -07:00
qcom_spmi-regulator.c regulator: qcom_spmi: Indent with tabs instead of spaces 2018-07-20 17:40:57 +01:00
qcom-rpmh-regulator.c regulator: Use of_node_name_eq for node name comparisons 2018-12-06 19:56:51 +00:00
rc5t583-regulator.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
rk808-regulator.c regulator: rk808: Add regulator driver for RK805 2017-08-21 08:54:12 +01:00
rn5t618-regulator.c regulator: rn5t618: Do not index regulator_desc arrays by id 2017-10-18 11:23:21 +01:00
rt5033-regulator.c
s2mpa01.c regulator: s2mpa01: Fix step values for some LDOs 2019-02-13 12:31:19 +00:00
s2mps11.c regulator: s2mps11: Fix steps for buck7, buck8 and LDO35 2019-02-11 16:59:29 +00:00
s5m8767.c regulator: s5m8767: Hand over GPIO to regulator core 2018-12-11 01:04:43 +00:00
sc2731-regulator.c regulator: sc2731: Fix defines for SC2731_WR_UNLOCK and SC2731_PWR_WR_PROT_VALUE 2018-01-03 12:10:14 +00:00
sky81452-regulator.c
stm32-vrefbuf.c regulator: stm32-vrefbuf: fix check on ready flag 2018-02-08 15:28:35 +00:00
stpmic1_regulator.c regulator: stpmic1: fix regulator_lock usage 2018-12-03 11:39:24 +00:00
stw481x-vmmc.c regulator: stw481x-vmmc: fix ages old enable error 2016-11-13 09:22:37 +00:00
sy8106a-regulator.c regulator: add support for SY8106A regulator 2018-05-09 18:25:06 +09:00
ti-abb-regulator.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
tps6105x-regulator.c
tps6507x-regulator.c
tps6524x-regulator.c
tps6586x-regulator.c regulator: tps6586x: Add support for TPS658624 2018-04-20 11:44:34 +01:00
tps51632-regulator.c
tps62360-regulator.c
tps65023-regulator.c regulator: tps65023: Fix inverted core enable logic. 2017-04-18 18:55:05 +01:00
tps65086-regulator.c regulator: tps65086: Fix DT node referencing in of_parse_cb 2017-02-13 18:04:28 +00:00
tps65090-regulator.c regulator: tps65090: Hand over GPIO to regulator core 2018-12-11 01:04:56 +00:00
tps65132-regulator.c regulator: tps65132: fix platform_no_drv_owner.cocci warnings 2017-04-14 17:59:32 +01:00
tps65217-regulator.c regulator: tps65217: Fix NULL pointer dereference on probe 2018-07-30 09:41:04 +01:00
tps65218-regulator.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
tps65910-regulator.c regulator: tps65910: fix a missing check of return value 2018-12-21 11:04:59 +00:00
tps65912-regulator.c headers: separate linux/mod_devicetable.h from linux/platform_device.h 2018-07-07 17:52:26 +02:00
tps80031-regulator.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
twl6030-regulator.c mfd: twl: Move header file out of I2C realm 2017-09-04 14:41:02 +01:00
twl-regulator.c regulator: Don't return or expect -errno from of_map_mode() 2018-04-20 12:45:36 +01:00
uniphier-regulator.c regulator: uniphier: Constify uniphier_regulator_ops 2019-02-02 17:05:42 +01:00
userspace-consumer.c
vctrl-regulator.c regulator: vctrl: Fix out of bounds array access for vctrl->vtable 2017-04-14 18:01:03 +01:00
vexpress-regulator.c
virtual.c
wm831x-dcdc.c
wm831x-isink.c
wm831x-ldo.c
wm8350-regulator.c regulator: core: Use ww_mutex for regulators locking 2018-11-19 12:33:17 +00:00
wm8400-regulator.c
wm8994-regulator.c regulator: wm8994: Rely on core to handle GPIO descriptor 2018-12-12 16:47:10 +00:00