Loading drivers/char/snsc.h +4 −1 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ * License. See the file "COPYING" in the main directory of this archive * for more details. * * Copyright (C) 2004 Silicon Graphics, Inc. All rights reserved. * Copyright (C) 2004-2006 Silicon Graphics, Inc. All rights reserved. */ /* Loading Loading @@ -70,6 +70,9 @@ struct sysctl_data_s { #define EV_CLASS_TEST_WARNING 0x6000ul #define EV_CLASS_PWRD_NOTIFY 0x8000ul /* ENV class codes */ #define ENV_PWRDN_PEND 0x4101ul #define EV_SEVERITY_POWER_STABLE 0x0000ul #define EV_SEVERITY_POWER_LOW_WARNING 0x0100ul #define EV_SEVERITY_POWER_HIGH_WARNING 0x0200ul Loading drivers/char/snsc_event.c +24 −8 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ * License. See the file "COPYING" in the main directory of this archive * for more details. * * Copyright (C) 2004 Silicon Graphics, Inc. All rights reserved. * Copyright (C) 2004-2006 Silicon Graphics, Inc. All rights reserved. */ /* Loading Loading @@ -187,7 +187,8 @@ scdrv_event_severity(int code) static void scdrv_dispatch_event(char *event, int len) { int code, esp_code, src; static int snsc_shutting_down = 0; int code, esp_code, src, class; char desc[CHUNKSIZE]; char *severity; Loading @@ -199,9 +200,25 @@ scdrv_dispatch_event(char *event, int len) /* how urgent is the message? */ severity = scdrv_event_severity(code); if ((code & EV_CLASS_MASK) == EV_CLASS_PWRD_NOTIFY) { class = (code & EV_CLASS_MASK); if (class == EV_CLASS_PWRD_NOTIFY || code == ENV_PWRDN_PEND) { struct task_struct *p; if (snsc_shutting_down) return; snsc_shutting_down = 1; /* give a message for each type of event */ if (class == EV_CLASS_PWRD_NOTIFY) printk(KERN_NOTICE "Power off indication received." " Sending SIGPWR to init...\n"); else if (code == ENV_PWRDN_PEND) printk(KERN_CRIT "WARNING: Shutting down the system" " due to a critical environmental condition." " Sending SIGPWR to init...\n"); /* give a SIGPWR signal to init proc */ /* first find init's task */ Loading @@ -210,12 +227,11 @@ scdrv_dispatch_event(char *event, int len) if (p->pid == 1) break; } if (p) { /* we found init's task */ printk(KERN_EMERG "Power off indication received. Initiating power fail sequence...\n"); if (p) { force_sig(SIGPWR, p); } else { /* failed to find init's task - just give message(s) */ printk(KERN_WARNING "Failed to find init proc to handle power off!\n"); printk("%s|$(0x%x)%s\n", severity, esp_code, desc); } else { printk(KERN_ERR "Failed to signal init!\n"); snsc_shutting_down = 0; /* so can try again (?) */ } read_unlock(&tasklist_lock); } else { Loading Loading
drivers/char/snsc.h +4 −1 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ * License. See the file "COPYING" in the main directory of this archive * for more details. * * Copyright (C) 2004 Silicon Graphics, Inc. All rights reserved. * Copyright (C) 2004-2006 Silicon Graphics, Inc. All rights reserved. */ /* Loading Loading @@ -70,6 +70,9 @@ struct sysctl_data_s { #define EV_CLASS_TEST_WARNING 0x6000ul #define EV_CLASS_PWRD_NOTIFY 0x8000ul /* ENV class codes */ #define ENV_PWRDN_PEND 0x4101ul #define EV_SEVERITY_POWER_STABLE 0x0000ul #define EV_SEVERITY_POWER_LOW_WARNING 0x0100ul #define EV_SEVERITY_POWER_HIGH_WARNING 0x0200ul Loading
drivers/char/snsc_event.c +24 −8 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ * License. See the file "COPYING" in the main directory of this archive * for more details. * * Copyright (C) 2004 Silicon Graphics, Inc. All rights reserved. * Copyright (C) 2004-2006 Silicon Graphics, Inc. All rights reserved. */ /* Loading Loading @@ -187,7 +187,8 @@ scdrv_event_severity(int code) static void scdrv_dispatch_event(char *event, int len) { int code, esp_code, src; static int snsc_shutting_down = 0; int code, esp_code, src, class; char desc[CHUNKSIZE]; char *severity; Loading @@ -199,9 +200,25 @@ scdrv_dispatch_event(char *event, int len) /* how urgent is the message? */ severity = scdrv_event_severity(code); if ((code & EV_CLASS_MASK) == EV_CLASS_PWRD_NOTIFY) { class = (code & EV_CLASS_MASK); if (class == EV_CLASS_PWRD_NOTIFY || code == ENV_PWRDN_PEND) { struct task_struct *p; if (snsc_shutting_down) return; snsc_shutting_down = 1; /* give a message for each type of event */ if (class == EV_CLASS_PWRD_NOTIFY) printk(KERN_NOTICE "Power off indication received." " Sending SIGPWR to init...\n"); else if (code == ENV_PWRDN_PEND) printk(KERN_CRIT "WARNING: Shutting down the system" " due to a critical environmental condition." " Sending SIGPWR to init...\n"); /* give a SIGPWR signal to init proc */ /* first find init's task */ Loading @@ -210,12 +227,11 @@ scdrv_dispatch_event(char *event, int len) if (p->pid == 1) break; } if (p) { /* we found init's task */ printk(KERN_EMERG "Power off indication received. Initiating power fail sequence...\n"); if (p) { force_sig(SIGPWR, p); } else { /* failed to find init's task - just give message(s) */ printk(KERN_WARNING "Failed to find init proc to handle power off!\n"); printk("%s|$(0x%x)%s\n", severity, esp_code, desc); } else { printk(KERN_ERR "Failed to signal init!\n"); snsc_shutting_down = 0; /* so can try again (?) */ } read_unlock(&tasklist_lock); } else { Loading