diff options
Diffstat (limited to 'drivers/usb/host/uhci-q.c')
| -rw-r--r-- | drivers/usb/host/uhci-q.c | 12 | 
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/usb/host/uhci-q.c b/drivers/usb/host/uhci-q.c index 041c6ddb695..da6f56d996c 100644 --- a/drivers/usb/host/uhci-q.c +++ b/drivers/usb/host/uhci-q.c @@ -1303,7 +1303,7 @@ static int uhci_submit_isochronous(struct uhci_hcd *uhci, struct urb *urb,  		}  		/* Fell behind? */ -		if (uhci_frame_before_eq(frame, next)) { +		if (!uhci_frame_before_eq(next, frame)) {  			/* USB_ISO_ASAP: Round up to the first available slot */  			if (urb->transfer_flags & URB_ISO_ASAP) @@ -1311,13 +1311,17 @@ static int uhci_submit_isochronous(struct uhci_hcd *uhci, struct urb *urb,  						-qh->period;  			/* -			 * Not ASAP: Use the next slot in the stream.  If -			 * the entire URB falls before the threshold, fail. +			 * Not ASAP: Use the next slot in the stream, +			 * no matter what.  			 */  			else if (!uhci_frame_before_eq(next,  					frame + (urb->number_of_packets - 1) *  						qh->period)) -				return -EXDEV; +				dev_dbg(uhci_dev(uhci), "iso underrun %p (%u+%u < %u)\n", +						urb, frame, +						(urb->number_of_packets - 1) * +							qh->period, +						next);  		}  	}  | 
