[PATCH v2 09/11] watchdog/hpwdt: condition early return of NMI handler on iLO5

From: Jerry Hoemann
Date: Mon Feb 12 2018 - 00:22:57 EST


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@xxxxxxx>
---
drivers/watchdog/hpwdt.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/watchdog/hpwdt.c b/drivers/watchdog/hpwdt.c
index e7355f72d883..e9e54fe20804 100644
--- a/drivers/watchdog/hpwdt.c
+++ b/drivers/watchdog/hpwdt.c
@@ -38,6 +38,7 @@ static bool pretimeout = 1;
#else
static bool pretimeout;
#endif
+static bool iLO5;

static void __iomem *pci_mem_addr; /* the PCI-memory address */
static unsigned long __iomem *hpwdt_nmistat;
@@ -140,14 +141,14 @@ static int hpwdt_pretimeout(unsigned int ulReason, struct pt_regs *regs)
"3. OA Forward Progress Log\n"
"4. iLO Event Log";

- if ((ulReason == NMI_UNKNOWN) && !mynmi)
- return NMI_DONE;
-
pr_debug("nmi: ulReason=%d, mynmi=0x%0x\n", ulReason, mynmi);

if (!pretimeout)
return NMI_DONE;

+ if (iLO5 && (ulReason == NMI_UNKNOWN) && !mynmi)
+ return NMI_DONE;
+
if (allow_kdump)
hpwdt_stop(&hpwdt_dev);

@@ -280,6 +281,9 @@ static int hpwdt_probe(struct pci_dev *dev, const struct pci_device_id *ent)
", timer margin: %d seconds (nowayout=%d).\n",
HPWDT_VERSION, hpwdt_dev.timeout, nowayout);

+ if (dev->subsystem_vendor == PCI_VENDOR_ID_HP_3PAR)
+ iLO5 = 1;
+
return 0;

error_wd_register:
--
2.13.6