Page MenuHomeFreeBSD

D15354.diff
No OneTemporary

D15354.diff

Index: stable/11/sys/net/iflib.c
===================================================================
--- stable/11/sys/net/iflib.c
+++ stable/11/sys/net/iflib.c
@@ -3269,7 +3269,7 @@
*/
txq->ift_rs_pending += nsegs + 1;
if (txq->ift_rs_pending > TXQ_MAX_RS_DEFERRED(txq) ||
- iflib_no_tx_batch || (TXQ_AVAIL(txq) - nsegs - 1) <= MAX_TX_DESC(ctx)) {
+ iflib_no_tx_batch || (TXQ_AVAIL(txq) - nsegs) <= MAX_TX_DESC(ctx) + 2) {
pi.ipi_flags |= IPI_TX_INTR;
txq->ift_rs_pending = 0;
}
@@ -4342,10 +4342,8 @@
goto fail;
}
- if ((err = iflib_qset_structures_setup(ctx))) {
- device_printf(dev, "qset structure setup failed %d\n", err);
+ if ((err = iflib_qset_structures_setup(ctx)))
goto fail_queues;
- }
/*
* Group taskqueues aren't properly set up until SMP is started,
* so we disable interrupts until we can handle them post
@@ -4392,7 +4390,8 @@
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);
return (err);
@@ -5003,14 +5002,18 @@
{
int err;
- if ((err = iflib_tx_structures_setup(ctx)) != 0)
+ /*
+ * It is expected that the caller takes care of freeing queues if this
+ * fails.
+ */
+ if ((err = iflib_tx_structures_setup(ctx)) != 0) {
+ device_printf(ctx->ifc_dev, "iflib_tx_structures_setup failed: %d\n", err);
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);
}

File Metadata

Mime Type
text/plain
Expires
Tue, Oct 21, 3:10 AM (19 h, 52 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
23996998
Default Alt Text
D15354.diff (1 KB)

Event Timeline