Message ID | 1334668602-8845-1-git-send-email-kraxel@redhat.com |
---|---|
State | New |
Headers | show |
Looks good now: Acked-by: Hans de Goede <hdegoede@redhat.com> On 04/17/2012 03:16 PM, Gerd Hoffmann wrote: > To answer the question in the comment removed by this patch: I think > this was needed because several places in the ehci emulation did not > check the T bit of link entries correctly and thus might have followed > invalid references. See commit 2a5ff735dc1074171a0cbb1dc228d6d6e907f571 > > Signed-off-by: Gerd Hoffmann<kraxel@redhat.com> > --- > hw/usb/hcd-ehci.c | 18 ------------------ > 1 files changed, 0 insertions(+), 18 deletions(-) > > diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c > index 23631a4..10a5b15 100644 > --- a/hw/usb/hcd-ehci.c > +++ b/hw/usb/hcd-ehci.c > @@ -133,7 +133,6 @@ > #define NB_MAXINTRATE 8 // Max rate at which controller issues ints > #define NB_PORTS 6 // Number of downstream ports > #define BUFF_SIZE 5*4096 // Max bytes to transfer per transaction > -#define MAX_ITERATIONS 20 // Max number of QH before we break the loop > #define MAX_QH 100 // Max allowable queue heads in a chain > > /* Internal periodic / asynchronous schedule state machine states > @@ -1931,24 +1930,8 @@ static void ehci_advance_state(EHCIState *ehci, > { > EHCIQueue *q = NULL; > int again; > - int iter = 0; > > do { > - if (ehci_get_state(ehci, async) == EST_FETCHQH) { > - iter++; > - /* if we are roaming a lot of QH without executing a qTD > - * something is wrong with the linked list. TO-DO: why is > - * this hack needed? > - */ > - assert(iter< MAX_ITERATIONS); > -#if 0 > - if (iter> MAX_ITERATIONS) { > - DPRINTF("\n*** advance_state: bailing on MAX ITERATIONS***\n"); > - ehci_set_state(ehci, async, EST_ACTIVE); > - break; > - } > -#endif > - } > switch(ehci_get_state(ehci, async)) { > case EST_WAITLISTHEAD: > again = ehci_state_waitlisthead(ehci, async); > @@ -1984,7 +1967,6 @@ static void ehci_advance_state(EHCIState *ehci, > break; > > case EST_EXECUTE: > - iter = 0; > again = ehci_state_execute(q, async); > break; >
diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c index 23631a4..10a5b15 100644 --- a/hw/usb/hcd-ehci.c +++ b/hw/usb/hcd-ehci.c @@ -133,7 +133,6 @@ #define NB_MAXINTRATE 8 // Max rate at which controller issues ints #define NB_PORTS 6 // Number of downstream ports #define BUFF_SIZE 5*4096 // Max bytes to transfer per transaction -#define MAX_ITERATIONS 20 // Max number of QH before we break the loop #define MAX_QH 100 // Max allowable queue heads in a chain /* Internal periodic / asynchronous schedule state machine states @@ -1931,24 +1930,8 @@ static void ehci_advance_state(EHCIState *ehci, { EHCIQueue *q = NULL; int again; - int iter = 0; do { - if (ehci_get_state(ehci, async) == EST_FETCHQH) { - iter++; - /* if we are roaming a lot of QH without executing a qTD - * something is wrong with the linked list. TO-DO: why is - * this hack needed? - */ - assert(iter < MAX_ITERATIONS); -#if 0 - if (iter > MAX_ITERATIONS) { - DPRINTF("\n*** advance_state: bailing on MAX ITERATIONS***\n"); - ehci_set_state(ehci, async, EST_ACTIVE); - break; - } -#endif - } switch(ehci_get_state(ehci, async)) { case EST_WAITLISTHEAD: again = ehci_state_waitlisthead(ehci, async); @@ -1984,7 +1967,6 @@ static void ehci_advance_state(EHCIState *ehci, break; case EST_EXECUTE: - iter = 0; again = ehci_state_execute(q, async); break;
To answer the question in the comment removed by this patch: I think this was needed because several places in the ehci emulation did not check the T bit of link entries correctly and thus might have followed invalid references. See commit 2a5ff735dc1074171a0cbb1dc228d6d6e907f571 Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- hw/usb/hcd-ehci.c | 18 ------------------ 1 files changed, 0 insertions(+), 18 deletions(-)