peterdelevoryas / rpms / qemu

Forked from rpms/qemu 2 years ago
Clone

Blame 0174-uhci-Don-t-queue-up-packets-after-one-with-the-SPD-f.patch

5544c1
From 48dbbecb0b010ff1c6a64a3a18a7272cce314bf8 Mon Sep 17 00:00:00 2001
Hans de Goede 93b7e3
From: Hans de Goede <hdegoede@redhat.com>
5544c1
Date: Wed, 12 Sep 2012 15:08:40 +0200
5544c1
Subject: [PATCH] uhci: Don't queue up packets after one with the SPD flag set
Hans de Goede 93b7e3
Hans de Goede 93b7e3
Don't queue up packets after a packet with the SPD (short packet detect)
Hans de Goede 93b7e3
flag set. Since we won't know if the packet will actually be short until it
Hans de Goede 93b7e3
has completed, and if it is short we should stop the queue.
Hans de Goede 93b7e3
Hans de Goede 93b7e3
This fixes a miniature photoframe emulating a USB cdrom with the windows
Hans de Goede 93b7e3
software for it not working.
Hans de Goede 93b7e3
Hans de Goede 93b7e3
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
5544c1
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
5544c1
(cherry picked from commit 72a04d0c178f01908d74539230d9de64ffc6da19)
5544c1
5544c1
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Hans de Goede 93b7e3
---
Hans de Goede 93b7e3
 hw/usb/hcd-uhci.c | 5 ++++-
Hans de Goede 93b7e3
 1 file changed, 4 insertions(+), 1 deletion(-)
Hans de Goede 93b7e3
Hans de Goede 93b7e3
diff --git a/hw/usb/hcd-uhci.c b/hw/usb/hcd-uhci.c
Hans de Goede 93b7e3
index c7c8786..cdc8bc3 100644
Hans de Goede 93b7e3
--- a/hw/usb/hcd-uhci.c
Hans de Goede 93b7e3
+++ b/hw/usb/hcd-uhci.c
Hans de Goede 93b7e3
@@ -1000,6 +1000,9 @@ static void uhci_fill_queue(UHCIState *s, UHCI_TD *td)
Hans de Goede 93b7e3
         }
Hans de Goede 93b7e3
         assert(ret == TD_RESULT_ASYNC_START);
Hans de Goede 93b7e3
         assert(int_mask == 0);
Hans de Goede 93b7e3
+        if (ptd.ctrl & TD_CTRL_SPD) {
Hans de Goede 93b7e3
+            break;
Hans de Goede 93b7e3
+        }
Hans de Goede 93b7e3
         plink = ptd.link;
Hans de Goede 93b7e3
     }
Hans de Goede 93b7e3
 }
Hans de Goede 93b7e3
@@ -1097,7 +1100,7 @@ static void uhci_process_frame(UHCIState *s)
Hans de Goede 93b7e3
 
Hans de Goede 93b7e3
         case TD_RESULT_ASYNC_START:
Hans de Goede 93b7e3
             trace_usb_uhci_td_async(curr_qh & ~0xf, link & ~0xf);
Hans de Goede 93b7e3
-            if (is_valid(td.link)) {
Hans de Goede 93b7e3
+            if (is_valid(td.link) && !(td.ctrl & TD_CTRL_SPD)) {
Hans de Goede 93b7e3
                 uhci_fill_queue(s, &td);
Hans de Goede 93b7e3
             }
Hans de Goede 93b7e3
             link = curr_qh ? qh.link : td.link;
Hans de Goede 93b7e3
-- 
5544c1
1.7.12.1
Hans de Goede 93b7e3