]> git.baikalelectronics.ru Git - kernel.git/commit
USB: EHCI: accept very late isochronous URBs
authorAlan Stern <stern@rowland.harvard.edu>
Wed, 7 Aug 2013 14:58:05 +0000 (10:58 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 12 Aug 2013 20:45:26 +0000 (13:45 -0700)
commit4a77405f60f97b5b0c3da55fa738b461e246d5fe
treecf8720d58ff2897754e6212db7c2eb898db6ee7f
parentd8cdf0447a4fa614a941194dc269393450daf519
USB: EHCI: accept very late isochronous URBs

Since commits d5932453344f (EHCI: implement new semantics for
URB_ISO_ASAP) and 98f8d5e26b84 (ALSA: USB: adjust for changed 3.8 USB
API) became widely distributed, people have been experiencing problems
with audio transfers.  The slightest underrun causes complete failure,
requiring the audio stream to be restarted.

It turns out that the current isochronous API doesn't handle underruns
in the best way.  The ALSA developers would much rather have transfers
that are submitted too late be accepted and complete in the normal
fashion, rather than being refused outright.

This patch implements the requested approach.  When an isochronous URB
submission is so late that all its scheduled slots have already
expired, a debugging message will be printed in the log and the URB
will be accepted as usual.  Assuming it was submitted by a completion
handler (which is normally the case), it will complete shortly
thereafter with all the usb_iso_packet_descriptor status fields marked
-EXDEV.

This fixes (for ehci-hcd)

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1191603

It should be applied to all kernels that include commit d5932453344f.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Tested-by: Maksim Boyko <maksboyko@yandex.ru>
CC: Clemens Ladisch <clemens@ladisch.de>
CC: <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/ehci-sched.c