The complete_list element in the urb private data is redundant,
since it is only used when the urb is on the complete list.
And given the state transitions, an urb can't be on the complete list
and any other list (remove, or urb_list).

Therefore just use urb_list to link the complete_list

diff -Nru a/drivers/usb/host/uhci-debug.c b/drivers/usb/host/uhci-debug.c
--- a/drivers/usb/host/uhci-debug.c     Mon Feb  9 13:58:34 2004
+++ b/drivers/usb/host/uhci-debug.c     Mon Feb  9 13:58:34 2004
@@ -402,7 +402,7 @@
                head = &uhci->complete_list;
                tmp = head->next;
                while (tmp != head) {
-                       struct urb_priv *urbp = list_entry(tmp, struct urb_priv, 
complete_list);
+                       struct urb_priv *urbp = list_entry(tmp, struct urb_priv, 
urb_list);
 
                        out += sprintf(out, "  %d: ", ++count);
                        out += uhci_show_urbp(uhci, urbp, out, len - (out - buf));
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:34 2004
+++ b/drivers/usb/host/uhci-hcd.c       Mon Feb  9 13:58:34 2004
@@ -131,7 +131,7 @@
        struct urb_priv *urbp = (struct urb_priv *)urb->hcpriv;
 
        spin_lock(&uhci->complete_list_lock);
-       list_add_tail(&urbp->complete_list, &uhci->complete_list);
+       list_add_tail(&urbp->urb_list, &uhci->complete_list);
        spin_unlock(&uhci->complete_list_lock);
 }
 
@@ -669,7 +669,6 @@
        
        INIT_LIST_HEAD(&urbp->td_list);
        INIT_LIST_HEAD(&urbp->queue_list);
-       INIT_LIST_HEAD(&urbp->complete_list);
        INIT_LIST_HEAD(&urbp->urb_list);
 
        list_add_tail(&urbp->urb_list, &uhci->urb_list);
@@ -720,9 +719,6 @@
        if (!list_empty(&urbp->urb_list))
                warn("uhci_destroy_urb_priv: urb %p still on uhci->urb_list or 
uhci->remove_list", urb);
 
-       if (!list_empty(&urbp->complete_list))
-               warn("uhci_destroy_urb_priv: urb %p still on uhci->complete_list", 
urb);
-
        spin_lock_irqsave(&uhci->td_remove_list_lock, flags);
 
        /* Check to see if the remove list is empty. Set the IOC bit */
@@ -1865,10 +1861,10 @@
        head = &uhci->complete_list;
        tmp = head->next;
        while (tmp != head) {
-               struct urb_priv *urbp = list_entry(tmp, struct urb_priv, 
complete_list);
+               struct urb_priv *urbp = list_entry(tmp, struct urb_priv, urb_list);
                struct urb *urb = urbp->urb;
 
-               list_del_init(&urbp->complete_list);
+               list_del_init(&urbp->urb_list);
                spin_unlock(&uhci->complete_list_lock);
 
                uhci_finish_urb(hcd, urb, regs);
diff -Nru a/drivers/usb/host/uhci-hcd.h b/drivers/usb/host/uhci-hcd.h
--- a/drivers/usb/host/uhci-hcd.h       Mon Feb  9 13:58:34 2004
+++ b/drivers/usb/host/uhci-hcd.h       Mon Feb  9 13:58:34 2004
@@ -390,7 +390,6 @@
        unsigned long fsbrtime;         /* In jiffies */
 
        struct list_head queue_list;    /* P: uhci->frame_list_lock */
-       struct list_head complete_list; /* P: uhci->complete_list_lock */
 };
 
 /*


-------------------------------------------------------
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