linux/drivers/leds
Alexander Holler fb31fbeb64 leds: heartbeat: fix bug on panic
With commit 49dca5aebf I introduced
a bug (visible if CONFIG_PROVE_RCU is enabled) which occures when a panic
has happened:

[ 1526.520230] ===============================
[ 1526.520230] [ INFO: suspicious RCU usage. ]
[ 1526.520230] 3.5.0-rc1+ #12 Not tainted
[ 1526.520230] -------------------------------
[ 1526.520230] /c/kernel-tests/mm/include/linux/rcupdate.h:436 Illegal context switch in RCU read-side critical section!
[ 1526.520230]
[ 1526.520230] other info that might help us debug this:
[ 1526.520230]
[ 1526.520230]
[ 1526.520230] rcu_scheduler_active = 1, debug_locks = 0
[ 1526.520230] 3 locks held by net.agent/3279:
[ 1526.520230]  #0:  (&mm->mmap_sem){++++++}, at: [<ffffffff82f85962>] do_page_fault+0x193/0x390
[ 1526.520230]  #1:  (panic_lock){+.+...}, at: [<ffffffff82ed2830>] panic+0x37/0x1d3
[ 1526.520230]  #2:  (rcu_read_lock){.+.+..}, at: [<ffffffff810b9b28>] rcu_lock_acquire+0x0/0x29
[ 1526.520230]
[ 1526.520230] stack backtrace:
[ 1526.520230] Pid: 3279, comm: net.agent Not tainted 3.5.0-rc1+ #12
[ 1526.520230] Call Trace:
[ 1526.520230]  [<ffffffff810e1570>] lockdep_rcu_suspicious+0x109/0x112
[ 1526.520230]  [<ffffffff810bfe3a>] rcu_preempt_sleep_check+0x45/0x47
[ 1526.520230]  [<ffffffff810bfe5a>] __might_sleep+0x1e/0x19a
[ 1526.520230]  [<ffffffff82f8010e>] down_write+0x26/0x81
[ 1526.520230]  [<ffffffff8276a966>] led_trigger_unregister+0x1f/0x9c
[ 1526.520230]  [<ffffffff8276def5>] heartbeat_reboot_notifier+0x15/0x19
[ 1526.520230]  [<ffffffff82f85bf5>] notifier_call_chain+0x96/0xcd
[ 1526.520230]  [<ffffffff82f85cba>] __atomic_notifier_call_chain+0x8e/0xff
[ 1526.520230]  [<ffffffff81094b7c>] ? kmsg_dump+0x37/0x1eb
[ 1526.520230]  [<ffffffff82f85d3f>] atomic_notifier_call_chain+0x14/0x16
[ 1526.520230]  [<ffffffff82ed28e1>] panic+0xe8/0x1d3
[ 1526.520230]  [<ffffffff811473e2>] out_of_memory+0x15d/0x1d3

So in case of a panic, now just turn of the LED. Other approaches like
scheduling a work to unregister the trigger aren't working because there
isn't much which still runs after a panic occured (except timers).

Signed-off-by: Alexander Holler <holler@ahsoftware.de>
Signed-off-by: Bryan Wu <bryan.wu@canonical.com>
2012-07-04 15:55:19 +08:00
..
Kconfig leds: Make LEDS_ASIC3 and LEDS_RENESAS_TPU depend on LEDS_CLASS=y 2012-06-12 10:56:25 +08:00
Makefile leds: add LM3533 LED driver 2012-05-29 16:22:32 -07:00
dell-led.c drivers/leds: Add module.h to files using it implicitly 2011-10-31 19:31:49 -04:00
led-class.c leds: fixed a coding style issue. 2012-06-12 10:56:24 +08:00
led-core.c leds: don't disable blinking when writing the same value to delay_on or delay_off 2012-06-12 10:56:24 +08:00
led-triggers.c driver-core: remove sysdev.h usage. 2011-12-21 16:26:03 -08:00
leds-88pm860x.c led: Modified power control of pm860x led 2012-03-06 18:46:53 +01:00
leds-adp5520.c leds: convert led platform drivers to module_platform_driver 2012-01-10 16:30:48 -08:00
leds-asic3.c leds: convert led platform drivers to module_platform_driver 2012-01-10 16:30:48 -08:00
leds-atmel-pwm.c leds-atmel-pwm.c: Make pwmled_probe() __devinit 2012-04-17 16:29:31 +02:00
leds-bd2802.c drivers/leds/leds-bd2802.c: use gpio_request_one() 2012-01-10 16:30:49 -08:00
leds-clevo-mail.c module_param: make bool parameters really bool (drivers & misc) 2012-01-13 09:32:20 +10:30
leds-cobalt-qube.c leds: convert led platform drivers to module_platform_driver 2012-01-10 16:30:48 -08:00
leds-cobalt-raq.c drivers/leds: Add export.h for THIS_MODULE to leds-cobalt-raq.c 2011-10-31 19:31:50 -04:00
leds-da903x.c leds: convert led platform drivers to module_platform_driver 2012-01-10 16:30:48 -08:00
leds-da9052.c leds: driver for DA9052/53 PMIC v2 2012-05-29 16:22:31 -07:00
leds-dac124s085.c leds: convert leds-dac124s085 to module_spi_driver 2012-01-10 16:30:49 -08:00
leds-fsg.c leds: convert led platform drivers to module_platform_driver 2012-01-10 16:30:48 -08:00
leds-gpio-register.c leds: provide helper to register "leds-gpio" devices 2011-05-25 08:39:51 -07:00
leds-gpio.c drivers/leds/leds-gpio.c: use linux/gpio.h rather than asm/gpio.h 2012-03-23 16:58:35 -07:00
leds-hp6xx.c leds: convert led platform drivers to module_platform_driver 2012-01-10 16:30:48 -08:00
leds-lm3530.c drivers/leds/leds-lm3530.c: simplify als configuration on initialization 2012-05-29 16:22:32 -07:00
leds-lm3533.c leds: add LM3533 LED driver 2012-05-29 16:22:32 -07:00
leds-locomo.c drivers/leds: Add module.h to files using it implicitly 2011-10-31 19:31:49 -04:00
leds-lp3944.c leds: convert led i2c drivers to module_i2c_driver 2012-01-10 16:30:48 -08:00
leds-lp5521.c drivers/leds/leds-lp5521.c: fix lp5521_read() error handling 2012-05-29 16:22:31 -07:00
leds-lp5523.c drivers/leds/leds-lp5523.c: constify some data 2012-03-23 16:58:35 -07:00
leds-lt3593.c leds: convert led platform drivers to module_platform_driver 2012-01-10 16:30:48 -08:00
leds-max8997.c leds: Add suuport for MAX8997-LED driver 2012-01-09 00:37:41 +01:00
leds-mc13783.c leds: Use kcalloc instead of kzalloc to allocate array 2012-05-29 16:22:31 -07:00
leds-net48xx.c drivers/leds: Add module.h to files using it implicitly 2011-10-31 19:31:49 -04:00
leds-netxbig.c drivers/leds: correct __devexit annotations 2012-05-10 15:06:44 -07:00
leds-ns2.c drivers/leds: correct __devexit annotations 2012-05-10 15:06:44 -07:00
leds-ot200.c leds: add led driver for Bachmann's ot200 2012-01-23 08:38:47 -08:00
leds-pca955x.c drivers/leds/leds-pca955x.c: fix race condition while setting brightness on several LEDs 2012-05-29 16:22:32 -07:00
leds-pca9532.c leds: convert led i2c drivers to module_i2c_driver 2012-01-10 16:30:48 -08:00
leds-pca9633.c drivers/leds/leds-pca9633.c: remove unused 'adapter' variable 2012-03-23 16:58:35 -07:00
leds-pwm.c leds: convert led platform drivers to module_platform_driver 2012-01-10 16:30:48 -08:00
leds-rb532.c leds: convert led platform drivers to module_platform_driver 2012-01-10 16:30:48 -08:00
leds-regulator.c leds: convert led platform drivers to module_platform_driver 2012-01-10 16:30:48 -08:00
leds-renesas-tpu.c leds: convert led platform drivers to module_platform_driver 2012-01-10 16:30:48 -08:00
leds-s3c24xx.c leds: convert led platform drivers to module_platform_driver 2012-01-10 16:30:48 -08:00
leds-ss4200.c module_param: make bool parameters really bool (drivers & misc) 2012-01-13 09:32:20 +10:30
leds-sunfire.c drivers/leds/leds-sunfire.c: fix sunfire_led_generic_probe() error handling 2011-07-25 20:57:15 -07:00
leds-tca6507.c drivers/leds/leds-tca6507.c: remove obsolete cleanup for clientdata 2012-03-23 16:58:34 -07:00
leds-wm831x-status.c leds: convert wm831x status driver to devm_kzalloc() 2012-01-10 16:30:49 -08:00
leds-wm8350.c leds: convert wm8350 driver to devm_kzalloc() 2012-01-10 16:30:49 -08:00
leds-wrap.c drivers/leds: Add module.h to files using it implicitly 2011-10-31 19:31:49 -04:00
leds.h leds: support automatic start of blinking with ledtrig-timer 2011-05-25 08:39:49 -07:00
ledtrig-backlight.c leds: change existing triggers to use activated flag 2012-05-29 16:22:31 -07:00
ledtrig-default-on.c
ledtrig-gpio.c leds: change existing triggers to use activated flag 2012-05-29 16:22:31 -07:00
ledtrig-heartbeat.c leds: heartbeat: fix bug on panic 2012-07-04 15:55:19 +08:00
ledtrig-ide-disk.c
ledtrig-timer.c leds: change ledtrig-timer to use activated flag 2012-05-29 16:22:31 -07:00
ledtrig-transient.c leds: add new transient trigger for one shot timer activation 2012-05-29 16:22:32 -07:00