linux/drivers/power
Sebastian Reichel 3c0185046c bq2415x_charger: Fix Atomic Sleep Bug
Move sysfs_notify and i2c_transfer calls from bq2415x_notifier_call
to bq2415x_timer_work to avoid sleeping in atomic context.

This fixes the following bug:

[ 7.667449] Workqueue: events power_supply_changed_work
[ 7.673034] [<c0015c28>] (unwind_backtrace+0x0/0xe0) from [<c0011e1c>] (show_stack+0x10/0x14)
[ 7.682098] [<c0011e1c>] (show_stack+0x10/0x14) from [<c052cdd0>] (dump_stack+0x78/0xac)
[ 7.690704] [<c052cdd0>] (dump_stack+0x78/0xac) from [<c052a044>] (__schedule_bug+0x48/0x60)
[ 7.699645] [<c052a044>] (__schedule_bug+0x48/0x60) from [<c053071c>] (__schedule+0x74/0x638)
[ 7.708618] [<c053071c>] (__schedule+0x74/0x638) from [<c05301fc>] (schedule_timeout+0x1dc/0x24c)
[ 7.718017] [<c05301fc>] (schedule_timeout+0x1dc/0x24c) from [<c05316ec>] (wait_for_common+0x138/0x17c)
[ 7.727966] [<c05316ec>] (wait_for_common+0x138/0x17c) from [<c0362a70>] (omap_i2c_xfer+0x340/0x4a0)
[ 7.737640] [<c0362a70>] (omap_i2c_xfer+0x340/0x4a0) from [<c035d928>] (__i2c_transfer+0x40/0x74)
[ 7.747039] [<c035d928>] (__i2c_transfer+0x40/0x74) from [<c035e22c>] (i2c_transfer+0x6c/0x90)
[ 7.756195] [<c035e22c>] (i2c_transfer+0x6c/0x90) from [<c037ad24>] (bq2415x_i2c_write+0x48/0x78)
[ 7.765563] [<c037ad24>] (bq2415x_i2c_write+0x48/0x78) from [<c037ae60>] (bq2415x_set_weak_battery_voltage+0x4c/0x50)
[ 7.776824] [<c037ae60>] (bq2415x_set_weak_battery_voltage+0x4c/0x50) from [<c037bce8>] (bq2415x_set_mode+0xdc/0x14c)
[ 7.788085] [<c037bce8>] (bq2415x_set_mode+0xdc/0x14c) from [<c037bfb8>] (bq2415x_notifier_call+0xa8/0xb4)
[ 7.798309] [<c037bfb8>] (bq2415x_notifier_call+0xa8/0xb4) from [<c005f228>] (notifier_call_chain+0x38/0x68)
[ 7.808715] [<c005f228>] (notifier_call_chain+0x38/0x68) from [<c005f284>] (__atomic_notifier_call_chain+0x2c/0x3c)
[ 7.819732] [<c005f284>] (__atomic_notifier_call_chain+0x2c/0x3c) from [<c005f2a8>] (atomic_notifier_call_chain+0x14/0x18)
[ 7.831420] [<c005f2a8>] (atomic_notifier_call_chain+0x14/0x18) from [<c0378078>] (power_supply_changed_work+0x6c/0xb8)
[ 7.842864] [<c0378078>] (power_supply_changed_work+0x6c/0xb8) from [<c00556c0>] (process_one_work+0x248/0x440)
[ 7.853546] [<c00556c0>] (process_one_work+0x248/0x440) from [<c0055d6c>] (worker_thread+0x208/0x350)
[ 7.863372] [<c0055d6c>] (worker_thread+0x208/0x350) from [<c005b0ac>] (kthread+0xc8/0xdc)
[ 7.872131] [<c005b0ac>] (kthread+0xc8/0xdc) from [<c000e138>] (ret_from_fork+0x14/0x3c)

Fixes: 32260308b4 ("bq2415x_charger: Use power_supply notifier for automode")
Cc: <stable@vger.kernel.org>
Signed-off-by: Sebastian Reichel <sre@kernel.org>
2014-07-18 23:40:22 +02:00
..
avs PM / AVS: SmartReflex: use devm_* API to initialize SmartReflex 2013-06-10 10:50:48 -07:00
reset ARM: SoC driver changes 2014-06-02 16:35:49 -07:00
88pm860x_battery.c 88pm860x_battery: Remove unnecessary platform_set_drvdata() 2013-06-06 17:12:37 -07:00
88pm860x_charger.c treewide: Fix typo in printk 2013-08-20 12:44:03 +02:00
ab8500_bmdata.c ab8500_bmdata: Export abx500_res_to_temp tables for hwmon 2013-04-16 17:38:10 -07:00
ab8500_btemp.c ab8500_bm: Remove unnecessary platform_set_drvdata() 2013-06-06 17:13:09 -07:00
ab8500_charger.c ab8500-charger: Remove redundant break 2013-10-25 15:36:23 -07:00
ab8500_fg.c tree-wide: use reinit_completion instead of INIT_COMPLETION 2013-11-15 09:32:21 +09:00
abx500_chargalg.c ab8500_bm: Remove unnecessary platform_set_drvdata() 2013-06-06 17:13:09 -07:00
apm_power.c
bq27x00_battery.c bq27x00_battery: Remove unnecessary platform_set_drvdata() 2013-06-06 17:13:31 -07:00
bq2415x_charger.c bq2415x_charger: Fix Atomic Sleep Bug 2014-07-18 23:40:22 +02:00
bq24190_charger.c bq24190_charger: Workaround SS definition problem on i386 builds 2013-08-28 17:52:50 -07:00
bq24735-charger.c power_supply: Add support for bq24735 charger 2013-10-25 15:56:51 -07:00
charger-manager.c charger-manager: of_cm_parse_desc() should be static 2013-12-23 18:21:35 -08:00
collie_battery.c power supply: collie_battery: Convert to use dev_pm_ops 2013-08-09 13:41:06 -07:00
da9030_battery.c da9030_battery: Use devm_kzalloc() 2013-03-31 23:25:51 -07:00
da9052-battery.c da9052-battery: Use devm_kzalloc() 2013-03-31 23:25:49 -07:00
ds2760_battery.c ds2760_battery: Use devm_kzalloc() 2013-03-31 23:25:47 -07:00
ds2780_battery.c ds2780_battery: Use devm_kzalloc() 2013-03-31 23:25:45 -07:00
ds2781_battery.c power: remove use of __devexit 2012-11-28 11:43:22 -08:00
ds2782_battery.c power: ds2782_battery: Typo in comment 2014-01-25 15:24:15 +04:00
generic-adc-battery.c generic-adc-battery: Fix checking if none of the channels are supported 2013-06-06 17:33:40 -07:00
goldfish_battery.c goldfish_battery: Use resource_size() 2013-03-31 23:39:40 -07:00
gpio-charger.c gpio-charger: Support wakeup events 2013-12-23 18:54:03 -08:00
intel_mid_battery.c power: Use platform_{get,set}_drvdata() 2013-06-06 17:30:46 -07:00
isp1704_charger.c isp1704_charger: remove useless check in isp1704_charger_probe() 2014-01-25 15:24:15 +04:00
jz4740-battery.c tree-wide: use reinit_completion instead of INIT_COMPLETION 2013-11-15 09:32:21 +09:00
Kconfig Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2014-01-25 11:17:34 -08:00
lp8727_charger.c lp8727_charger: Support the device tree feature 2013-06-06 17:19:54 -07:00
lp8788-charger.c lp8788-charger: Use PAGE_SIZE for the sysfs read operation 2013-03-31 23:33:19 -07:00
Makefile power_supply: Add charger support for Maxim 14577 2013-12-23 18:52:19 -08:00
max8903_charger.c max8903_charger: Use devm_kzalloc() 2013-03-31 23:25:38 -07:00
max8925_power.c max8925_power: Fix missing of_node_put 2013-08-27 18:11:54 -07:00
max8997_charger.c max8997_charger: Use devm_kzalloc() 2013-03-31 23:25:36 -07:00
max8998_charger.c max8998_charger: Use devm_kzalloc() 2013-03-31 23:25:34 -07:00
max14577_charger.c power_supply: Add charger support for Maxim 14577 2013-12-23 18:52:19 -08:00
max17040_battery.c power: max17040: Fix NULL pointer dereference when there is no platform_data 2014-02-01 20:11:32 +04:00
max17042_battery.c max17042_battery: Add IRQF_ONESHOT flag to use default irq handler 2013-12-23 18:59:41 -08:00
olpc_battery.c Drivers: power: remove __dev* attributes. 2013-01-03 15:57:14 -08:00
pcf50633-charger.c power_supply: Replace strict_strtoul() with kstrtoul() 2013-06-06 17:35:38 -07:00
pda_power.c usb: power: pda_power: check against CONFIG_USB_PHY 2013-03-18 11:18:05 +02:00
pm2301_charger.c pm2301-charger: Remove unneeded NULL checks 2013-11-12 22:36:34 -08:00
pm2301_charger.h pm2301-charger: Removed unused code from PM2301 driver 2013-03-07 12:35:53 +08:00
pmu_battery.c
power_supply_core.c power_supply: allow power supply devices registered w/o wakeup source 2014-05-30 13:45:25 +02:00
power_supply_leds.c
power_supply_sysfs.c power_supply: Replace strict_strtol() with kstrtol() 2013-08-09 14:49:49 -07:00
power_supply.h
rx51_battery.c rx51_battery: Fix channel number when reading adc value 2013-08-30 17:49:15 -07:00
s3c_adc_battery.c s3c-adc-battery: Fix possible NULL pointer dereference 2013-03-18 19:43:03 -07:00
sbs-battery.c sbs-battery: Add dt to power_supply struct 2013-06-28 18:20:56 -07:00
smb347-charger.c power: remove use of __devexit_p 2012-11-28 11:43:22 -08:00
test_power.c test_power: Fix a bug in setting module parameter values 2013-03-18 19:27:31 -07:00
tosa_battery.c power_supply: tosa_battery: Get rid of irq_to_gpio usage 2013-08-09 13:41:52 -07:00
tps65090-charger.c mfd: tps65090: Stop caching most registers 2014-04-23 12:32:19 +01:00
twl4030_charger.c twl4030_charger: Add devicetree support 2013-11-12 22:35:45 -08:00
twl4030_madc_battery.c power: Add twl4030_madc battery driver. 2013-08-30 17:34:52 -07:00
wm97xx_battery.c power: remove use of __devexit 2012-11-28 11:43:22 -08:00
wm831x_backup.c wm831x_backup: Fix wrong kfree call for devdata->backup.name 2013-05-10 11:56:22 -07:00
wm831x_power.c power: remove use of __devexit 2012-11-28 11:43:22 -08:00
wm8350_power.c power: remove use of __devexit 2012-11-28 11:43:22 -08:00
z2_battery.c power: remove use of __devexit 2012-11-28 11:43:22 -08:00