summaryrefslogtreecommitdiffstats
path: root/sys/dev/mxge/if_mxge.c
diff options
context:
space:
mode:
authorgallatin <gallatin@FreeBSD.org>2010-03-17 20:13:09 +0000
committergallatin <gallatin@FreeBSD.org>2010-03-17 20:13:09 +0000
commit0824be03226071fed1114ef047a461f21ecee2ab (patch)
treeeb50baaa17ae89319dcf30f7c2e6347f3ed7efb9 /sys/dev/mxge/if_mxge.c
parent0e5db580ee230ddfec7cc705eef0634383c57c3c (diff)
downloadFreeBSD-src-0824be03226071fed1114ef047a461f21ecee2ab.zip
FreeBSD-src-0824be03226071fed1114ef047a461f21ecee2ab.tar.gz
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
Diffstat (limited to 'sys/dev/mxge/if_mxge.c')
-rw-r--r--sys/dev/mxge/if_mxge.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/dev/mxge/if_mxge.c b/sys/dev/mxge/if_mxge.c
index 5b8bb99..d7f5825 100644
--- a/sys/dev/mxge/if_mxge.c
+++ b/sys/dev/mxge/if_mxge.c
@@ -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;
OpenPOWER on IntegriCloud