aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/host/ehci-sched.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/host/ehci-sched.c')
-rw-r--r--drivers/usb/host/ehci-sched.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c
index 1543c838b3d..a7408d88fda 100644
--- a/drivers/usb/host/ehci-sched.c
+++ b/drivers/usb/host/ehci-sched.c
@@ -2287,6 +2287,7 @@ scan_periodic (struct ehci_hcd *ehci)
2287 } 2287 }
2288 clock &= mod - 1; 2288 clock &= mod - 1;
2289 clock_frame = clock >> 3; 2289 clock_frame = clock >> 3;
2290 ++ehci->periodic_stamp;
2290 2291
2291 for (;;) { 2292 for (;;) {
2292 union ehci_shadow q, *q_p; 2293 union ehci_shadow q, *q_p;
@@ -2315,10 +2316,14 @@ restart:
2315 temp.qh = qh_get (q.qh); 2316 temp.qh = qh_get (q.qh);
2316 type = Q_NEXT_TYPE(ehci, q.qh->hw->hw_next); 2317 type = Q_NEXT_TYPE(ehci, q.qh->hw->hw_next);
2317 q = q.qh->qh_next; 2318 q = q.qh->qh_next;
2318 modified = qh_completions (ehci, temp.qh); 2319 if (temp.qh->stamp != ehci->periodic_stamp) {
2319 if (unlikely(list_empty(&temp.qh->qtd_list) || 2320 modified = qh_completions(ehci, temp.qh);
2320 temp.qh->needs_rescan)) 2321 if (!modified)
2321 intr_deschedule (ehci, temp.qh); 2322 temp.qh->stamp = ehci->periodic_stamp;
2323 if (unlikely(list_empty(&temp.qh->qtd_list) ||
2324 temp.qh->needs_rescan))
2325 intr_deschedule(ehci, temp.qh);
2326 }
2322 qh_put (temp.qh); 2327 qh_put (temp.qh);
2323 break; 2328 break;
2324 case Q_TYPE_FSTN: 2329 case Q_TYPE_FSTN:
@@ -2460,6 +2465,7 @@ restart:
2460 if (ehci->clock_frame != clock_frame) { 2465 if (ehci->clock_frame != clock_frame) {
2461 free_cached_lists(ehci); 2466 free_cached_lists(ehci);
2462 ehci->clock_frame = clock_frame; 2467 ehci->clock_frame = clock_frame;
2468 ++ehci->periodic_stamp;
2463 } 2469 }
2464 } else { 2470 } else {
2465 now_uframe++; 2471 now_uframe++;