Index: sys/dev/usb/if_mue.c
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/if_mue.c,v
retrieving revision 1.28
diff -p -u -r1.28 if_mue.c
--- sys/dev/usb/if_mue.c	22 Jan 2019 03:42:28 -0000	1.28
+++ sys/dev/usb/if_mue.c	27 Jan 2019 16:45:37 -0000
@@ -933,11 +933,16 @@ mue_attach(device_t parent, device_t sel
 	sc->mue_flags = MUE_LOOKUP(uaa)->mue_flags;
 
 	/* Decide on what our bufsize will be. */
-	if (sc->mue_flags & LAN7500)
+	if (sc->mue_flags & LAN7500) {
 		sc->mue_rxbufsz = (sc->mue_udev->ud_speed == USB_SPEED_HIGH) ?
 		    MUE_7500_HS_RX_BUFSIZE : MUE_7500_FS_RX_BUFSIZE;
-	else
+		sc->mue_rx_list_cnt = 1;
+		sc->mue_tx_list_cnt = 1;
+	} else {
 		sc->mue_rxbufsz = MUE_7800_RX_BUFSIZE;
+		sc->mue_rx_list_cnt = MUE_RX_LIST_CNT;
+		sc->mue_tx_list_cnt = MUE_TX_LIST_CNT;
+	}
 	sc->mue_txbufsz = MUE_TX_BUFSIZE;
 
 	/* Find endpoints. */
@@ -1124,7 +1129,7 @@ mue_rx_list_init(struct mue_softc *sc)
 	int err;
 
 	cd = &sc->mue_cdata;
-	for (i = 0; i < __arraycount(cd->mue_rx_chain); i++) {
+	for (i = 0; i < sc->mue_rx_list_cnt; i++) {
 		c = &cd->mue_rx_chain[i];
 		c->mue_sc = sc;
 		c->mue_idx = i;
@@ -1149,7 +1154,7 @@ mue_tx_list_init(struct mue_softc *sc)
 	int err;
 
 	cd = &sc->mue_cdata;
-	for (i = 0; i < __arraycount(cd->mue_tx_chain); i++) {
+	for (i = 0; i < sc->mue_tx_list_cnt; i++) {
 		c = &cd->mue_tx_chain[i];
 		c->mue_sc = sc;
 		c->mue_idx = i;
@@ -1197,7 +1202,7 @@ mue_startup_rx_pipes(struct mue_softc *s
 	size_t i;
 
 	/* Start up the receive pipe. */
-	for (i = 0; i < __arraycount(sc->mue_cdata.mue_rx_chain); i++) {
+	for (i = 0; i < sc->mue_rx_list_cnt; i++) {
 		c = &sc->mue_cdata.mue_rx_chain[i];
 		usbd_setup_xfer(c->mue_xfer, c, c->mue_buf, sc->mue_rxbufsz,
 		    USBD_SHORT_XFER_OK, USBD_NO_TIMEOUT, mue_rxeof);
@@ -1454,11 +1459,6 @@ mue_rxeof(struct usbd_xfer *xfer, void *
 		return;
 	}
 
-	if (__predict_false(!(ifp->if_flags & IFF_RUNNING))) {
-		DPRINTF(sc, "not running\n");
-		return;
-	}
-
 	if (__predict_false(status != USBD_NORMAL_COMPLETION)) {
 		DPRINTF(sc, "%s\n", usbd_errstr(status));
 		if (status == USBD_NOT_STARTED || status == USBD_CANCELLED)
@@ -1783,7 +1783,7 @@ mue_start(struct ifnet *ifp)
 	}
 
 	idx = cd->mue_tx_prod;
-	while (cd->mue_tx_cnt < MUE_TX_LIST_CNT) {
+	while ((unsigned)cd->mue_tx_cnt < sc->mue_tx_list_cnt) {
 		IFQ_POLL(&ifp->if_snd, m);
 		if (m == NULL)
 			break;
@@ -1797,13 +1797,13 @@ mue_start(struct ifnet *ifp)
 		bpf_mtap(ifp, m, BPF_D_OUT);
 		m_freem(m);
 
-		idx = (idx + 1) % MUE_TX_LIST_CNT;
+		idx = (idx + 1) % sc->mue_tx_list_cnt;
 		cd->mue_tx_cnt++;
 
 	}
 	cd->mue_tx_prod = idx;
 
-	if (cd->mue_tx_cnt >= MUE_TX_LIST_CNT)
+	if ((unsigned)cd->mue_tx_cnt >= sc->mue_tx_list_cnt)
 		ifp->if_flags |= IFF_OACTIVE;
 
 	/* Set a timeout in case the chip goes out to lunch. */
@@ -1834,7 +1834,7 @@ mue_stop(struct ifnet *ifp, int disable 
 		}
 
 	/* Free RX resources. */
-	for (i = 0; i < __arraycount(sc->mue_cdata.mue_rx_chain); i++)
+	for (i = 0; i < sc->mue_rx_list_cnt; i++)
 		if (sc->mue_cdata.mue_rx_chain[i].mue_xfer != NULL) {
 			usbd_destroy_xfer(
 			    sc->mue_cdata.mue_rx_chain[i].mue_xfer);
@@ -1842,7 +1842,7 @@ mue_stop(struct ifnet *ifp, int disable 
 		}
 
 	/* Free TX resources. */
-	for (i = 0; i < __arraycount(sc->mue_cdata.mue_tx_chain); i++)
+	for (i = 0; i < sc->mue_tx_list_cnt; i++)
 		if (sc->mue_cdata.mue_tx_chain[i].mue_xfer != NULL) {
 			usbd_destroy_xfer(
 			    sc->mue_cdata.mue_tx_chain[i].mue_xfer);
Index: sys/dev/usb/if_muevar.h
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/if_muevar.h,v
retrieving revision 1.4
diff -p -u -r1.4 if_muevar.h
--- sys/dev/usb/if_muevar.h	5 Jan 2019 07:56:07 -0000	1.4
+++ sys/dev/usb/if_muevar.h	27 Jan 2019 16:45:37 -0000
@@ -117,6 +117,9 @@ struct mue_softc {
 	uint32_t		mue_rxbufsz;
 	uint32_t		mue_txbufsz;
 	int			mue_link;
+
+	unsigned		mue_rx_list_cnt;
+	unsigned		mue_tx_list_cnt;
 };
 
 #endif /* _IF_MUEVAR_H_ */
