--- 6.4/drivers/char/serial.c Thu Mar 9 12:32:11 2000 +++ /tmp/serial.c Wed Apr 5 23:58:11 2000 @@ -105,7 +105,7 @@ #define RS_ISR_PASS_LIMIT 256 #define IRQ_T(state) \ - ((state->flags & ASYNC_SHARE_IRQ) ? SA_SHIRQ : SA_INTERRUPT) + (SA_SHIRQ|SA_INTERRUPT) #define SERIAL_INLINE @@ -670,7 +670,7 @@ first_multi = inb(multi->port_monitor); #endif - do { + while (!(serial_in(info, UART_IIR) & UART_IIR_NO_INT)) { status = serial_inp(info, UART_LSR); #ifdef SERIAL_DEBUG_INTR printk("status = %x...", status); @@ -680,14 +680,14 @@ check_modem_status(info); if (status & UART_LSR_THRE) transmit_chars(info, 0); + info->last_active = jiffies; if (pass_counter++ > RS_ISR_PASS_LIMIT) { #if 0 printk("rs_single loop break.\n"); #endif break; } - } while (!(serial_in(info, UART_IIR) & UART_IIR_NO_INT)); - info->last_active = jiffies; + } #ifdef CONFIG_SERIAL_MULTIPORT if (multi->port_monitor) printk("rs port monitor (single) irq %d: 0x%x, 0x%x\n",