PERFORCE change 162771 for review

Hans Petter Selasky hselasky at FreeBSD.org
Tue May 26 12:11:03 UTC 2009


http://perforce.freebsd.org/chv.cgi?CH=162771

Change 162771 by hselasky at hselasky_laptop001 on 2009/05/26 12:10:17

	
	USB core: Improve clear stall logic.

Affected files ...

.. //depot/projects/usb/src/sys/dev/usb/usb_request.c#17 edit

Differences ...

==== //depot/projects/usb/src/sys/dev/usb/usb_request.c#17 (text+ko) ====

@@ -109,11 +109,11 @@
 	pipe_end = udev->pipes + udev->pipes_max;
 	pipe_first = udev->pipes;
 	to = udev->pipes_max;
-	if (pipe == NULL) {
-		pipe = pipe_first;
-	}
+
 	switch (USB_GET_STATE(xfer)) {
 	case USB_ST_TRANSFERRED:
+		if (pipe == NULL)
+			goto tr_setup;		/* device was unconfigured */
 		if (pipe->edesc &&
 		    pipe->is_stalled) {
 			pipe->toggle_next = 0;
@@ -126,9 +126,10 @@
 
 	case USB_ST_SETUP:
 tr_setup:
-		if (pipe == pipe_end) {
-			pipe = pipe_first;
-		}
+		if (to == 0)
+			break;			/* no pipes - nothing to do */
+		if ((pipe < pipe_first) || (pipe >= pipe_end))
+			pipe = pipe_first;	/* pipe wrapped around */
 		if (pipe->edesc &&
 		    pipe->is_stalled) {
 
@@ -156,9 +157,8 @@
 			break;
 		}
 		pipe++;
-		if (--to)
-			goto tr_setup;
-		break;
+		to--;
+		goto tr_setup;
 
 	default:
 		if (xfer->error == USB_ERR_CANCELLED) {


More information about the p4-projects mailing list