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

Reply via email to