|
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 |
|