mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: torvalds@linux-foundation.org, akpm@linux-foundation.org,
	alan@lxorguk.ukuu.org.uk,
	Matthieu Castet <matthieu.castet@parrot.com>,
	Thomas Poussevin <thomas.poussevin@parrot.com>,
	Alan Stern <stern@rowland.harvard.edu>
Subject: [40/53] USB: EHCI: fix HUB TT scheduling issue with iso transfer
Date: Tue, 22 Nov 2011 16:23:47 -0800	[thread overview]
Message-ID: <20111123002408.355354370@clark.kroah.org> (raw)
In-Reply-To: <20111123002419.GA8531@kroah.com>

3.0-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Thomas Poussevin <thomas.poussevin@parrot.com>

commit 811c926c538f7e8d3c08b630dd5844efd7e000f6 upstream.

The current TT scheduling doesn't allow to play and then record on a
full-speed device connected to a high speed hub.

The IN iso stream can only start on the first uframe (0-2 for a 165 us)
because of CSPLIT transactions.
For the OUT iso stream there no such restriction. uframe 0-5 are possible.

The idea of this patch is that the first uframe are precious (for IN TT iso
stream) and we should allocate the last uframes first if possible.

For that we reverse the order of uframe allocation (last uframe first).

Here an example :

hid interrupt stream
----------------------------------------------------------------------
uframe                |  0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |
----------------------------------------------------------------------
max_tt_usecs          | 125 | 125 | 125 | 125 | 125 | 125 | 30  |  0  |
----------------------------------------------------------------------
used usecs on a frame | 13  |  0  |  0  |  0  |  0  |  0  |  0  |  0  |
----------------------------------------------------------------------

iso OUT stream
----------------------------------------------------------------------
uframe                |  0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |
----------------------------------------------------------------------
max_tt_usecs          | 125 | 125 | 125 | 125 | 125 | 125 | 30  |  0  |
----------------------------------------------------------------------
used usecs on a frame | 13  | 125 |  39 |  0  |  0  |  0  |  0  |  0  |
----------------------------------------------------------------------

There no place for iso IN stream  (uframe 0-2 are used) and we got "cannot
submit datapipe for urb 0, error -28: not enough bandwidth" error.

With the patch this become.

iso OUT stream
----------------------------------------------------------------------
uframe                |  0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |
----------------------------------------------------------------------
max_tt_usecs          | 125 | 125 | 125 | 125 | 125 | 125 | 30  |  0  |
----------------------------------------------------------------------
used usecs on a frame |  13 |  0  |  0  |  0  | 125 |  39 |  0  |  0  |
----------------------------------------------------------------------

iso IN stream
----------------------------------------------------------------------
uframe                |  0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |
----------------------------------------------------------------------
max_tt_usecs          | 125 | 125 | 125 | 125 | 125 | 125 | 30  |  0  |
----------------------------------------------------------------------
used usecs on a frame |  13 |  0  | 125 | 40  | 125 |  39 |  0  |  0  |
----------------------------------------------------------------------

Signed-off-by: Matthieu Castet <matthieu.castet@parrot.com>
Signed-off-by: Thomas Poussevin <thomas.poussevin@parrot.com>
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 drivers/usb/host/ehci-sched.c |   15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

--- a/drivers/usb/host/ehci-sched.c
+++ b/drivers/usb/host/ehci-sched.c
@@ -1483,10 +1483,15 @@ iso_stream_schedule (
 
 		/* NOTE:  assumes URB_ISO_ASAP, to limit complexity/bugs */
 
-		/* find a uframe slot with enough bandwidth */
-		next = start + period;
-		for (; start < next; start++) {
-
+		/* find a uframe slot with enough bandwidth.
+		 * Early uframes are more precious because full-speed
+		 * iso IN transfers can't use late uframes,
+		 * and therefore they should be allocated last.
+		 */
+		next = start;
+		start += period;
+		do {
+			start--;
 			/* check schedule: enough space? */
 			if (stream->highspeed) {
 				if (itd_slot_ok(ehci, mod, start,
@@ -1499,7 +1504,7 @@ iso_stream_schedule (
 						start, sched, period))
 					break;
 			}
-		}
+		} while (start > next);
 
 		/* no room in the schedule */
 		if (start == next) {



  parent reply	other threads:[~2011-11-23  0:41 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-23  0:24 [00/53] 3.0.11-stable review Greg KH
2011-11-23  0:23 ` [01/53] genirq: Fix irqfixup, irqpoll regression Greg KH
2011-11-23  0:23 ` [02/53] [SCSI] fix WARNING: at drivers/scsi/scsi_lib.c:1704 Greg KH
2011-11-23  0:23 ` [03/53] [SCSI] hpsa: Disable ASPM Greg KH
2011-11-23  0:23 ` [04/53] [SCSI] aacraid: controller hangs if kernel uses non-default ASPM policy Greg KH
2011-11-23  0:23 ` [05/53] [media] saa7164: Add support for another HVR2200 hardware revision Greg KH
2011-11-23  0:23 ` [06/53] drm/i915/pch: Save/restore PCH_PORT_HOTPLUG across suspend Greg KH
2011-11-23  0:23 ` [07/53] ARM: 7150/1: Allow kernel unaligned accesses on ARMv6+ Greg KH
2011-11-23  0:23 ` [08/53] Net, libertas: Resolve memory leak in if_spi_host_to_card() Greg KH
2011-11-23  0:23 ` [09/53] rt2x00: Fix sleep-while-atomic bug in powersaving code Greg KH
2011-11-23  0:23 ` [10/53] mac80211: fix NULL dereference in radiotap code Greg KH
2011-11-23  0:23 ` [11/53] mac80211: fix bug in ieee80211_build_probe_req Greg KH
2011-11-23  0:23 ` [12/53] nl80211: fix HT capability attribute validation Greg KH
2011-11-23  0:23 ` [13/53] cfg80211: fix bug on regulatory core exit on access to last_request Greg KH
2011-11-23  0:23 ` [14/53] ip6_tunnel: copy parms.name after register_netdevice Greg KH
2011-11-23  0:23 ` [15/53] PM / driver core: disable devices runtime PM during shutdown Greg KH
2011-11-23  0:23 ` [16/53] pch_phub: Support new device LAPIS Semiconductor ML7831 IOH Greg KH
2011-11-23  0:23 ` [17/53] pch_phub: Fix MAC address writing issue for LAPIS ML7831 Greg KH
2011-11-23  0:23 ` [18/53] pch_uart: Fix hw-flow control issue Greg KH
2011-11-23  0:23 ` [19/53] pch_uart: Fix DMA resource leak issue Greg KH
2011-11-23  0:23 ` [20/53] pch_uart: Support new device LAPIS Semiconductor ML7831 IOH Greg KH
2011-11-23  0:23 ` [21/53] tty: hvc_dcc: Fix duplicate character inputs Greg KH
2011-11-23  0:23 ` [22/53] TTY: ldisc, allow waiting for ldisc arbitrarily long Greg KH
2011-11-23  0:23 ` [23/53] TTY: ldisc, move wait idle to caller Greg KH
2011-11-23  0:23 ` [24/53] TTY: ldisc, wait for ldisc infinitely in hangup Greg KH
2011-11-23  0:23 ` [25/53] nfs: when attempting to open a directory, fall back on normal lookup (try #5) Greg KH
2011-11-23  0:23 ` [26/53] pcie-gadget-spear: Add "platform:" prefix for platform modalias Greg KH
2011-11-23  0:23 ` [27/53] drivers/base/node.c: fix compilation error with older versions of gcc Greg KH
2011-11-23  0:23 ` [28/53] xhci: Set slot and ep0 flags for address command Greg KH
2011-11-23  0:23 ` [29/53] usb, xhci: Clear warm reset change event during init Greg KH
2011-11-23  0:23 ` [30/53] usb, xhci: fix lockdep warning on endpoint timeout Greg KH
2011-11-23  0:23 ` [31/53] USB: XHCI: resume root hubs when the controller resumes Greg KH
2011-11-23  0:23 ` [32/53] USB: option: release new PID for ZTE 3G modem Greg KH
2011-11-23  0:23 ` [33/53] USB: option: add PID of Huawei E173s " Greg KH
2011-11-23  0:23 ` [34/53] USB: serial: pl2303: rm duplicate id Greg KH
2011-11-23  0:23 ` [35/53] USB: cdc-acm: Fix disconnect() vs close() race Greg KH
2011-11-23  0:23 ` [36/53] USB: workaround for bug in old version of GCC Greg KH
2011-11-23  0:23 ` [37/53] USB: ark3116 initialisation fix Greg KH
2011-11-23  0:23 ` [38/53] USB: Fix Corruption issue in USB ftdi driver ftdi_sio.c Greg KH
2011-11-23  0:23 ` [39/53] usb-storage: Accept 8020i-protocol commands longer than 12 bytes Greg KH
2011-11-23  0:23 ` Greg KH [this message]
2011-11-23  0:23 ` [41/53] USB: add quirk for Logitech C600 web cam Greg KH
2011-11-23  0:23 ` [42/53] USB: quirks: adding more quirky webcams to avoid squeaky audio Greg KH
2011-11-23  0:23 ` [43/53] xfs: fix error handling for synchronous writes Greg KH
2011-11-23  0:23 ` [44/53] xfs: fix xfs_mark_inode_dirty during umount Greg KH
2011-11-23  0:23 ` [45/53] xfs: dont serialise direct IO reads on page cache Greg KH
2011-11-23  0:23 ` [46/53] xfs: avoid direct I/O write vs buffered I/O race Greg KH
2011-11-23  0:23 ` [47/53] xfs: Return -EIO when xfs_vn_getattr() failed Greg KH
2011-11-23  0:23 ` [48/53] xfs: fix buffer flushing during unmount Greg KH
2011-11-23  0:23 ` [49/53] xfs: Fix possible memory corruption in xfs_readlink Greg KH
2011-11-23  0:23 ` [50/53] xfs: use doalloc flag in xfs_qm_dqattach_one() Greg KH
2011-11-23  0:23 ` [51/53] xfs: fix ->write_inode return values Greg KH
2011-11-23  0:23 ` [52/53] drm/i915: fix IVB cursor support Greg KH
2011-11-23  0:24 ` [53/53] drm/i915: always set FDI composite sync bit Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20111123002408.355354370@clark.kroah.org \
    --to=gregkh@suse.de \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matthieu.castet@parrot.com \
    --cc=stable@vger.kernel.org \
    --cc=stern@rowland.harvard.edu \
    --cc=thomas.poussevin@parrot.com \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®