Am 27.05.2013 17:59, schrieb Alan Stern:
On Mon, 27 May 2013, Oleksij Rempel wrote:
Am 27.05.2013 17:24, schrieb Alan Stern:
On Mon, 27 May 2013, Oleksij Rempel wrote:
Hello Alan,
i have regression with this patch:
commit c1fdb68e3d73741630ca16695cf9176c233be7ed
Author: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>
Date: Fri Mar 22 13:30:43 2013 -0400
USB: EHCI: changes related to qh_refresh()
This patch (as1638) makes several changes to the ehci-hcd driver, all
related to the qh_refresh() function. This function must be called
whenever an idle QH gets linked back into either the async or the
periodic schedule.
Change a BUG_ON() in the qh_update routine to a WARN_ON().
Since this code runs in atomic context, a BUG_ON() would
immediately freeze the whole system.
Remove two unneeded calls to qh_refresh(), one when a QH is
initialized and one when a QH becomes idle. Adjust the
adjacent comments accordingly.
all devices seems to work fine except rts5139. It is not working an I
get this warnings:
Are you certain this commit is responsible for the errors? How did you
check?
i did git bisect. But i also compared results with "git reset --hard
..." last working version is "3.9.0-rc4-00046-gc79041a". I can't revert
this commit on current master HEAD.
Hmmm. Maybe we can narrow this down. What happens if you apply only
parts of the commit?
For example, on top of c97041a, try applying only the hunks that change
ehci-sched.c. If that works, try applying also only the last hunk
affecting ehci-q.c. If that works, try applying also the two previous
hunks.
after ehci-sched.c hank i have this problem again:
+++ b/drivers/usb/host/ehci-sched.c
@@ -792,7 +792,6 @@ static int qh_schedule(struct ehci_hcd *ehci, struct
ehci_qh
unsigned frame; /* 0..(qh->period - 1), or
NO_FRAME */
struct ehci_qh_hw *hw = qh->hw;
- qh_refresh(ehci, qh);
hw->hw_next = EHCI_LIST_END(ehci);
frame = qh->start;
@@ -844,8 +843,6 @@ static int qh_schedule(struct ehci_hcd *ehci, struct
ehci_qh
} else
ehci_dbg (ehci, "reused qh %p schedule\n", qh);
- /* stuff into the periodic schedule */
- qh_link_periodic(ehci, qh);
done:
return status;
}
@@ -891,6 +888,12 @@ static int intr_submit (
qh = qh_append_tds(ehci, urb, qtd_list, epnum, &urb->ep->hcpriv);
BUG_ON (qh == NULL);
+ /* stuff into the periodic schedule */
+ if (qh->qh_state == QH_STATE_IDLE) {
+ qh_refresh(ehci, qh);
+ qh_link_periodic(ehci, qh);
+ }
+
/* ... update usbfs periodic stats */
ehci_to_hcd(ehci)->self.bandwidth_int_reqs++;
--
Regards,
Oleksij
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html