Hello, Marcelo:

This is a fix for a ludicrously stupid bug in my code in usb-ohci, which
only affects 2.4, fortunately. The problem should be obvious from the code:
when adding an element to the queue, an URB is lost if the queue contains
two or more elements already. The fix is to implement the queue correctly:
add to the tail and do not corrupt the list.

Fortunately for us, this situation is rare and its impact is limited.
More than two URBs have to complete in the same interrupt for this to
happen, and this typically takes several devices operating simultaneously.
When it happens, there is no memory leak and no oops, just a "lost callback"
sort of situation. So, the priority of this is entirely at your discretion,
but personally I'd like to see this in the next full release (2.4.28).

Yours,
-- Pete

--- linux-2.4.28-rc1/drivers/usb/host/usb-ohci.c        2004-04-14 
17:33:16.000000000 -0700
+++ linux-2.4.28-rc1-usb/drivers/usb/host/usb-ohci.c    2004-11-16 
15:15:44.669540982 -0800
@@ -143,7 +143,7 @@ static void ohci_complete_add(struct ohc
                ohci->complete_head = urb;
                ohci->complete_tail = urb;
        } else {
-               ohci->complete_head->hcpriv = urb;
+               ohci->complete_tail->hcpriv = urb;
                ohci->complete_tail = urb;
        }
 }


-------------------------------------------------------
This SF.Net email is sponsored by: InterSystems CACHE
FREE OODBMS DOWNLOAD - A multidimensional database that combines
robust object and relational technologies, making it a perfect match
for Java, C++,COM, XML, ODBC and JDBC. www.intersystems.com/match8
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to