6BETA5 panic with ifconfig nge
Yuriy N. Shkandybin
jura at networks.ru
Mon Sep 26 06:39:52 PDT 2005
Patch below fixes my panics:
Main is:
sc->nge_ldata = contigmalloc(sizeof(struct nge_list_data), M_DEVBUF,
- M_NOWAIT, 0, 0xffffffff, PAGE_SIZE, 0);
+ M_NOWAIT|M_ZERO, 0, 0xffffffff, PAGE_SIZE, 0);
Other is incorporated rev. 1.78-1.79 of if_nge.c from HEAD.
Jura
--- if_nge.c.orig Mon Sep 26 17:02:00 2005
+++ if_nge.c.my Mon Sep 26 16:59:26 2005
@@ -839,7 +839,7 @@
/* XXX: leaked on error */
sc->nge_ldata = contigmalloc(sizeof(struct nge_list_data), M_DEVBUF,
- M_NOWAIT, 0, 0xffffffff, PAGE_SIZE, 0);
+ M_NOWAIT|M_ZERO, 0, 0xffffffff, PAGE_SIZE, 0);
if (sc->nge_ldata == NULL) {
printf("nge%d: no memory for list buffers!\n", unit);
@@ -912,6 +912,7 @@
} else {
printf("nge%d: MII without any PHY!\n", sc->nge_unit);
+ if_free(ifp);
bus_release_resource(dev, SYS_RES_IRQ, 0, sc->nge_irq);
bus_release_resource(dev, NGE_RES, NGE_RID,
sc->nge_res);
@@ -933,6 +934,7 @@
nge_intr, sc, &sc->nge_intrhand);
if (error) {
/* XXX: resource leaks */
+ if_free(ifp);
bus_release_resource(dev, SYS_RES_IRQ, 0, sc->nge_irq);
bus_release_resource(dev, NGE_RES, NGE_RID, sc->nge_res);
printf("nge%d: couldn't set up irq\n", unit);
@@ -960,7 +962,6 @@
nge_stop(sc);
NGE_UNLOCK(sc);
ether_ifdetach(ifp);
- if_free(ifp);
bus_generic_detach(dev);
if (!sc->nge_tbi) {
@@ -971,6 +972,7 @@
bus_release_resource(dev, NGE_RES, NGE_RID, sc->nge_res);
contigfree(sc->nge_ldata, sizeof(struct nge_list_data), M_DEVBUF);
+ if_free(ifp);
NGE_LOCK_DESTROY(sc);
More information about the freebsd-stable
mailing list