panic: if_attach called without if_alloc'd input()
Darcy Buskermolen
darcy at wavefire.com
Tue Aug 9 20:47:31 GMT 2005
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..
> 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
More information about the freebsd-net
mailing list