--- 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",