|
@@ -434,7 +434,13 @@ static void musb_advance_schedule(struct musb *musb, struct urb *urb,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (qh != NULL && qh->is_ready) {
|
|
|
+ /*
|
|
|
+ * The pipe must be broken if current urb->status is set, so don't
|
|
|
+ * start next urb.
|
|
|
+ * TODO: to minimize the risk of regression, only check urb->status
|
|
|
+ * for RX, until we have a test case to understand the behavior of TX.
|
|
|
+ */
|
|
|
+ if ((!status || !is_in) && qh && qh->is_ready) {
|
|
|
dev_dbg(musb->controller, "... next ep%d %cX urb %p\n",
|
|
|
hw_ep->epnum, is_in ? 'R' : 'T', next_urb(qh));
|
|
|
musb_start_urb(musb, is_in, qh);
|