Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 15 Nov 2004 15:10:07 -0500
From:      John Baldwin <jhb@FreeBSD.org>
To:        Sten Spans <sten@blinkenlights.nl>
Cc:        freebsd-alpha@FreeBSD.org
Subject:   Re: alpha and em mtu
Message-ID:  <200411151510.07790.jhb@FreeBSD.org>
In-Reply-To: <Pine.SOC.4.61.0411152030030.29165@tea.blinkenlights.nl>
References:  <Pine.SOC.4.61.0411142153430.26307@tea.blinkenlights.nl> <200411151111.11950.jhb@FreeBSD.org> <Pine.SOC.4.61.0411152030030.29165@tea.blinkenlights.nl>

next in thread | previous in thread | raw e-mail | index | archive | help
On Monday 15 November 2004 02:34 pm, Sten Spans wrote:
> On Mon, 15 Nov 2004, John Baldwin wrote:
> > On Sunday 14 November 2004 04:26 pm, Sten Spans wrote:
> >> I upgraded my ds10 with an intel gigabit card,
> >> and encountered the following issue (RELENG_5):
> >>
> >> deepthought# ifconfig em0 mtu 1501
> >> deepthought#
> >> fatal kernel trap:
> >>
> >>      trap entry     = 0x4 (unaligned access fault)
> >>      faulting va    = 0xfffffc001847a02e
> >>      opcode         = 0x28
> >>      register       = 0x1
> >>      pc             = 0xfffffc00004cd0f8
> >>      ra             = 0xfffffc00004cce24
> >>      sp             = 0xfffffe00187a9af0
> >>      curthread      = 0xfffffc001f3a70e0
> >>          pid = 14, comm = swi1: net
> >>
> >> [thread 100006]
> >> Stopped at      tcp_input+0x368:        srl     t0,#0x2,t0     
> >> <t0=0x45> db> trace
> >> tcp_input() at tcp_input+0x368
> >
> > Can you do 'gdb kernel.debug' in your kernel build directory and then do
> > 'l *tcp_input+0x368' to determine which source line it is panic'ing at? 
> > This might help us figure out what the unaligned access is so it can be
> > fixed.  If you don't have a debug kernel, please build one and reproduce
> > the panic to get the updated 'tcp_input+0xblah' line and then do the gdb
> > command with the updated 'tcp_input+0xblah' bit.  Thanks.
>
> Sure, I anticipated this, but couldn't quite
> recall how to do the gdb magics :).
>
> (gdb) l *tcp_input+0x368
> 0xfffffc00004cd0f8 is in tcp_input (/usr/src/sys/netinet/tcp_input.c:552).
> 547
> 548             /*
> 549              * Check that TCP offset makes sense,
> 550              * pull out TCP options and adjust length.              XXX
> 551              */
> 552             off = th->th_off << 2;
> 553             if (off < sizeof (struct tcphdr) || off > tlen) {
> 554                     tcpstat.tcps_rcvbadoff++;
> 555                     goto drop;
> 556             }
>
>
> The box that talks to the alpha has mtu 9014, this might
> help to expose the bug.

It may be that the off0 argument is less than the size of an IP header but is 
not a multiple of 4.  Can you try this to see if it prints anything out 
before crashing:

Index: netinet/tcp_input.c
===================================================================
RCS file: /usr/cvs/src/sys/netinet/tcp_input.c,v
retrieving revision 1.255
diff -u -r1.255 tcp_input.c
--- netinet/tcp_input.c	7 Nov 2004 19:19:35 -0000	1.255
+++ netinet/tcp_input.c	15 Nov 2004 20:09:27 -0000
@@ -497,6 +497,8 @@
 			ip_stripoptions(m, (struct mbuf *)0);
 			off0 = sizeof(struct ip);
 		}
+		if (off0 & 0x3 != 0)
+			printf("%s: off0 %d is misaligned\n", __func__, off0);
 		if (m->m_len < sizeof (struct tcpiphdr)) {
 			if ((m = m_pullup(m, sizeof (struct tcpiphdr))) == 0) {
 				tcpstat.tcps_rcvshort++;


-- 
John Baldwin <jhb@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200411151510.07790.jhb>