Re: Serial: bug in 8250.c when handling PCI or other level triggers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Dec 23, 2005 at 11:20:59AM +0200, Meelis Roos wrote:
> >I notice you're using gcc 4.0.3.  Have you tried other compiler
> >versions?
> 
> Tried 3.3 (Debian 3.3.6). Discover still gets the errors, opening port 
> with minicom didn't this time (maybe I did start minicom an power on the 
> switch in different order). But when closing minicom, I got the messages 
> again (after the AGP messages).

So not much change.

Ok, please apply this patch on top of the previous and re-send the
kernel messages.  This will let us see what's going on with 'l' and
'end'.

Thanks.

--- a/drivers/serial/8250.c	2005-12-23 09:26:45.273235110 +0000
+++ b/drivers/serial/8250.c	2005-12-23 09:32:37.347434791 +0000
@@ -146,6 +146,9 @@
 		unsigned char	iir_b;
 		unsigned char	lsr_e;
 		unsigned char	iir_e;
+		void		*l;
+		void		*eb;
+		void		*ee;
 	} log[64];
 	unsigned char		log_idx;
 };
@@ -1348,8 +1351,11 @@
 		up->log[up->log_idx].type = 0;
 		up->log[up->log_idx].num = pass_counter;
 		up->log[up->log_idx].iir_b = iir;
+		up->log[up->log_idx].l = l;
+		up->log[up->log_idx].eb = end;
 
 		if (!(iir & UART_IIR_NO_INT)) {
+			up->log[up->log_idx].type = 1;
 			spin_lock(&up->port.lock);
 			serial8250_handle_port(up, regs);
 			spin_unlock(&up->port.lock);
@@ -1361,6 +1367,7 @@
 			end = l;
 
 		up->log[up->log_idx].iir_e = serial_in(up, UART_IIR);
+		up->log[up->log_idx].ee = end;
 		up->log_idx = (up->log_idx + 1) & 63;
 
 		l = l->next;
@@ -1402,16 +1409,19 @@
 		struct uart_8250_port *up = list_entry(l, struct uart_8250_port, list);
 		int i;
 
-		printk("serial8250: port %p(%d)\n", up, up->port.line);
+		printk("serial8250: port %p(%d) head=%p end=%p\n", up, up->port.line, i->head, end);
 		for (i = 0; i < 64; i++)
-			printk("%d: jif=%08lx type=%02x num=%02x iir=%02x lsr=%02x => iir=%02x lsr=%02x\n", i,
+			printk("%d: jif=%08lx type=%02x num=%02x iir=%02x lsr=%02x => iir=%02x lsr=%02x l=%p eb=%p ee=%p\n", i,
 				up->log[(up->log_idx + i) & 63].jiffies,
 				up->log[(up->log_idx + i) & 63].type,
 				up->log[(up->log_idx + i) & 63].num,
 				up->log[(up->log_idx + i) & 63].iir_b,
 				up->log[(up->log_idx + i) & 63].lsr_b,
 				up->log[(up->log_idx + i) & 63].iir_e,
-				up->log[(up->log_idx + i) & 63].lsr_e);
+				up->log[(up->log_idx + i) & 63].lsr_e,
+				up->log[(up->log_idx + i) & 63].l,
+				up->log[(up->log_idx + i) & 63].eb,
+				up->log[(up->log_idx + i) & 63].ee);
 		l = l->next;
 	} while (l != i->head);
 

-- 
Russell King
 Linux kernel    2.6 ARM Linux   - http://www.arm.linux.org.uk/
 maintainer of:  2.6 Serial core
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux