Skip site navigation (1)Skip section navigation (2)
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>