[PATCH] x86: Fix i386 nmi_watchdog that does not trigger die_nmi
Fix i386 nmi_watchdog that does not meet watchdog timeout condition. It
does not hit die_nmi when it should be triggered, because the current
nmi_watchdog_tick in arch/i386/kernel/nmi.c never count up alert_counter
like this:
void nmi_watchdog_tick (struct pt_regs * regs) {
if (last_irq_sums[cpu] == sum) {
alert_counter[cpu]++; <- count up alert_counter, but
if (alert_counter[cpu] == 5*nmi_hz)
die_nmi(regs, "NMI Watchdog detected LOCKUP");
alert_counter[cpu] = 0; <- reset alert_counter
This patch changes it back to the previous and working version.
This was found and originally written by Kohta NAKASHIMA.
(akpm: also uninline write_watchdog_counter(), saving 184 byets)
Signed-off-by: GOTO Masanori <gotom@sanori.org>
Cc: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
707ced0d71
commit
b884e25784
@@ -357,7 +357,7 @@ static void clear_msr_range(unsigned int base, unsigned int n)
|
||||
wrmsr(base+i, 0, 0);
|
||||
}
|
||||
|
||||
static inline void write_watchdog_counter(const char *descr)
|
||||
static void write_watchdog_counter(const char *descr)
|
||||
{
|
||||
u64 count = (u64)cpu_khz * 1000;
|
||||
|
||||
@@ -544,7 +544,7 @@ void nmi_watchdog_tick (struct pt_regs * regs)
|
||||
* die_nmi will return ONLY if NOTIFY_STOP happens..
|
||||
*/
|
||||
die_nmi(regs, "NMI Watchdog detected LOCKUP");
|
||||
|
||||
} else {
|
||||
last_irq_sums[cpu] = sum;
|
||||
alert_counter[cpu] = 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user