From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: stable-review@kernel.org, torvalds@linux-foundation.org,
akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk,
Sarah Sharp <sarah.a.sharp@linux.intel.com>
Subject: [19/44] xhci: Fix cycle bit calculation during stall handling.
Date: Mon, 21 Mar 2011 16:09:59 -0700 [thread overview]
Message-ID: <20110321231052.702711333@clark.kroah.org> (raw)
In-Reply-To: <20110321231105.GA1744@kroah.com>
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Sarah Sharp <sarah.a.sharp@linux.intel.com>
commit 01a1fdb9a7afa5e3c14c9316d6f380732750b4e4 upstream.
When an endpoint stalls, we need to update the xHCI host's internal
dequeue pointer to move it past the stalled transfer. This includes
updating the cycle bit (TRB ownership bit) if we have moved the dequeue
pointer past a link TRB with the toggle cycle bit set.
When we're trying to find the new dequeue segment, find_trb_seg() is
supposed to keep track of whether we've passed any link TRBs with the
toggle cycle bit set. However, this while loop's body
while (cur_seg->trbs > trb ||
&cur_seg->trbs[TRBS_PER_SEGMENT - 1] < trb) {
Will never get executed if the ring only contains one segment.
find_trb_seg() will return immediately, without updating the new cycle
bit. Since find_trb_seg() has no idea where in the segment the TD that
stalled was, make the caller, xhci_find_new_dequeue_state(), check for
this special case and update the cycle bit accordingly.
This patch should be queued to kernels all the way back to 2.6.31.
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Tested-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/usb/host/xhci-ring.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -417,6 +417,20 @@ void xhci_find_new_dequeue_state(struct
state->new_cycle_state = ~(state->new_cycle_state) & 0x1;
next_trb(xhci, ep_ring, &state->new_deq_seg, &state->new_deq_ptr);
+ /*
+ * If there is only one segment in a ring, find_trb_seg()'s while loop
+ * will not run, and it will return before it has a chance to see if it
+ * needs to toggle the cycle bit. It can't tell if the stalled transfer
+ * ended just before the link TRB on a one-segment ring, or if the TD
+ * wrapped around the top of the ring, because it doesn't have the TD in
+ * question. Look for the one-segment case where stalled TRB's address
+ * is greater than the new dequeue pointer address.
+ */
+ if (ep_ring->first_seg == ep_ring->first_seg->next &&
+ state->new_deq_ptr < dev->eps[ep_index].stopped_trb)
+ state->new_cycle_state ^= 0x1;
+ xhci_dbg(xhci, "Cycle state = 0x%x\n", state->new_cycle_state);
+
/* Don't update the ring cycle state for the producer (us). */
xhci_dbg(xhci, "New dequeue segment = %p (virtual)\n",
state->new_deq_seg);
next prev parent reply other threads:[~2011-03-21 23:59 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-21 23:11 [00/44] 2.6.32.34-longterm review Greg KH
2011-03-21 23:09 ` [01/44] hwmon/f71882fg: Set platform drvdata to NULL later Greg KH
2011-03-21 23:09 ` [02/44] mtd: jedec_probe: Change variable name from cfi_p to cfi Greg KH
2011-03-22 1:58 ` [Stable-review] " Ben Hutchings
2011-03-22 22:25 ` Greg KH
2011-03-21 23:09 ` [03/44] mtd: add "platform:" prefix for platform modalias Greg KH
2011-03-21 23:09 ` [04/44] libata: no special completion processing for EH commands Greg KH
2011-03-21 23:09 ` [05/44] MIPS: MTX-1: Make au1000_eth probe all PHY addresses Greg KH
2011-03-21 23:09 ` [06/44] x86/mm: Handle mm_fault_error() in kernel space Greg KH
2011-03-21 23:09 ` [07/44] ftrace: Fix memory leak with function graph and cpu hotplug Greg KH
2011-03-21 23:09 ` [08/44] x86: Fix panic when handling "mem={invalid}" param Greg KH
2011-03-21 23:09 ` [09/44] x86: Emit "mem=nopentium ignored" warning when not supported Greg KH
2011-03-21 23:09 ` [10/44] ahci: AHCI and RAID mode SATA patch for Intel Patsburg DeviceIDs Greg KH
2011-03-21 23:09 ` [11/44] ahci: AHCI mode SATA patch for Intel DH89xxCC DeviceIDs Greg KH
2011-03-21 23:09 ` [12/44] ahci: AHCI mode SATA patch for Intel Patsburg SATA RAID controller Greg KH
2011-03-21 23:09 ` [13/44] RDMA/cma: Fix crash in request handlers Greg KH
2011-03-21 23:09 ` [14/44] IB/cm: Bump reference count on cm_id before invoking callback Greg KH
2011-03-21 23:09 ` [15/44] x86, quirk: Fix SB600 revision check Greg KH
2011-03-21 23:09 ` [16/44] ath9k_hw: Fix incorrect macversion and macrev checks Greg KH
2011-03-21 23:09 ` [17/44] USB: serial/kobil_sct, fix potential tty NULL dereference Greg KH
2011-03-21 23:09 ` [18/44] USB: serial: ch341: add new id Greg KH
2011-03-21 23:09 ` Greg KH [this message]
2011-03-21 23:10 ` [20/44] ALSA: hda - fix digital mic selection in mixer on 92HD8X codecs Greg KH
2011-03-21 23:10 ` [21/44] PCI: remove quirk for pre-production systems Greg KH
2011-03-21 23:10 ` [22/44] PCI: add more checking to ICH region quirks Greg KH
2011-03-21 23:10 ` [23/44] PCI: do not create quirk I/O regions below PCIBIOS_MIN_IO for ICH Greg KH
2011-03-21 23:10 ` [24/44] PCI: sysfs: Fix failure path for addition of "vpd" attribute Greg KH
2011-03-21 23:10 ` [25/44] ALSA: ctxfi - Fix incorrect SPDIF status bit mask Greg KH
2011-03-21 23:10 ` [26/44] ALSA: ctxfi - Fix SPDIF status retrieval Greg KH
2011-03-21 23:10 ` [27/44] ALSA: ctxfi - Clear input settings before initialization Greg KH
2011-03-21 23:10 ` [28/44] SUNRPC: Ensure we always run the tk_callback before tk_action Greg KH
2011-03-21 23:10 ` [29/44] perf: Handle stopped state with tracepoints Greg KH
2011-03-21 23:10 ` [30/44] perf, powerpc: Handle events that raise an exception without overflowing Greg KH
2011-03-21 23:10 ` [31/44] ext3: Always set dx_nodes fake_dirent explicitly Greg KH
2011-03-21 23:10 ` [32/44] call_function_many: fix list delete vs add race Greg KH
2011-03-21 23:10 ` [33/44] call_function_many: add missing ordering Greg KH
2011-03-21 23:10 ` [34/44] x86: Flush TLB if PGD entry is changed in i386 PAE mode Greg KH
2011-03-21 23:10 ` [35/44] isdn: avoid calling tty_ldisc_flush() in atomic context Greg KH
2011-03-21 23:10 ` [36/44] smp_call_function_many: handle concurrent clearing of mask Greg KH
2011-03-21 23:10 ` [37/44] [PARISC] fix per-cpu flag problem in the cpu affinity checkers Greg KH
2011-03-21 23:10 ` [38/44] i2c: Fix typo in instantiating-devices document Greg KH
2011-03-21 23:10 ` [39/44] mmc: sdio: remember new card RCA when redetecting card Greg KH
2011-03-21 23:10 ` [40/44] powerpc/kexec: Fix race in kexec shutdown Greg KH
2011-03-21 23:10 ` [41/44] powerpc/kdump: Fix race in kdump shutdown Greg KH
2011-03-21 23:10 ` [42/44] powerpc: rtas_flash needs to use rtas_data_buf Greg KH
2011-03-21 23:10 ` [43/44] x86, binutils, xen: Fix another wrong size directive Greg KH
2011-03-21 23:10 ` [44/44] hwmon: (sht15) Fix integer overflow in humidity calculation 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=20110321231052.702711333@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=sarah.a.sharp@linux.intel.com \
--cc=stable-review@kernel.org \
--cc=stable@kernel.org \
--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®