diff options
Diffstat (limited to 'drivers/usb/host/ehci-sched.c')
| -rw-r--r-- | drivers/usb/host/ehci-sched.c | 15 | 
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c index 2e829fae648..56a32033adb 100644 --- a/drivers/usb/host/ehci-sched.c +++ b/drivers/usb/host/ehci-sched.c @@ -1479,10 +1479,15 @@ iso_stream_schedule (  		/* NOTE:  assumes URB_ISO_ASAP, to limit complexity/bugs */ -		/* find a uframe slot with enough bandwidth */ -		next = start + period; -		for (; start < next; start++) { - +		/* find a uframe slot with enough bandwidth. +		 * Early uframes are more precious because full-speed +		 * iso IN transfers can't use late uframes, +		 * and therefore they should be allocated last. +		 */ +		next = start; +		start += period; +		do { +			start--;  			/* check schedule: enough space? */  			if (stream->highspeed) {  				if (itd_slot_ok(ehci, mod, start, @@ -1495,7 +1500,7 @@ iso_stream_schedule (  						start, sched, period))  					break;  			} -		} +		} while (start > next);  		/* no room in the schedule */  		if (start == next) {  |