svn commit: r193318 - head/sys/dev/usb

Andrew Thompson thompsa at FreeBSD.org
Tue Jun 2 17:32:00 UTC 2009


Author: thompsa
Date: Tue Jun  2 17:31:59 2009
New Revision: 193318
URL: http://svn.freebsd.org/changeset/base/193318

Log:
  Reorgansise the logic for tranversing the pipe list.
  
  Submitted by:	Hans Petter Selasky

Modified:
  head/sys/dev/usb/usb_request.c

Modified: head/sys/dev/usb/usb_request.c
==============================================================================
--- head/sys/dev/usb/usb_request.c	Tue Jun  2 17:31:16 2009	(r193317)
+++ head/sys/dev/usb/usb_request.c	Tue Jun  2 17:31:59 2009	(r193318)
@@ -109,11 +109,11 @@ usb2_do_clear_stall_callback(struct usb_
 	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 @@ usb2_do_clear_stall_callback(struct usb_
 
 	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 @@ tr_setup:
 			break;
 		}
 		pipe++;
-		if (--to)
-			goto tr_setup;
-		break;
+		to--;
+		goto tr_setup;
 
 	default:
 		if (xfer->error == USB_ERR_CANCELLED) {


More information about the svn-src-all mailing list