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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html