|
@@ -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 */
|