diff options
author | Gerhard Roth <gerhard@cvs.openbsd.org> | 2017-10-23 15:23:14 +0000 |
---|---|---|
committer | Gerhard Roth <gerhard@cvs.openbsd.org> | 2017-10-23 15:23:14 +0000 |
commit | 1628e336922f9b2f725ef143c7f0ac10ce1bf9f2 (patch) | |
tree | 98e50d27164535d6871891ecefa09fe47340c303 /sys/dev/usb | |
parent | 13bc0e3aaa2327b63c68fe9beeb031045c0f2396 (diff) |
Even if a USB transfer fails, call umb_start() so that processing
of the if_snd queue doesn't stall.
ok stsp@
Diffstat (limited to 'sys/dev/usb')
-rw-r--r-- | sys/dev/usb/if_umb.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/sys/dev/usb/if_umb.c b/sys/dev/usb/if_umb.c index b9d69d9699e..b2571c969df 100644 --- a/sys/dev/usb/if_umb.c +++ b/sys/dev/usb/if_umb.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_umb.c,v 1.16 2017/10/20 09:35:09 mpi Exp $ */ +/* $OpenBSD: if_umb.c,v 1.17 2017/10/23 15:23:13 gerhard Exp $ */ /* * Copyright (c) 2016 genua mbH @@ -896,7 +896,7 @@ umb_watchdog(struct ifnet *ifp) ifp->if_oerrors++; printf("%s: watchdog timeout\n", DEVNAM(sc)); - /* XXX FIXME: re-initialize device */ + usbd_abort_pipe(sc->sc_tx_pipe); return; } @@ -1845,10 +1845,9 @@ umb_txeof(struct usbd_xfer *xfer, void *priv, usbd_status status) if (status == USBD_STALLED) usbd_clear_endpoint_stall_async(sc->sc_tx_pipe); } - } else { - if (IFQ_IS_EMPTY(&ifp->if_snd) == 0) - umb_start(ifp); } + if (IFQ_IS_EMPTY(&ifp->if_snd) == 0) + umb_start(ifp); splx(s); } |