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