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_ */