Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 9 Aug 2005 16:06:59 -0700
From:      Darcy Buskermolen <darcy@wavefire.com>
To:        freebsd-net@freebsd.org
Subject:   Re: panic: if_attach called without if_alloc'd input()
Message-ID:  <200508091606.59685.darcy@wavefire.com>
In-Reply-To: <200508091348.05099.darcy@wavefire.com>
References:  <200508090854.21278.darcy@wavefire.com> <20050809181601.GB20908@odin.ac.hmc.edu> <200508091348.05099.darcy@wavefire.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tuesday 09 August 2005 13:48, Darcy Buskermolen wrote:
> On Tuesday 09 August 2005 11:16, Brooks Davis wrote:
> > On Tue, Aug 09, 2005 at 08:54:21AM -0700, Darcy Buskermolen wrote:
> > > I'm getting the following panic on my RELENG_6 test box:
> > >
> > > xl1f0: BUG: if_attach called without if_alloc'd input()
> > >
> > > Where should I be looking to track this down? I suspect it has to do
> > > with a custom kernel, it wasn't doing it when i was running GENERIC
> >
> > The ef(4) device is currently broken.  I haven't had time to look at it
> > much though it seems mostly correct by inspection so I'm not sure what's
> > going on.
> >
> > If you could compile with debugging and get be a stack trace from the
> > panic, that might help be track this down.
>
> Here is a trace without your patch
>
> KDB: enter: panic
> [thread pid 0 tid 0 ]
> Stoped at   kdb_enter+0x2b: nop
> db> trace
> Tracing pid 0 tid 0 td 0xc0824dc0
> kdb_enter(c07b7c59) at kdb_enter+0xb2
> panic(c07bd294,c13b5c10,c0c20cfc,c059605d,c13b8c10) at panic+0xbb
> if_attach(c13b5c00,c13b5c00,c1380a00,c0c20d28,c05e93ed) at if_attach+0x33
> ether_ifattach(c13b5c00,c12ba2ab,0,c0c20d40,c05e9c86) at
> ether_ifattach+0x19 ef_attach(c13b04d0) at ef_attach+0x5d
> ef_load(c0c20d74,c0572383,c12b6600,0,0) at ef_load+0x1ae
> if_ef_modevent(c16b6600,0,0,c08259c0,0) at if_ef_modeevent+0x19
> module_redgister)init(c07fe220,c1ec00,c1e000,0,c0444065) at
> module_register_init+0x4b
> mi_startup() at mi_startup+0x96
> begin() at begin+0x2c
> db>
>
> This was transcribed for the monitor behind me so I may have typoed an
> address along the way, but hopefully it's enough to point you down the
> right path, if you need more detail just let me know.
>
> I'm compiling with your patch now, but it may take a bit before i get back
> to you with answers on how it does, darn slow hardware..
>
And with the patch no difference, same looking trace

> > I'm assuming there's a path
> > through the code that I'm missing that results in using a bogus cast to
> > get an ifnet pointer and thus causes a panic.  You might also try the
> > following patch which fixes a couple bugs I think are unrelated, but may
> > not be.
> >
> > -- Brooks
> >
> > Index: if_ef.c
> > ===================================================================
> > RCS file: /home/ncvs/src/sys/net/if_ef.c,v
> > retrieving revision 1.34
> > diff -u -p -r1.34 if_ef.c
> > --- if_ef.c	10 Jun 2005 16:49:18 -0000	1.34
> > +++ if_ef.c	26 Jul 2005 23:56:39 -0000
> > @@ -477,7 +477,7 @@ ef_clone(struct ef_link *efl, int ft)
> >  	efp->ef_pifp = ifp;
> >  	efp->ef_frametype = ft;
> >  	eifp = efp->ef_ifp = if_alloc(IFT_ETHER);
> > -	if (ifp == NULL)
> > +	if (eifp == NULL)
> >  		return (ENOSPC);
> >  	snprintf(eifp->if_xname, IFNAMSIZ,
> >  	    "%sf%d", ifp->if_xname, efp->ef_frametype);
> > @@ -536,8 +536,8 @@ ef_load(void)
> >  		SLIST_FOREACH(efl, &efdev, el_next) {
> >  			for (d = 0; d < EF_NFT; d++)
> >  				if (efl->el_units[d]) {
> > -					if (efl->el_units[d]->ef_pifp != NULL)
> > -						if_free(efl->el_units[d]->ef_pifp);
> > +					if (efl->el_units[d]->ef_ifp != NULL)
> > +						if_free(efl->el_units[d]->ef_ifp);
> >  					free(efl->el_units[d], M_IFADDR);
> >  				}
> >  			free(efl, M_IFADDR);

-- 
Darcy Buskermolen
Wavefire Technologies Corp.

http://www.wavefire.com
ph: 250.717.0200
fx: 250.763.1759



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