diff options
Diffstat (limited to 'drivers/usb/host/ehci-sched.c')
-rw-r--r-- | drivers/usb/host/ehci-sched.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c index 1e391e624c8a..39340ae00ac4 100644 --- a/drivers/usb/host/ehci-sched.c +++ b/drivers/usb/host/ehci-sched.c | |||
@@ -510,6 +510,8 @@ static int disable_periodic (struct ehci_hcd *ehci) | |||
510 | ehci_writel(ehci, cmd, &ehci->regs->command); | 510 | ehci_writel(ehci, cmd, &ehci->regs->command); |
511 | /* posted write ... */ | 511 | /* posted write ... */ |
512 | 512 | ||
513 | free_cached_itd_list(ehci); | ||
514 | |||
513 | ehci->next_uframe = -1; | 515 | ehci->next_uframe = -1; |
514 | return 0; | 516 | return 0; |
515 | } | 517 | } |
@@ -2322,9 +2324,13 @@ restart: | |||
2322 | * No need to check for activity unless the | 2324 | * No need to check for activity unless the |
2323 | * frame is current. | 2325 | * frame is current. |
2324 | */ | 2326 | */ |
2325 | if (frame == clock_frame && live && | 2327 | if (((frame == clock_frame) || |
2326 | (q.sitd->hw_results & | 2328 | (((frame + 1) % ehci->periodic_size) |
2327 | SITD_ACTIVE(ehci))) { | 2329 | == clock_frame)) |
2330 | && live | ||
2331 | && (q.sitd->hw_results & | ||
2332 | SITD_ACTIVE(ehci))) { | ||
2333 | |||
2328 | incomplete = true; | 2334 | incomplete = true; |
2329 | q_p = &q.sitd->sitd_next; | 2335 | q_p = &q.sitd->sitd_next; |
2330 | hw_p = &q.sitd->hw_next; | 2336 | hw_p = &q.sitd->hw_next; |