lkml.org 
[lkml]   [2004]   [Nov]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectUSB: fix ohci_complete_add
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. I got to know about this when a customer reported that
a when three USB-serial adapters are connected to a system, they start to
lose interrupts when traffic gets heavy.

--- linux-2.4.28-bk3-ohci/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.000000000 -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;
}
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2005-03-22 14:08    [W:0.044 / U:0.292 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site