watchdog: hpwdt: Check source of NMI
commit 838534e50e2e5c1e644e30ab6cb28da88eb31368 upstream. Do not claim the NMI (i.e. return NMI_DONE) if the source of the NMI isn't the iLO watchdog or debug. Signed-off-by: Jerry Hoemann <jerry.hoemann@hpe.com> Reviewed-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Wim Van Sebroeck <wim@iguana.be> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
3028457f4f
commit
cdff5b391b
1 changed files with 10 additions and 0 deletions
|
@ -51,6 +51,7 @@ static char expect_release;
|
|||
static unsigned long hpwdt_is_open;
|
||||
|
||||
static void __iomem *pci_mem_addr; /* the PCI-memory address */
|
||||
static unsigned long __iomem *hpwdt_nmistat;
|
||||
static unsigned long __iomem *hpwdt_timer_reg;
|
||||
static unsigned long __iomem *hpwdt_timer_con;
|
||||
|
||||
|
@ -473,6 +474,11 @@ static int hpwdt_time_left(void)
|
|||
return TICKS_TO_SECS(ioread16(hpwdt_timer_reg));
|
||||
}
|
||||
|
||||
static int hpwdt_my_nmi(void)
|
||||
{
|
||||
return ioread8(hpwdt_nmistat) & 0x6;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HPWDT_NMI_DECODING
|
||||
/*
|
||||
* NMI Handler
|
||||
|
@ -485,6 +491,9 @@ static int hpwdt_pretimeout(unsigned int ulReason, struct pt_regs *regs)
|
|||
if (!hpwdt_nmi_decoding)
|
||||
goto out;
|
||||
|
||||
if ((ulReason == NMI_UNKNOWN) && !hpwdt_my_nmi())
|
||||
return NMI_DONE;
|
||||
|
||||
spin_lock_irqsave(&rom_lock, rom_pl);
|
||||
if (!die_nmi_called && !is_icru && !is_uefi)
|
||||
asminline_call(&cmn_regs, cru_rom_addr);
|
||||
|
@ -840,6 +849,7 @@ static int hpwdt_init_one(struct pci_dev *dev,
|
|||
retval = -ENOMEM;
|
||||
goto error_pci_iomap;
|
||||
}
|
||||
hpwdt_nmistat = pci_mem_addr + 0x6e;
|
||||
hpwdt_timer_reg = pci_mem_addr + 0x70;
|
||||
hpwdt_timer_con = pci_mem_addr + 0x72;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue