Re: tickle nmi watchdog whilst doing serial writes.

George Anzinger
2005-05-19T00:24:43Z

Andi Kleen wrote:
> Russell King <rmk+lkml@arm.linux.org.uk> writes:
>
>
>>On Sun, May 15, 2005 at 01:38:02PM +0200, Andi Kleen wrote:
>>
>>>Dave Jones <davej@redhat.com> writes:
>>>
>>>>
>>>> #include <asm/io.h>
>>>> #include <asm/irq.h>
>>>>@@ -2099,8 +2100,10 @@ static inline void wait_for_xmitr(struct
>>>> if (up->port.flags & UPF_CONS_FLOW) {
>>>> tmout = 1000000;
>>>> while (--tmout &&
>>>>- ((serial_in(up, UART_MSR) & UART_MSR_CTS) == 0))
>>>>+ ((serial_in(up, UART_MSR) & UART_MSR_CTS) == 0)) {
>>>> udelay(1);
>>>>+ touch_nmi_watchdog();
>>>
>>>Note that touch_nmi_watchdog is not exported on i386 - Linus vetoed
>>>that some time ago. The real fix of course is to use schedule_timeout(),
>>>but that might break printk() with interrupts off :/
>>
>>Not to mention printk() from atomic contexts and panic(). No,
>>schedule_timeout() is _not_ a "real fix" but a kludge.

Um... I would think the real fix is to set the UART up to generate the modem
status interrupt and eliminate the pole loop. Why can't this be done? I, for
one, don't want my cpu looping in the serial driver, even more so with the
interrupt system off. This, in my mind, is a real bug in the serial driver and
should be so handled.

--
George Anzinger george@mvista.com
High-res-timers: http://sourceforge.net/projects/high-res-timers/