~ubuntu-branches/debian/jessie/qemu/jessie

« back to all changes in this revision

Viewing changes to debian/patches/uhci-don-t-queue-up-packets-after-one-with-the-SPD-flag-set.patch

  • Committer: Package Import Robot
  • Author(s): Michael Tokarev
  • Date: 2013-01-14 12:20:29 UTC
  • Revision ID: package-import@ubuntu.com-20130114122029-724bihisy1nchfb7
Tags: 1.1.2+dfsg-5
fix USB regression introduced in 1.1 (Closes: #683983)
uhci-don-t-queue-up-packets-after-one-with-the-SPD-flag-set.patch
Big thanks to Peter Schaefer (https://bugs.launchpad.net/bugs/1033727)
for the help identifying the fix.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
From 5d19515502b3d4e4d0d538c6f84a2e93f0d57928 Mon Sep 17 00:00:00 2001
 
2
From: Hans de Goede <hdegoede@redhat.com>
 
3
Date: Wed, 12 Sep 2012 15:08:40 +0200
 
4
Subject: uhci: Don't queue up packets after one with the SPD flag set
 
5
Bug-Debian: http://bugs.debian.org/683983
 
6
Bug: https://bugs.launchpad.net/bugs/1033727
 
7
X-Git-Url: http://git.qemu.org/?p=qemu.git;a=commitdiff_plain;h=72a04d0c178f01908d74539230d9de64ffc6da19
 
8
Comment: unlike the original patch comment says, it fixes several USB devices
 
9
 
 
10
Don't queue up packets after a packet with the SPD (short packet detect)
 
11
flag set. Since we won't know if the packet will actually be short until it
 
12
has completed, and if it is short we should stop the queue.
 
13
 
 
14
This fixes a miniature photoframe emulating a USB cdrom with the windows
 
15
software for it not working.
 
16
 
 
17
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
 
18
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
 
19
(cherry picked from commit 72a04d0c178f01908d74539230d9de64ffc6da19)
 
20
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
 
21
---
 
22
 hw/usb/hcd-uhci.c |    5 ++++-
 
23
 1 file changed, 4 insertions(+), 1 deletion(-)
 
24
 
 
25
diff --git a/hw/usb/hcd-uhci.c b/hw/usb/hcd-uhci.c
 
26
index a8bb164..766e7ad 100644
 
27
--- a/hw/usb/hcd-uhci.c
 
28
+++ b/hw/usb/hcd-uhci.c
 
29
@@ -986,6 +986,9 @@ static void uhci_fill_queue(UHCIState *s, UHCI_TD *td)
 
30
         }
 
31
         assert(ret == TD_RESULT_ASYNC_START);
 
32
         assert(int_mask == 0);
 
33
+        if (ptd.ctrl & TD_CTRL_SPD) {
 
34
+            break;
 
35
+        }
 
36
         plink = ptd.link;
 
37
     }
 
38
 }
 
39
@@ -1083,7 +1086,7 @@ static void uhci_process_frame(UHCIState *s)
 
40
 
 
41
         case TD_RESULT_ASYNC_START:
 
42
             trace_usb_uhci_td_async(curr_qh & ~0xf, link & ~0xf);
 
43
-            if (is_valid(td.link)) {
 
44
+            if (is_valid(td.link) && !(td.ctrl & TD_CTRL_SPD)) {
 
45
                 uhci_fill_queue(s, &td);
 
46
             }
 
47
             link = curr_qh ? qh.link : td.link;
 
48
-- 
 
49
1.7.10.4
 
50