]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 20 Mar 2013 22:24:28 +0000 (15:24 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 20 Mar 2013 22:24:28 +0000 (15:24 -0700)
added patches:
revert-usb-ehci-don-t-check-dma-values-in-qh-overlays.patch

queue-3.4/revert-usb-ehci-don-t-check-dma-values-in-qh-overlays.patch [new file with mode: 0644]
queue-3.4/series [new file with mode: 0644]

diff --git a/queue-3.4/revert-usb-ehci-don-t-check-dma-values-in-qh-overlays.patch b/queue-3.4/revert-usb-ehci-don-t-check-dma-values-in-qh-overlays.patch
new file mode 100644 (file)
index 0000000..d9f0b0e
--- /dev/null
@@ -0,0 +1,55 @@
+From foo@baz Wed Mar 20 14:16:12 PDT 2013
+Date: Wed, 20 Mar 2013 14:16:12 -0700
+To: Greg KH <gregkh@linuxfoundation.org>
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Subject: Revert "USB: EHCI: don't check DMA values in QH overlays"
+
+This reverts commit 0319f9909ce68a7516dfc8d53400e07168d281a8, which is commit
+feca7746d5d9e84b105a613b7f3b6ad00d327372 upstream.
+
+It shouldn't have gone into this stable release.
+
+Cc: Alan Stern <stern@rowland.harvard.edu>
+Cc: Joseph Salisbury <joseph.salisbury@canonical.com>
+Cc: Stephen Thirlwall <sdt@dr.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/host/ehci-q.c |   18 +++++-------------
+ 1 file changed, 5 insertions(+), 13 deletions(-)
+
+--- a/drivers/usb/host/ehci-q.c
++++ b/drivers/usb/host/ehci-q.c
+@@ -135,7 +135,7 @@ qh_refresh (struct ehci_hcd *ehci, struc
+                * qtd is updated in qh_completions(). Update the QH
+                * overlay here.
+                */
+-              if (qh->hw->hw_token & ACTIVE_BIT(ehci)) {
++              if (cpu_to_hc32(ehci, qtd->qtd_dma) == qh->hw->hw_current) {
+                       qh->hw->hw_qtd_next = qtd->hw_next;
+                       qtd = NULL;
+               }
+@@ -459,19 +459,11 @@ qh_completions (struct ehci_hcd *ehci, s
+                       else if (last_status == -EINPROGRESS && !urb->unlinked)
+                               continue;
+-                      /*
+-                       * If this was the active qtd when the qh was unlinked
+-                       * and the overlay's token is active, then the overlay
+-                       * hasn't been written back to the qtd yet so use its
+-                       * token instead of the qtd's.  After the qtd is
+-                       * processed and removed, the overlay won't be valid
+-                       * any more.
+-                       */
+-                      if (state == QH_STATE_IDLE &&
+-                                      qh->qtd_list.next == &qtd->qtd_list &&
+-                                      (hw->hw_token & ACTIVE_BIT(ehci))) {
++                      /* qh unlinked; token in overlay may be most current */
++                      if (state == QH_STATE_IDLE
++                                      && cpu_to_hc32(ehci, qtd->qtd_dma)
++                                              == hw->hw_current) {
+                               token = hc32_to_cpu(ehci, hw->hw_token);
+-                              hw->hw_token &= ~ACTIVE_BIT(ehci);
+                               /* An unlink may leave an incomplete
+                                * async transaction in the TT buffer.
diff --git a/queue-3.4/series b/queue-3.4/series
new file mode 100644 (file)
index 0000000..d7691f3
--- /dev/null
@@ -0,0 +1 @@
+revert-usb-ehci-don-t-check-dma-values-in-qh-overlays.patch