returning here without calling usb_transfer_complete() can cause
the usbtask thread to sleep forever, which breaks all usb devices
that use usb_tasks.

-- 
[email protected]
SDF Public Access UNIX System - http://sdf.lonestar.org

Index: ehci.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/ehci.c,v
retrieving revision 1.106
diff -u -p ehci.c
--- ehci.c      26 Nov 2009 12:27:48 -0000      1.106
+++ ehci.c      21 Aug 2010 07:20:03 -0000
@@ -2215,7 +2215,8 @@ ehci_root_ctrl_start(usbd_xfer_handle xfer)
                        if (v & EHCI_PS_PR) {
                                printf("%s: port reset timeout\n",
                                    sc->sc_bus.bdev.dv_xname);
-                               return (USBD_TIMEOUT);
+                               err = USBD_IOERROR;
+                               goto ret;
                        }
                        if (!(v & EHCI_PS_PE)) {
                                /* Not a high speed device, give up ownership.*/

Reply via email to