diff -druN linux-3.0.11-libre/drivers/usb/host/ehci-sched.c linux-3.0.12-libre/drivers/usb/host/ehci-sched.c
--- linux-3.0.11-libre/drivers/usb/host/ehci-sched.c	2011-11-26 12:11:26.000000000 -0500
+++ linux-3.0.12-libre/drivers/usb/host/ehci-sched.c	2011-11-28 17:47:43.000000000 -0500
@@ -1483,15 +1483,10 @@
 
 		/* NOTE:  assumes URB_ISO_ASAP, to limit complexity/bugs */
 
-		/* 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--;
+		/* find a uframe slot with enough bandwidth */
+		next = start + period;
+		for (; start < next; start++) {
+
 			/* check schedule: enough space? */
 			if (stream->highspeed) {
 				if (itd_slot_ok(ehci, mod, start,
@@ -1504,7 +1499,7 @@
 						start, sched, period))
 					break;
 			}
-		} while (start > next);
+		}
 
 		/* no room in the schedule */
 		if (start == next) {
diff -druN linux-3.0.11-libre/Makefile linux-3.0.12-libre/Makefile
--- linux-3.0.11-libre/Makefile	2011-11-28 03:55:28.000000000 -0500
+++ linux-3.0.12-libre/Makefile	2011-11-29 05:22:54.000000000 -0500
@@ -1,6 +1,6 @@
 VERSION = 3
 PATCHLEVEL = 0
-SUBLEVEL = 11
+SUBLEVEL = 12
 EXTRAVERSION =-libre
 NAME = Sneaky Weasel
 
