On Mon, 9 Feb 2004, Stephen Hemminger wrote: > The following patch fixes the race where a URB is dequeued but it on the > complete list. It moves up uhci->list_lock so it overlaps the remove_list > lock. > > This is the important one, the other 9 are just minor improvements that > reduce code or memory. > > diff -Nru a/drivers/usb/host/uhci-hcd.c b/drivers/usb/host/uhci-hcd.c > --- a/drivers/usb/host/uhci-hcd.c Mon Feb 9 11:42:51 2004 > +++ b/drivers/usb/host/uhci-hcd.c Mon Feb 9 11:42:51 2004 > @@ -1943,12 +1943,12 @@ > > uhci_free_pending_tds(uhci); > > + spin_lock(&uhci->urb_list_lock); > uhci_remove_pending_qhs(uhci); > > uhci_clear_next_interrupt(uhci); > > /* Walk the list of pending URB's to see which ones completed */ > - spin_lock(&uhci->urb_list_lock); > head = &uhci->urb_list; > tmp = head->next; > while (tmp != head) {
Maybe I'm stupid today, but I don't see why moving the spinlock like this will make any difference. In particular, if an urbp has been (or is about to be) freed, how will this prevent remove_pending_qhs from trying to access it? Can you explain what's going on? Alan Stern ------------------------------------------------------- The SF.Net email is sponsored by EclipseCon 2004 Premiere Conference on Open Tools Development and Integration See the breadth of Eclipse activity. February 3-5 in Anaheim, CA. http://www.eclipsecon.org/osdn _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel