USB: EHCI: fix regression related to qh_refresh()
This patch adds some code that inadvertently got left out of commit
c1fdb68e3d
(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>
This commit is contained in:
parent
e2e2f0ea1c
commit
077f5f1c23
|
@ -646,6 +646,10 @@ static void end_unlink_intr(struct ehci_hcd *ehci, struct ehci_qh *qh)
|
|||
/* reschedule QH iff another request is queued */
|
||||
if (!list_empty(&qh->qtd_list) && ehci->rh_state == EHCI_RH_RUNNING) {
|
||||
rc = qh_schedule(ehci, qh);
|
||||
if (rc == 0) {
|
||||
qh_refresh(ehci, qh);
|
||||
qh_link_periodic(ehci, qh);
|
||||
}
|
||||
|
||||
/* An error here likely indicates handshake failure
|
||||
* 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)
|
|||
*
|
||||
* FIXME kill the now-dysfunctional queued urbs
|
||||
*/
|
||||
if (rc != 0)
|
||||
else {
|
||||
ehci_err(ehci, "can't reschedule qh %p, err %d\n",
|
||||
qh, rc);
|
||||
}
|
||||
}
|
||||
|
||||
/* maybe turn off periodic schedule */
|
||||
|
|
Loading…
Reference in New Issue