diff options
Diffstat (limited to 'drivers/parisc')
-rw-r--r-- | drivers/parisc/led.c | 14 | ||||
-rw-r--r-- | drivers/parisc/power.c | 6 |
2 files changed, 16 insertions, 4 deletions
diff --git a/drivers/parisc/led.c b/drivers/parisc/led.c index 3627a2d7f79f..298f2ddb2c17 100644 --- a/drivers/parisc/led.c +++ b/drivers/parisc/led.c | |||
@@ -499,11 +499,16 @@ static int led_halt(struct notifier_block *, unsigned long, void *); | |||
499 | static struct notifier_block led_notifier = { | 499 | static struct notifier_block led_notifier = { |
500 | .notifier_call = led_halt, | 500 | .notifier_call = led_halt, |
501 | }; | 501 | }; |
502 | static int notifier_disabled = 0; | ||
502 | 503 | ||
503 | static int led_halt(struct notifier_block *nb, unsigned long event, void *buf) | 504 | static int led_halt(struct notifier_block *nb, unsigned long event, void *buf) |
504 | { | 505 | { |
505 | char *txt; | 506 | char *txt; |
506 | 507 | ||
508 | if (notifier_disabled) | ||
509 | return NOTIFY_OK; | ||
510 | |||
511 | notifier_disabled = 1; | ||
507 | switch (event) { | 512 | switch (event) { |
508 | case SYS_RESTART: txt = "SYSTEM RESTART"; | 513 | case SYS_RESTART: txt = "SYSTEM RESTART"; |
509 | break; | 514 | break; |
@@ -527,7 +532,6 @@ static int led_halt(struct notifier_block *nb, unsigned long event, void *buf) | |||
527 | if (led_func_ptr) | 532 | if (led_func_ptr) |
528 | led_func_ptr(0xff); /* turn all LEDs ON */ | 533 | led_func_ptr(0xff); /* turn all LEDs ON */ |
529 | 534 | ||
530 | unregister_reboot_notifier(&led_notifier); | ||
531 | return NOTIFY_OK; | 535 | return NOTIFY_OK; |
532 | } | 536 | } |
533 | 537 | ||
@@ -758,6 +762,12 @@ not_found: | |||
758 | return 1; | 762 | return 1; |
759 | } | 763 | } |
760 | 764 | ||
765 | static void __exit led_exit(void) | ||
766 | { | ||
767 | unregister_reboot_notifier(&led_notifier); | ||
768 | return; | ||
769 | } | ||
770 | |||
761 | #ifdef CONFIG_PROC_FS | 771 | #ifdef CONFIG_PROC_FS |
762 | module_init(led_create_procfs) | 772 | module_init(led_create_procfs) |
763 | #endif | 773 | #endif |
diff --git a/drivers/parisc/power.c b/drivers/parisc/power.c index 54b2b7f20b96..0bcab83b4080 100644 --- a/drivers/parisc/power.c +++ b/drivers/parisc/power.c | |||
@@ -251,7 +251,8 @@ static int __init power_init(void) | |||
251 | } | 251 | } |
252 | 252 | ||
253 | /* Register a call for panic conditions. */ | 253 | /* Register a call for panic conditions. */ |
254 | notifier_chain_register(&panic_notifier_list, &parisc_panic_block); | 254 | atomic_notifier_chain_register(&panic_notifier_list, |
255 | &parisc_panic_block); | ||
255 | 256 | ||
256 | tasklet_enable(&power_tasklet); | 257 | tasklet_enable(&power_tasklet); |
257 | 258 | ||
@@ -264,7 +265,8 @@ static void __exit power_exit(void) | |||
264 | return; | 265 | return; |
265 | 266 | ||
266 | tasklet_disable(&power_tasklet); | 267 | tasklet_disable(&power_tasklet); |
267 | notifier_chain_unregister(&panic_notifier_list, &parisc_panic_block); | 268 | atomic_notifier_chain_unregister(&panic_notifier_list, |
269 | &parisc_panic_block); | ||
268 | power_tasklet.func = NULL; | 270 | power_tasklet.func = NULL; |
269 | pdc_soft_power_button(0); | 271 | pdc_soft_power_button(0); |
270 | } | 272 | } |