Blame 0129-usb-ehci-always-call-ehci_queues_rip_unused-for-peri.patch

Hans de Goede 1b1995
From 320063f7165c5a5f9ddd5a09a4663bc1a81f5bd6 Mon Sep 17 00:00:00 2001
Hans de Goede 1b1995
From: Hans de Goede <hdegoede@redhat.com>
Hans de Goede 1b1995
Date: Fri, 2 Mar 2012 13:52:44 +0100
Hans de Goede 1b1995
Subject: [PATCH 129/140] usb-ehci: always call ehci_queues_rip_unused for
Hans de Goede 1b1995
 period queues
Hans de Goede 1b1995
Hans de Goede 1b1995
Before this patch USB 2 devices with interrupt endpoints were not working
Hans de Goede 1b1995
properly. The problem is that to avoid loops we stop processing as soon
Hans de Goede 1b1995
as we encounter a queue-head (qh) we've already seen since qhs can be linked
Hans de Goede 1b1995
in a circular fashion, this is tracked by the seen flag in our qh struct.
Hans de Goede 1b1995
Hans de Goede 1b1995
The resetting of the seen flag is done from ehci_queues_rip_unused which
Hans de Goede 1b1995
before this patch was only called when executing the statemachine for the
Hans de Goede 1b1995
async schedule.
Hans de Goede 1b1995
Hans de Goede 1b1995
But packets for interrupt endpoints are part of the periodic schedule! So what
Hans de Goede 1b1995
would happen is that when there were no ctrl or bulk packets for a USB 2
Hans de Goede 1b1995
device with an interrupt endpoint, the async schedule would become non
Hans de Goede 1b1995
active, then ehci_queues_rip_unused would no longer get called and when
Hans de Goede 1b1995
processing the qhs for the interrupt endpoints from the periodic schedule
Hans de Goede 1b1995
their seen bit would still be 1 and they would be skipped.
Hans de Goede 1b1995
Hans de Goede 1b1995
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Hans de Goede 1b1995
---
Hans de Goede 1b1995
 hw/usb-ehci.c |    1 +
Hans de Goede 1b1995
 1 file changed, 1 insertion(+)
Hans de Goede 1b1995
Hans de Goede 1b1995
diff --git a/hw/usb-ehci.c b/hw/usb-ehci.c
Hans de Goede 1b1995
index 980cce3..422afc8 100644
Hans de Goede 1b1995
--- a/hw/usb-ehci.c
Hans de Goede 1b1995
+++ b/hw/usb-ehci.c
Hans de Goede 1b1995
@@ -2195,6 +2195,7 @@ static void ehci_advance_periodic_state(EHCIState *ehci)
Hans de Goede 1b1995
         ehci_set_fetch_addr(ehci, async,entry);
Hans de Goede 1b1995
         ehci_set_state(ehci, async, EST_FETCHENTRY);
Hans de Goede 1b1995
         ehci_advance_state(ehci, async);
Hans de Goede 1b1995
+        ehci_queues_rip_unused(ehci, async, 0);
Hans de Goede 1b1995
         break;
Hans de Goede 1b1995
 
Hans de Goede 1b1995
     default:
Hans de Goede 1b1995
-- 
Hans de Goede 1b1995
1.7.9.3
Hans de Goede 1b1995