OK, so I added those printks and I think I know what's going on. Apparently, ed_schedule failure triggers 'goto fail' and leaves the ed in some non-IDLE state so that it never gets added to the list indeed. The failing EP 0x88 is 1kB isochronous, btw, so it all looks plausible. Code (v3.18, newer is similar): /* schedule the ed if needed */ if (ed->state == ED_IDLE) { printk(KERN_INFO "ed %p is ED_IDLE\n", ed); retval = ed_schedule (ohci, ed); if (retval < 0) { printk(KERN_INFO "ed %p ed_schedule()=%d\n", ed, retval); usb_hcd_unlink_urb_from_ep(hcd, urb); goto fail; } --- snip --- printk(KERN_INFO "list_add ed %p\n", ed); list_add(&ed->in_use_list, &ohci->eds_in_use); Log (ffff8800dface5b0 is the bad ed): [ 30.115100] got ed ffff8800dface5b0 for ep ffff8800dfbcb1e0 (0x88) urb ffff8800dfbac000 [ 30.116053] list_del ed ffff8800dface4d0 [ 30.127030] ed ffff8800dface5b0 state=0 in_use_list.next= (null) [ 30.133817] ed ffff8800dface5b0 is ED_IDLE [ 30.137914] ohci-pci 0000:00:12.0: ERR -28, interval 1 msecs, load 793 [ 30.144439] ed ffff8800dface5b0 ed_schedule()=-28 [ 30.149143] ATM dev 0: usbatm_submit_urb: urb 0xffff8800dfbac000 submission failed (-28)! [ 30.157318] got ed ffff8800dface5b0 for ep ffff8800dfbcb1e0 (0x88) urb ffff8800dfbac800 [ 30.165313] ed ffff8800dface5b0 state=2 in_use_list.next= (null) [ 30.172119] got ed ffff8800dface5b0 for ep ffff8800dfbcb1e0 (0x88) urb ffff8800dfbac200 [ 30.180116] ed ffff8800dface5b0 state=2 in_use_list.next= (null) [ 30.186905] got ed ffff8800dface5b0 for ep ffff8800dfbcb1e0 (0x88) urb ffff8800dfbac300 [ 30.194900] ed ffff8800dface5b0 state=2 in_use_list.next= (null) [ 30.201708] usb 1-3: [ueagle-atm] (re)booting started [ 30.206785] got ed ffff8800dface4d0 for ep ffff8800dfae5048 (0x00) urb ffff8800dfb69f00 [ 30.214792] ed ffff8800dface4d0 state=0 in_use_list.next=dead000000000100 [ 30.221571] ed ffff8800dface4d0 is ED_IDLE [ 30.225666] list_add ed ffff8800dface4d0 [ 30.230147] got ed ffff8800dface4d0 for ep ffff8800dfae5048 (0x00) urb ffff8800dfb96600 [ 30.231115] list_del ed ffff8800dface4d0 [ 30.242073] ed ffff8800dface4d0 state=0 in_use_list.next=dead000000000100 [ 30.248853] ed ffff8800dface4d0 is ED_IDLE [ 30.252945] list_add ed ffff8800dface4d0 [ 30.279862] got ed ffff8800dface5b0 for ep ffff8800dfbcb1e0 (0x88) urb ffff8800dfbac000 [ 30.287870] ed ffff8800dface5b0 state=2 in_use_list.next= (null) --- snip --- [ 36.405670] usb 1-3: USB disconnect, device number 4 [ 36.410663] ohci-pci 0000:00:12.0: unlink iso ed ffff8800dface5b0 branch 0 [793us.], interval 1 [ 36.419543] ATM dev 0: usbatm_complete: urb 0xffff8800dfbac000 failed (-2)! [ 36.426515] ohci-pci 0000:00:12.0: link iso ed ffff8800dface5b0 branch 0 [793us.], interval 1 [ 36.435056] ohci-pci 0000:00:12.0: unlink iso ed ffff8800dface5b0 branch 0 [793us.], interval 1 [ 36.444550] ATM dev 0: usbatm_complete: urb 0xffff8800dfbac800 failed (-2)! [ 36.451515] ohci-pci 0000:00:12.0: link iso ed ffff8800dface5b0 branch 0 [793us.], interval 1 [ 36.460057] ohci-pci 0000:00:12.0: unlink iso ed ffff8800dface5b0 branch 0 [793us.], interval 1 [ 36.469571] ATM dev 0: usbatm_complete: urb 0xffff8800dfbac200 failed (-2)! [ 36.476540] ohci-pci 0000:00:12.0: link iso ed ffff8800dface5b0 branch 0 [793us.], interval 1 [ 36.485083] ohci-pci 0000:00:12.0: unlink iso ed ffff8800dface5b0 branch 0 [793us.], interval 1 [ 36.494602] ATM dev 0: usbatm_complete: urb 0xffff8800dfbac300 failed (-2)! [ 36.501572] list_del ed ffff8800dface5b0 [ 36.505492] fuck fuck fuck null null null [ 36.508266] usb 1-3: [UEAGLE-ATM] usb_control_msg error -19 [ 36.513872] usb 1-3: [ueagle-atm] ADSL device removed [ 36.518978] freeing ed ffff8800dface4d0 [ 36.522813] freeing ed ffff8800dface620 [ 36.526653] freeing ed ffff8800dface540 [ 36.530486] freeing ed ffff8800dface5b0 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html