On Thu, Aug 12, David Brownell wrote:

> On Thursday 12 August 2004 4:26 am, Olaf Hering wrote:
> >  On Tue, Jun 15, David Brownell wrote:
> > 
> > > Richard Curnow wrote:
> > > >
> > > >One problem I'm hitting is in EHCI, I was wondering if you had any ideas
> > > >as to what I could start looking at, annotating etc to debug this.  The
> > > >problem seems to be here:
> > > >
> > > >static inline void list_del(struct list_head *entry)
> > > >{
> > > > __list_del(entry->prev, entry->next);      <<<<<======= HERE
> 
> As you may have noticed, there aren't many calls to list_del()
> that relate to QTDs.  I've not made time to investigate this
> problem, but here are two issues that I'm aware of:
> 
>  - It's possible smp_mb() is needed before dropping
>    ehci->lock in ehci_urb_done() ... cache coherency
>    rules relating to spinlocks are unclear to me.
>    (Not documented anywhere I've noticed, either.)

This doesnt help.

>  - In qh_completions() at the end, there's sometimes
>    a call to qh_update() after fault cleanup.  On one
>    embedded platform, I've had a report about a
>    race there, controller reading "old" values for
>    other QH fields and then the "new" hw_token.
> 
>    Fix must involve a delay before updating the
>    token, e.g. "next microframe" or maybe just
>    a small udelay().

This patch cause a fail after 5 minutes, same place, but not a null
pointer.

I wonder, why has the ->dummy ehci_qtd struct no initialized list
pointers? The only place where the pointers can be zero is in
qh_append_tds(). Maybe this place needs a hard memory barrier, wmb() is
maybe not enough on x86_64. I will give it a try.


--- ./drivers/usb/host/ehci-q.c.kaputt  2004-08-31 14:21:51.794068000 +0200
+++ ./drivers/usb/host/ehci-q.c 2004-08-31 16:36:54.219007220 +0200
@@ -386,7 +386,10 @@ halt:
                                end = 0;
                }
                if (end)
+               {
+                       udelay(10);
                        qh_update (ehci, qh, end);
+               }
        }
 
        return count;

-- 
USB is for mice, FireWire is for men!

sUse lINUX ag, nÃRNBERG


-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic Workshop
FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
http://ads.osdn.com/?ad_idP47&alloc_id808&op=click
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to