Module Name:    src
Committed By:   jdolecek
Date:           Fri Jul 17 09:48:21 UTC 2020

Modified Files:
        src/sys/dev/pci: if_bnx.c

Log Message:
re-enable MSI/MSI-X, the TX timeouts were caused by the IFF_OACTIVE handling,
which was fixed in previous revision


To generate a diff of this commit:
cvs rdiff -u -r1.101 -r1.102 src/sys/dev/pci/if_bnx.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/pci/if_bnx.c
diff -u src/sys/dev/pci/if_bnx.c:1.101 src/sys/dev/pci/if_bnx.c:1.102
--- src/sys/dev/pci/if_bnx.c:1.101	Thu Jul 16 14:57:59 2020
+++ src/sys/dev/pci/if_bnx.c	Fri Jul 17 09:48:21 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_bnx.c,v 1.101 2020/07/16 14:57:59 jdolecek Exp $	*/
+/*	$NetBSD: if_bnx.c,v 1.102 2020/07/17 09:48:21 jdolecek Exp $	*/
 /*	$OpenBSD: if_bnx.c,v 1.101 2013/03/28 17:21:44 brad Exp $	*/
 
 /*-
@@ -35,7 +35,7 @@
 #if 0
 __FBSDID("$FreeBSD: src/sys/dev/bce/if_bce.c,v 1.3 2006/04/13 14:12:26 ru Exp $");
 #endif
-__KERNEL_RCSID(0, "$NetBSD: if_bnx.c,v 1.101 2020/07/16 14:57:59 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_bnx.c,v 1.102 2020/07/17 09:48:21 jdolecek Exp $");
 
 /*
  * The following controllers are supported by this driver:
@@ -625,14 +625,7 @@ bnx_attach(device_t parent, device_t sel
 		return;
 	}
 
-	/* XXX using MSI-X causes TX timeouts, needs to be debugged */
-	int counts[PCI_INTR_TYPE_SIZE] = {
-		[PCI_INTR_TYPE_INTX] = 1,
-		[PCI_INTR_TYPE_MSI] = 0,
-		[PCI_INTR_TYPE_MSIX] = 0,
-	};
-
-	if (pci_intr_alloc(pa, &sc->bnx_ih, counts, PCI_INTR_TYPE_INTX)) {
+	if (pci_intr_alloc(pa, &sc->bnx_ih, NULL, 0)) {
 		aprint_error_dev(sc->bnx_dev, "couldn't map interrupt\n");
 		goto bnx_attach_fail;
 	}
@@ -4092,9 +4085,6 @@ bnx_alloc_pkts(struct work * unused, voi
 		    &pkt->pkt_dmamap) != 0)
 			goto put;
 
-		if (!ISSET(ifp->if_flags, IFF_UP))
-			goto stopping;
-
 		mutex_enter(&sc->tx_pkt_mtx);
 		TAILQ_INSERT_TAIL(&sc->tx_free_pkts, pkt, pkt_entry);
 		sc->tx_pkt_count++;
@@ -4114,8 +4104,6 @@ bnx_alloc_pkts(struct work * unused, voi
 
 	return;
 
-stopping:
-	bus_dmamap_destroy(sc->bnx_dmatag, pkt->pkt_dmamap);
 put:
 	pool_put(bnx_tx_pool, pkt);
 	return;
@@ -5190,8 +5178,10 @@ retry:
 	bus_dmamap_sync(sc->bnx_dmatag, map, 0, map->dm_mapsize,
 	    BUS_DMASYNC_PREWRITE);
 	/* Make sure there's room in the chain */
-	if (map->dm_nsegs > (sc->max_tx_bd - sc->used_tx_bd))
+	if (map->dm_nsegs > (sc->max_tx_bd - sc->used_tx_bd)) {
+		error = ENOMEM;
 		goto nospace;
+	}
 
 	/* prod points to an empty tx_bd at this point. */
 	prod_bseq = sc->tx_prod_bseq;
@@ -5270,7 +5260,7 @@ maperr:
 	TAILQ_INSERT_TAIL(&sc->tx_free_pkts, pkt, pkt_entry);
 	mutex_exit(&sc->tx_pkt_mtx);
 
-	return ENOMEM;
+	return error;
 }
 
 /****************************************************************************/

Reply via email to