USB: EHCI: stagger frames for interrupt transfers
This patch (as1243) tries to improve ehci-hcd's scheduling of interrupt transfers. Instead of trying to cram all transfers with the same period into the same frame, the new code will spread the transfers out among lots of different frames. This should reduce the periodic schedule load in any one frame -- some host controllers have trouble when there's too much work to do. A more thorough approach would stagger the uframe values as well. But this is enough to make a big improvement. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Tested-by: Dwayne Fontenot <dwayne.fontenot@att.net> Cc: David Brownell <david-b@pacbell.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:

کامیت شده توسط
Greg Kroah-Hartman

والد
be475d9027
کامیت
68335e816a
@@ -760,8 +760,10 @@ static int qh_schedule(struct ehci_hcd *ehci, struct ehci_qh *qh)
|
||||
if (status) {
|
||||
/* "normal" case, uframing flexible except with splits */
|
||||
if (qh->period) {
|
||||
frame = qh->period - 1;
|
||||
do {
|
||||
int i;
|
||||
|
||||
for (i = qh->period; status && i > 0; --i) {
|
||||
frame = ++ehci->random_frame % qh->period;
|
||||
for (uframe = 0; uframe < 8; uframe++) {
|
||||
status = check_intr_schedule (ehci,
|
||||
frame, uframe, qh,
|
||||
@@ -769,7 +771,7 @@ static int qh_schedule(struct ehci_hcd *ehci, struct ehci_qh *qh)
|
||||
if (status == 0)
|
||||
break;
|
||||
}
|
||||
} while (status && frame--);
|
||||
}
|
||||
|
||||
/* qh->period == 0 means every uframe */
|
||||
} else {
|
||||
|
مرجع در شماره جدید
Block a user