Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 077f5f1c authored by Alan Stern's avatar Alan Stern Committed by Greg Kroah-Hartman
Browse files

USB: EHCI: fix regression related to qh_refresh()



This patch adds some code that inadvertently got left out of commit
c1fdb68e (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: default avatarAlan Stern <stern@rowland.harvard.edu>
Reported-and-tested-by: default avatarOleksij Rempel <linux@rempel-privat.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent e2e2f0ea
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -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,10 +657,11 @@ 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 */
	--ehci->intr_count;