USB: UHCI: accept very late isochronous URBs
Commit24f531371d
(USB: EHCI: accept very late isochronous URBs) changed the isochronous API provided by ehci-hcd. URBs submitted too late, so that the time slots for all their packets have already expired, are no longer rejected outright. Instead the submission is accepted, and the URB completes normally with a -EXDEV error for each packet. This is what client drivers expect. This patch implements the same policy in uhci-hcd. It should be applied to all kernels containing commitc44b225077
(UHCI: implement new semantics for URB_ISO_ASAP). Signed-off-by: Alan Stern <stern@rowland.harvard.edu> CC: <stable@vger.kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
8937669fd6
commit
bef073b067
1 changed files with 8 additions and 4 deletions
|
@ -1303,7 +1303,7 @@ static int uhci_submit_isochronous(struct uhci_hcd *uhci, struct urb *urb,
|
|||
}
|
||||
|
||||
/* Fell behind? */
|
||||
if (uhci_frame_before_eq(frame, next)) {
|
||||
if (!uhci_frame_before_eq(next, frame)) {
|
||||
|
||||
/* USB_ISO_ASAP: Round up to the first available slot */
|
||||
if (urb->transfer_flags & URB_ISO_ASAP)
|
||||
|
@ -1311,13 +1311,17 @@ static int uhci_submit_isochronous(struct uhci_hcd *uhci, struct urb *urb,
|
|||
-qh->period;
|
||||
|
||||
/*
|
||||
* Not ASAP: Use the next slot in the stream. If
|
||||
* the entire URB falls before the threshold, fail.
|
||||
* Not ASAP: Use the next slot in the stream,
|
||||
* no matter what.
|
||||
*/
|
||||
else if (!uhci_frame_before_eq(next,
|
||||
frame + (urb->number_of_packets - 1) *
|
||||
qh->period))
|
||||
return -EXDEV;
|
||||
dev_dbg(uhci_dev(uhci), "iso underrun %p (%u+%u < %u)\n",
|
||||
urb, frame,
|
||||
(urb->number_of_packets - 1) *
|
||||
qh->period,
|
||||
next);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue