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