svn commit: r205255 - head/sys/dev/mxge
Andrew Gallatin
gallatin at FreeBSD.org
Wed Mar 17 20:13:09 UTC 2010
Author: gallatin
Date: Wed Mar 17 20:13:09 2010
New Revision: 205255
URL: http://svn.freebsd.org/changeset/base/205255
Log:
Fix 2 bugs in mxge_attach()
- Don't leak slice resources when mxge_alloc_rings() fails
- Start taskq threads only after we know attach will succeed. At
boot time, taskqueue_terminate() will loop infinately, waiting
for the threads to exit, and hang the system.
Submitted by: Panasas
MFC After: 3 days
Modified:
head/sys/dev/mxge/if_mxge.c
Modified: head/sys/dev/mxge/if_mxge.c
==============================================================================
--- head/sys/dev/mxge/if_mxge.c Wed Mar 17 20:01:01 2010 (r205254)
+++ head/sys/dev/mxge/if_mxge.c Wed Mar 17 20:13:09 2010 (r205255)
@@ -4616,8 +4616,6 @@ mxge_attach(device_t dev)
err = ENOMEM;
goto abort_with_nothing;
}
- taskqueue_start_threads(&sc->tq, 1, PI_NET, "%s taskq",
- device_get_nameunit(sc->dev));
err = bus_dma_tag_create(NULL, /* parent */
1, /* alignment */
@@ -4723,7 +4721,7 @@ mxge_attach(device_t dev)
err = mxge_alloc_rings(sc);
if (err != 0) {
device_printf(sc->dev, "failed to allocate rings\n");
- goto abort_with_dmabench;
+ goto abort_with_slices;
}
err = mxge_add_irq(sc);
@@ -4781,6 +4779,8 @@ mxge_attach(device_t dev)
ifp->if_transmit = mxge_transmit;
ifp->if_qflush = mxge_qflush;
#endif
+ taskqueue_start_threads(&sc->tq, 1, PI_NET, "%s taskq",
+ device_get_nameunit(sc->dev));
callout_reset(&sc->co_hdl, mxge_ticks, mxge_tick, sc);
return 0;
More information about the svn-src-all
mailing list