diff options
| author | Alan Stern <stern@rowland.harvard.edu> | 2013-05-29 11:33:52 -0400 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-05-30 08:20:04 -0400 |
| commit | 077f5f1c23b3cf1134c031677497dfb6077e6bdd (patch) | |
| tree | a3f020d8d6479280cdbfccbf931f70079e74304e /drivers/usb/host | |
| parent | e2e2f0ea1c935edcf53feb4c4c8fdb4f86d57dd9 (diff) | |
USB: EHCI: fix regression related to qh_refresh()
This patch adds some code that inadvertently got left out of commit
c1fdb68e3d73741630ca16695cf9176c233be7ed (USB: EHCI: changes related
to qh_refresh()). The calls to qh_refresh() and qh_link_periodic()
were taken out of qh_schedule(); therefore it is necessary to call
these routines manually after calling qh_schedule().
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Reported-and-tested-by: Oleksij Rempel <linux@rempel-privat.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/host')
| -rw-r--r-- | drivers/usb/host/ehci-sched.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c index f3c1028a54fc..f80d0330d548 100644 --- a/drivers/usb/host/ehci-sched.c +++ b/drivers/usb/host/ehci-sched.c | |||
| @@ -646,6 +646,10 @@ static void end_unlink_intr(struct ehci_hcd *ehci, struct ehci_qh *qh) | |||
| 646 | /* reschedule QH iff another request is queued */ | 646 | /* reschedule QH iff another request is queued */ |
| 647 | if (!list_empty(&qh->qtd_list) && ehci->rh_state == EHCI_RH_RUNNING) { | 647 | if (!list_empty(&qh->qtd_list) && ehci->rh_state == EHCI_RH_RUNNING) { |
| 648 | rc = qh_schedule(ehci, qh); | 648 | rc = qh_schedule(ehci, qh); |
| 649 | if (rc == 0) { | ||
| 650 | qh_refresh(ehci, qh); | ||
| 651 | qh_link_periodic(ehci, qh); | ||
| 652 | } | ||
| 649 | 653 | ||
| 650 | /* An error here likely indicates handshake failure | 654 | /* An error here likely indicates handshake failure |
| 651 | * or no space left in the schedule. Neither fault | 655 | * or no space left in the schedule. Neither fault |
| @@ -653,9 +657,10 @@ static void end_unlink_intr(struct ehci_hcd *ehci, struct ehci_qh *qh) | |||
| 653 | * | 657 | * |
| 654 | * FIXME kill the now-dysfunctional queued urbs | 658 | * FIXME kill the now-dysfunctional queued urbs |
| 655 | */ | 659 | */ |
| 656 | if (rc != 0) | 660 | else { |
| 657 | ehci_err(ehci, "can't reschedule qh %p, err %d\n", | 661 | ehci_err(ehci, "can't reschedule qh %p, err %d\n", |
| 658 | qh, rc); | 662 | qh, rc); |
| 663 | } | ||
| 659 | } | 664 | } |
| 660 | 665 | ||
| 661 | /* maybe turn off periodic schedule */ | 666 | /* maybe turn off periodic schedule */ |
