diff options
| -rw-r--r-- | drivers/watchdog/softdog.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/watchdog/softdog.c b/drivers/watchdog/softdog.c index 100b114e3c3c..bf16ffb4d21e 100644 --- a/drivers/watchdog/softdog.c +++ b/drivers/watchdog/softdog.c | |||
| @@ -48,6 +48,7 @@ | |||
| 48 | #include <linux/init.h> | 48 | #include <linux/init.h> |
| 49 | #include <linux/jiffies.h> | 49 | #include <linux/jiffies.h> |
| 50 | #include <linux/uaccess.h> | 50 | #include <linux/uaccess.h> |
| 51 | #include <linux/kernel.h> | ||
| 51 | 52 | ||
| 52 | #define PFX "SoftDog: " | 53 | #define PFX "SoftDog: " |
| 53 | 54 | ||
| @@ -75,6 +76,11 @@ MODULE_PARM_DESC(soft_noboot, | |||
| 75 | "Softdog action, set to 1 to ignore reboots, 0 to reboot " | 76 | "Softdog action, set to 1 to ignore reboots, 0 to reboot " |
| 76 | "(default depends on ONLY_TESTING)"); | 77 | "(default depends on ONLY_TESTING)"); |
| 77 | 78 | ||
| 79 | static int soft_panic; | ||
| 80 | module_param(soft_panic, int, 0); | ||
| 81 | MODULE_PARM_DESC(soft_panic, | ||
| 82 | "Softdog action, set to 1 to panic, 0 to reboot (default=0)"); | ||
| 83 | |||
| 78 | /* | 84 | /* |
| 79 | * Our timer | 85 | * Our timer |
| 80 | */ | 86 | */ |
| @@ -98,7 +104,10 @@ static void watchdog_fire(unsigned long data) | |||
| 98 | 104 | ||
| 99 | if (soft_noboot) | 105 | if (soft_noboot) |
| 100 | printk(KERN_CRIT PFX "Triggered - Reboot ignored.\n"); | 106 | printk(KERN_CRIT PFX "Triggered - Reboot ignored.\n"); |
| 101 | else { | 107 | else if (soft_panic) { |
| 108 | printk(KERN_CRIT PFX "Initiating panic.\n"); | ||
| 109 | panic("Software Watchdog Timer expired."); | ||
| 110 | } else { | ||
| 102 | printk(KERN_CRIT PFX "Initiating system reboot.\n"); | 111 | printk(KERN_CRIT PFX "Initiating system reboot.\n"); |
| 103 | emergency_restart(); | 112 | emergency_restart(); |
| 104 | printk(KERN_CRIT PFX "Reboot didn't ?????\n"); | 113 | printk(KERN_CRIT PFX "Reboot didn't ?????\n"); |
| @@ -267,7 +276,8 @@ static struct notifier_block softdog_notifier = { | |||
| 267 | }; | 276 | }; |
| 268 | 277 | ||
| 269 | static char banner[] __initdata = KERN_INFO "Software Watchdog Timer: 0.07 " | 278 | static char banner[] __initdata = KERN_INFO "Software Watchdog Timer: 0.07 " |
| 270 | "initialized. soft_noboot=%d soft_margin=%d sec (nowayout= %d)\n"; | 279 | "initialized. soft_noboot=%d soft_margin=%d sec soft_panic=%d " |
| 280 | "(nowayout= %d)\n"; | ||
| 271 | 281 | ||
| 272 | static int __init watchdog_init(void) | 282 | static int __init watchdog_init(void) |
| 273 | { | 283 | { |
| @@ -298,7 +308,7 @@ static int __init watchdog_init(void) | |||
| 298 | return ret; | 308 | return ret; |
| 299 | } | 309 | } |
| 300 | 310 | ||
| 301 | printk(banner, soft_noboot, soft_margin, nowayout); | 311 | printk(banner, soft_noboot, soft_margin, soft_panic, nowayout); |
| 302 | 312 | ||
| 303 | return 0; | 313 | return 0; |
| 304 | } | 314 | } |
