summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb/if_kue.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/usb/if_kue.c')
-rw-r--r--sys/dev/usb/if_kue.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/sys/dev/usb/if_kue.c b/sys/dev/usb/if_kue.c
index 540f517..cb6a03c 100644
--- a/sys/dev/usb/if_kue.c
+++ b/sys/dev/usb/if_kue.c
@@ -763,9 +763,11 @@ Static void kue_txeof(xfer, priv, status)
usbd_get_xfer_status(c->kue_xfer, NULL, NULL, NULL, &err);
- c->kue_mbuf->m_pkthdr.rcvif = ifp;
- usb_tx_done(c->kue_mbuf);
- c->kue_mbuf = NULL;
+ if (c->kue_mbuf != NULL) {
+ c->kue_mbuf->m_pkthdr.rcvif = ifp;
+ usb_tx_done(c->kue_mbuf);
+ c->kue_mbuf = NULL;
+ }
if (err)
ifp->if_oerrors++;
@@ -1002,13 +1004,17 @@ Static void kue_watchdog(ifp)
struct ifnet *ifp;
{
struct kue_softc *sc;
+ struct kue_chain *c;
+ usbd_status stat;
sc = ifp->if_softc;
ifp->if_oerrors++;
printf("kue%d: watchdog timeout\n", sc->kue_unit);
- kue_init(sc);
+ c = &sc->kue_cdata.kue_tx_chain[0];
+ usbd_get_xfer_status(c->kue_xfer, NULL, NULL, NULL, &stat);
+ kue_txeof(c->kue_xfer, c, stat);
if (ifp->if_snd.ifq_head != NULL)
kue_start(ifp);
OpenPOWER on IntegriCloud