Re: tickle nmi watchdog whilst doing serial writes.

Alexander Nyberg
2005-05-14T10:53:16Z

> Hi,
>
> Suspect this can be triggered using alt+sysreq+T on a busy system with a slow
> serial console. Might be a easy way to see if this patch fixes the issue?
>

Sysrq-t already tickles the watchdog between the printing of each task
so you'll have to remove the nmi tickling in show_state() if you want to
use it as a test case.

But uhm, it should take at least 5 seconds of no-interrupts before the
NMI watchdog decides the box is dead so this is kind of weird.

> > <obwhitespacewhine> spose so.
> >
> > --- 25/drivers/serial/8250.c~tickle-nmi-watchdog-whilst-doing-serial-writes 2005-05-14 00:03:09.000000000 -0700
> > +++ 25-akpm/drivers/serial/8250.c 2005-05-14 00:06:53.000000000 -0700
> > @@ -40,6 +40,7 @@
> > #include <linux/serial_core.h>
> > #include <linux/serial.h>
> > #include <linux/serial_8250.h>
> > +#include <linux/nmi.h>
> >
> > #include <asm/io.h>
> > #include <asm/irq.h>
> > @@ -2098,9 +2099,11 @@ static inline void wait_for_xmitr(struct
> > /* Wait up to 1s for flow control if necessary */
> > if (up->port.flags & UPF_CONS_FLOW) {
> > tmout = 1000000;
> > - while (--tmout &&
> > - ((serial_in(up, UART_MSR) & UART_MSR_CTS) == 0))
> > + while (!(serial_in(up, UART_MSR) & UART_MSR_CTS) && --tmout) {
> > udelay(1);
> > + if ((tmout % 1000) == 0)
> > + touch_nmi_watchdog();
> > + }
> > }
> > }
> >