From 602d26dc8010ab9bf8d0a62204e322be4071de5e Mon Sep 17 00:00:00 2001 From: Alan Stern Date: Fri, 22 May 2009 17:02:33 -0400 Subject: [PATCH] --- yaml --- r: 151377 b: refs/heads/master c: 68335e816a92411649955a9903b1f30c388ea322 h: refs/heads/master i: 151375: c47ec1ed54d9acf8a162f633e96f8ecbb675b741 v: v3 --- [refs] | 2 +- trunk/drivers/usb/host/ehci-sched.c | 8 +++++--- trunk/drivers/usb/host/ehci.h | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 11c04b24b3be..99ae1573b92c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: be475d9027a07069407a19980d1a4fcb7b18b23c +refs/heads/master: 68335e816a92411649955a9903b1f30c388ea322 diff --git a/trunk/drivers/usb/host/ehci-sched.c b/trunk/drivers/usb/host/ehci-sched.c index 556d0ec0c1f8..9d1babc7ff65 100644 --- a/trunk/drivers/usb/host/ehci-sched.c +++ b/trunk/drivers/usb/host/ehci-sched.c @@ -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 { diff --git a/trunk/drivers/usb/host/ehci.h b/trunk/drivers/usb/host/ehci.h index 6cff195e1a36..90ad3395bb21 100644 --- a/trunk/drivers/usb/host/ehci.h +++ b/trunk/drivers/usb/host/ehci.h @@ -116,6 +116,7 @@ struct ehci_hcd { /* one per controller */ struct timer_list watchdog; unsigned long actions; unsigned stamp; + unsigned random_frame; unsigned long next_statechange; u32 command;