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>