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