On Sat, Aug 21, 2010 at 07:43:18AM +0000, Jacob Meuser wrote:
> 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;
err = USBD_TIMEOUT?
.... Ken
> + goto ret;
> }
> if (!(v & EHCI_PS_PE)) {
> /* Not a high speed device, give up ownership.*/