aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJerry Hoemann <jerry.hoemann@hpe.com>2018-02-25 22:22:23 -0500
committerWim Van Sebroeck <wim@linux-watchdog.org>2018-03-03 11:04:18 -0500
commita6c24733d29315fd2d8dd7140f83e834658c62d5 (patch)
tree15a2c30a6da2a89370e92eabcb957f3b744457c3
parentd0a4027f2789d7682afce2cea066d32c85e3d8c4 (diff)
watchdog: hpwdt: condition early return of NMI handler on iLO5
Modify prior change to not claim an NMI unless originated from iLO to apply only to iLO5 and later going forward. This restores hpwdt traditional behavior of calling panic if the NMI is NMI_IO_CHECK, NMI_SERR, or NMI_UNKNOWN for legacy hardware. Signed-off-by: Jerry Hoemann <jerry.hoemann@hpe.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
-rw-r--r--drivers/watchdog/hpwdt.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/watchdog/hpwdt.c b/drivers/watchdog/hpwdt.c
index 0e35bb735d8e..171d5033d7b5 100644
--- a/drivers/watchdog/hpwdt.c
+++ b/drivers/watchdog/hpwdt.c
@@ -32,6 +32,7 @@
32#define HPWDT_MAX_TIMER TICKS_TO_SECS(65535) 32#define HPWDT_MAX_TIMER TICKS_TO_SECS(65535)
33#define DEFAULT_MARGIN 30 33#define DEFAULT_MARGIN 30
34 34
35static bool ilo5;
35static unsigned int soft_margin = DEFAULT_MARGIN; /* in seconds */ 36static unsigned int soft_margin = DEFAULT_MARGIN; /* in seconds */
36static unsigned int reload; /* the computed soft_margin */ 37static unsigned int reload; /* the computed soft_margin */
37static bool nowayout = WATCHDOG_NOWAYOUT; 38static bool nowayout = WATCHDOG_NOWAYOUT;
@@ -120,7 +121,7 @@ static int hpwdt_pretimeout(unsigned int ulReason, struct pt_regs *regs)
120 "3. OA Forward Progress Log\n" 121 "3. OA Forward Progress Log\n"
121 "4. iLO Event Log"; 122 "4. iLO Event Log";
122 123
123 if ((ulReason == NMI_UNKNOWN) && mynmi) 124 if (ilo5 && ulReason == NMI_UNKNOWN && mynmi)
124 return NMI_DONE; 125 return NMI_DONE;
125 126
126 if (allow_kdump) 127 if (allow_kdump)
@@ -277,6 +278,9 @@ static int hpwdt_init_one(struct pci_dev *dev,
277 ", timer margin: %d seconds (nowayout=%d).\n", 278 ", timer margin: %d seconds (nowayout=%d).\n",
278 HPWDT_VERSION, hpwdt_dev.timeout, nowayout); 279 HPWDT_VERSION, hpwdt_dev.timeout, nowayout);
279 280
281 if (dev->subsystem_vendor == PCI_VENDOR_ID_HP_3PAR)
282 ilo5 = true;
283
280 return 0; 284 return 0;
281 285
282error_wd_register: 286error_wd_register: