Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 May 2009 07:27:18 -0700
From:      Andrew Thompson <thompsa@FreeBSD.org>
To:        Hans Petter Selasky <hselasky@FreeBSD.org>
Cc:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   Re: PERFORCE change 161961 for review
Message-ID:  <20090512142718.GI45375@citylink.fud.org.nz>
In-Reply-To: <200905120639.n4C6drRs026284@repoman.freebsd.org>
References:  <200905120639.n4C6drRs026284@repoman.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, May 12, 2009 at 06:39:53AM +0000, Hans Petter Selasky wrote:
> http://perforce.freebsd.org/chv.cgi?CH=161961
> 
> Change 161961 by hselasky@hselasky_laptop001 on 2009/05/12 06:38:57
> 
> 	
> 	USB CORE:
> 	 - Cancelled error code must be returned in special
> 	 case, else device drivers might end up in infinite loop.
> 	 - The special case code was introduced by a recent commit.
> 	
> 	Bug report by: Andrey <andrey.kosachenko@gmail.com>
> 
> Affected files ...
> 
> .. //depot/projects/usb/src/sys/dev/usb/usb_transfer.c#144 edit
> 
> Differences ...
> 
> ==== //depot/projects/usb/src/sys/dev/usb/usb_transfer.c#144 (text+ko) ====
> 
> @@ -1439,7 +1439,11 @@
>  	/* Check if the device is still alive */
>  	if (info->udev->state < USB_STATE_POWERED) {
>  		USB_BUS_LOCK(bus);
> -		usb2_transfer_done(xfer, USB_ERR_NOT_CONFIGURED);
> +		/*
> +		 * Must return cancelled error code else
> +		 * device drivers can hang.
> +		 */
> +		usb2_transfer_done(xfer, USB_ERR_CANCELLED);
>  		USB_BUS_UNLOCK(bus);
>  		return;
>  	}

I rather think this is a bug in the drivers, they blindly resubmit the
transfer without knowing if the error is restartable.


Andew



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090512142718.GI45375>