Use list_move_tail to move between remove (or urb_list) and the complete_list.
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 13:58:48 2004 +++ b/drivers/usb/host/uhci-hcd.c Mon Feb 9 13:58:48 2004 @@ -126,12 +126,11 @@ spin_unlock(&uhci->frame_list_lock); } -static inline void uhci_add_complete(struct uhci_hcd *uhci, struct urb *urb) +static inline void uhci_moveto_complete(struct uhci_hcd *uhci, + struct urb_priv *urbp) { - struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv; - spin_lock(&uhci->complete_list_lock); - list_add_tail(&urbp->urb_list, &uhci->complete_list); + list_move_tail(&urbp->urb_list, &uhci->complete_list); spin_unlock(&uhci->complete_list_lock); } @@ -1582,10 +1581,8 @@ usb_pipetype(urb->pipe), urb); } - /* Remove it from uhci->urb_list */ - list_del_init(&urbp->urb_list); - - uhci_add_complete(uhci, urb); + /* Move it from uhci->urb_list to uhci->complete_list */ + uhci_moveto_complete(uhci, urbp); out: spin_unlock(&urb->lock); @@ -1890,11 +1887,9 @@ tmp = tmp->next; - list_del_init(&urbp->urb_list); - urbp->status = urb->status = -ECONNRESET; - uhci_add_complete(uhci, urb); + uhci_moveto_complete(uhci, urbp); } spin_unlock_irqrestore(&uhci->urb_remove_list_lock, flags); } ------------------------------------------------------- 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