aboutsummaryrefslogtreecommitdiff
path: root/sys/net/iflib.c
diff options
context:
space:
mode:
authorStephen Hurd <shurd@FreeBSD.org>2018-05-08 16:56:02 +0000
committerStephen Hurd <shurd@FreeBSD.org>2018-05-08 16:56:02 +0000
commit6108c0139552629cab4166c88047beca25032140 (patch)
tree6fcd220d98887dee65c19824d43a4e7072a90682 /sys/net/iflib.c
parenta1947307e7e5cc9af6db4a099df307fa7b957352 (diff)
downloadsrc-6108c0139552629cab4166c88047beca25032140.tar.gz
src-6108c0139552629cab4166c88047beca25032140.zip
iflib: cleanup queues when iflib_device_register fail
Submitted by: Jacob Keller <jacob.e.keller@intel.com> Reviewed by: gallatin MFC after: 3 days Sponsored by: Intel Corporation Differential Revision: https://reviews.freebsd.org/D15299
Notes
Notes: svn path=/head/; revision=333366
Diffstat (limited to 'sys/net/iflib.c')
-rw-r--r--sys/net/iflib.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/sys/net/iflib.c b/sys/net/iflib.c
index fc4b94ea52df..11a95897f3c9 100644
--- a/sys/net/iflib.c
+++ b/sys/net/iflib.c
@@ -4453,7 +4453,8 @@ fail_intr_free:
if (scctx->isc_intr == IFLIB_INTR_MSIX || scctx->isc_intr == IFLIB_INTR_MSI)
pci_release_msi(ctx->ifc_dev);
fail_queues:
- /* XXX free queues */
+ iflib_tx_structures_free(ctx);
+ iflib_rx_structures_free(ctx);
fail:
IFDI_DETACH(ctx);
CTX_UNLOCK(ctx);
@@ -5065,14 +5066,16 @@ iflib_qset_structures_setup(if_ctx_t ctx)
{
int err;
+ /*
+ * It is expected that the caller takes care of freeing queues if this
+ * fails.
+ */
if ((err = iflib_tx_structures_setup(ctx)) != 0)
return (err);
- if ((err = iflib_rx_structures_setup(ctx)) != 0) {
+ if ((err = iflib_rx_structures_setup(ctx)) != 0)
device_printf(ctx->ifc_dev, "iflib_rx_structures_setup failed: %d\n", err);
- iflib_tx_structures_free(ctx);
- iflib_rx_structures_free(ctx);
- }
+
return (err);
}