From 115df0b6d2233f3e5a0b532de07101412da365d7 Mon Sep 17 00:00:00 2001 From: Andrew Thompson Date: Tue, 2 Jun 2009 17:31:59 +0000 Subject: [PATCH] Reorgansise the logic for tranversing the pipe list. Submitted by: Hans Petter Selasky --- sys/dev/usb/usb_request.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/sys/dev/usb/usb_request.c b/sys/dev/usb/usb_request.c index 3e256550fcee..bdf0a031fcac 100644 --- a/sys/dev/usb/usb_request.c +++ b/sys/dev/usb/usb_request.c @@ -109,11 +109,11 @@ usb2_do_clear_stall_callback(struct usb_xfer *xfer) 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_xfer *xfer) 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 @@ usb2_do_clear_stall_callback(struct usb_xfer *xfer) break; } pipe++; - if (--to) - goto tr_setup; - break; + to--; + goto tr_setup; default: if (xfer->error == USB_ERR_CANCELLED) {