On Fri, 20 Feb 2004, Stephen Hemminger wrote: > The last problem was a red herring, since the UHCI changes hadn't made it into > 2.6.3. This new problem occurs on 2.6.3-bk plus two of Alan's patches: > 1) Subject: [linux-usb-devel] PATCH: (as186) Remove unneeded and error-provoking > variable in UHCI > 2) Subject: [linux-usb-devel] PATCH: (as194) Simplify locking in UHCI > > Now seeing the following OOPS after 15min to 30min of leaving the irda > driver running. In idle state it just keeps exchanging short packets with > it's neighbor and each transmit involves aborting the outstanding receive > urb's first.
Ah, a new different problem, good. This oops occurred because the URB was dequeued before it had been fully queued. There's already a check on the other side -- the urb_enqueue function will see that the URB has already been dequeued. But the urb_dequeue routine did not check for this. Here is a patch that I believe will fix the problem. Alan Stern P.S.: Have you made any more progress towards simplifying the use of spinlocks in this driver? ===== uhci-hcd.c 1.89 vs edited ===== --- 1.89/drivers/usb/host/uhci-hcd.c Thu Feb 19 18:30:19 2004 +++ edited/drivers/usb/host/uhci-hcd.c Fri Feb 20 15:04:41 2004 @@ -1508,12 +1508,9 @@ struct urb_priv *urbp = urb->hcpriv; list_del_init(&urbp->urb_list); - spin_unlock_irqrestore(&uhci->urb_list_lock, flags); - uhci_destroy_urb_priv (uhci, urb); - - return ret; - } - ret = 0; + uhci_destroy_urb_priv(uhci, urb); + } else + ret = 0; out: spin_unlock_irqrestore(&uhci->urb_list_lock, flags); @@ -1649,10 +1646,12 @@ { struct uhci_hcd *uhci = hcd_to_uhci(hcd); unsigned long flags; - struct urb_priv *urbp = urb->hcpriv; + struct urb_priv *urbp; spin_lock_irqsave(&uhci->urb_list_lock, flags); - + urbp = urb->hcpriv; + if (!urbp) /* URB was never linked! */ + goto done; list_del_init(&urbp->urb_list); uhci_unlink_generic(uhci, urb); @@ -1665,6 +1664,7 @@ list_add_tail(&urbp->urb_list, &uhci->urb_remove_list); spin_unlock(&uhci->urb_remove_list_lock); +done: spin_unlock_irqrestore(&uhci->urb_list_lock, flags); return 0; } ------------------------------------------------------- SF.Net is sponsored by: Speed Start Your Linux Apps Now. Build and deploy apps & Web services for Linux with a free DVD software kit from IBM. Click Now! http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel