Commit 8a1def45 authored by Helge Deller's avatar Helge Deller Committed by Kyle McMartin

parisc: blink all or loadavg LEDs on oops

- depending on machine type, blink all leds or just the loadavg
  leds twice a second on oops.
- cancel_rearming_delayed_workqueue() is obsolete,
  use cancel_delayed_work_sync() instead
Signed-off-by: default avatarHelge Deller <deller@gmx.de>
Signed-off-by: default avatarKyle McMartin <kyle@mcmartin.ca>
parent d75f054a
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* (c) Copyright 2000 Red Hat Software * (c) Copyright 2000 Red Hat Software
* (c) Copyright 2000 Helge Deller <hdeller@redhat.com> * (c) Copyright 2000 Helge Deller <hdeller@redhat.com>
* (c) Copyright 2001-2005 Helge Deller <deller@gmx.de> * (c) Copyright 2001-2009 Helge Deller <deller@gmx.de>
* (c) Copyright 2001 Randolph Chung <tausq@debian.org> * (c) Copyright 2001 Randolph Chung <tausq@debian.org>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
...@@ -463,9 +463,20 @@ static void led_work_func (struct work_struct *unused) ...@@ -463,9 +463,20 @@ static void led_work_func (struct work_struct *unused)
if (likely(led_lanrxtx)) currentleds |= led_get_net_activity(); if (likely(led_lanrxtx)) currentleds |= led_get_net_activity();
if (likely(led_diskio)) currentleds |= led_get_diskio_activity(); if (likely(led_diskio)) currentleds |= led_get_diskio_activity();
/* blink all LEDs twice a second if we got an Oops (HPMC) */ /* blink LEDs if we got an Oops (HPMC) */
if (unlikely(oops_in_progress)) if (unlikely(oops_in_progress)) {
currentleds = (count_HZ<=(HZ/2)) ? 0 : 0xff; if (boot_cpu_data.cpu_type >= pcxl2) {
/* newer machines don't have loadavg. LEDs, so we
* let all LEDs blink twice per second instead */
currentleds = (count_HZ <= (HZ/2)) ? 0 : 0xff;
} else {
/* old machines: blink loadavg. LEDs twice per second */
if (count_HZ <= (HZ/2))
currentleds &= ~(LED4|LED5|LED6|LED7);
else
currentleds |= (LED4|LED5|LED6|LED7);
}
}
if (currentleds != lastleds) if (currentleds != lastleds)
{ {
...@@ -511,7 +522,7 @@ static int led_halt(struct notifier_block *nb, unsigned long event, void *buf) ...@@ -511,7 +522,7 @@ static int led_halt(struct notifier_block *nb, unsigned long event, void *buf)
/* Cancel the work item and delete the queue */ /* Cancel the work item and delete the queue */
if (led_wq) { if (led_wq) {
cancel_rearming_delayed_workqueue(led_wq, &led_task); cancel_delayed_work_sync(&led_task);
destroy_workqueue(led_wq); destroy_workqueue(led_wq);
led_wq = NULL; led_wq = NULL;
} }
...@@ -630,7 +641,7 @@ int lcd_print( const char *str ) ...@@ -630,7 +641,7 @@ int lcd_print( const char *str )
/* temporarily disable the led work task */ /* temporarily disable the led work task */
if (led_wq) if (led_wq)
cancel_rearming_delayed_workqueue(led_wq, &led_task); cancel_delayed_work_sync(&led_task);
/* copy display string to buffer for procfs */ /* copy display string to buffer for procfs */
strlcpy(lcd_text, str, sizeof(lcd_text)); strlcpy(lcd_text, str, sizeof(lcd_text));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment