watchdog: hpwdt: Check source of NMI
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>
This commit is contained in:
Родитель
e531037145
Коммит
838534e50e
|
@ -52,6 +52,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;
|
||||
|
||||
|
@ -474,6 +475,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
|
||||
|
@ -486,6 +492,9 @@ static int hpwdt_pretimeout(unsigned int ulReason, struct pt_regs *regs)
|
|||
if (!hpwdt_nmi_decoding)
|
||||
return NMI_DONE;
|
||||
|
||||
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);
|
||||
|
@ -842,6 +851,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;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче