Date: Mon, 7 Feb 2000 20:06:00 -0800 (PST) From: Matthew Dillon <dillon@apollo.backplane.com> To: "Rodney W. Grimes" <freebsd@gndrsh.dnsmgr.net> Cc: bmilekic@dsuper.net (Bosko Milekic), freebsd-stable@FreeBSD.ORG, freebsd-hackers@FreeBSD.ORG, peter@FreeBSD.ORG Subject: Re: rtfree panic() (fwd) Message-ID: <200002080406.UAA52606@apollo.backplane.com> References: <200002080143.RAA19125@gndrsh.dnsmgr.net>
next in thread | previous in thread | raw e-mail | index | archive | help
:No, this problem was fixed in -current with this commit (you looked at :the wrong file, fix was in route.h): : :revision 1.30 :date: 1999/06/30 23:11:15; author: msmith; state: Exp; lines: +2 -3 :Increase the size of the route reference count from 15 bits to 31 bits. : :This doesn't change the size or alignment of the structure on either i386 :or Alpha, and thus should be binary-compatible (modulo problems with old :applications and routes with more than 2^15 references). :... :> #9 0xc015e343 in if_unroute (ifp=0xc023ebc4, flag=1, fam=0) :> at ../../net/if.c:414 :> #10 0xc015e3cf in if_down (ifp=0xc023ebc4) at ../../net/if.c:449 :> #11 0xc01e7308 in etp_linkdown () :> #12 0xc01e97ab in cisco_keepalive () :> #13 0xc01e9ba8 in cisco_notify () :> #14 0xc01ecbad in etp_notify () :> ---Type <return> to continue, or q <return> to quit--- :> #15 0xc01e91e4 in hdlc_rcvhandler () :> #16 0xc01cf35e in l3_rcvhandler () :> #17 0xc01c857d in lind_event () :> #18 0xc01e7445 in hdlc_timeout () :> #19 0xc0130112 in softclock () at ../../kern/kern_timeout.c:132 :> :> --- :-- :Rod Grimes - KD7CAX @ CN85sl - (RWG25) rgrimes@gndrsh.dnsmgr.net I am only partially familiar with this sync board. I don't know what the bug is but I strongly suspect that if_down() is not being called at splnet() by the sync board's driver code. It might be possible to test this hypothesis by modifying the if_down() routine in net/if.c to surround it with an splnet() call, e.g.: /* * Mark an interface down and notify protocols of * the transition. * NOTE: must be called at splnet or eqivalent. */ void if_down(ifp) register struct ifnet *ifp; { int s = splnet(); /* ADDME */ if_unroute(ifp, IFF_UP, AF_UNSPEC); splx(s); /* ADDME */ } And see if that solves the problem. We fixed another similar bug last year in regards to the low-memory garbage collection code not freeing routes at the correct spl. There could be other similar problems. I recall that this driver's source is not distributed. If I'm wrong then there is an avenue to pursue with the source (namely determining if the source calls the IF routines at the correct spl). -Matt Matthew Dillon <dillon@backplane.com> To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200002080406.UAA52606>