On Tue, 7 Aug 2012, Tomas Sokorai wrote: > On Tue, Aug 7, 2012 at 3:42 PM, Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> wrote: > > > > I don't have time today to look further into this, but I'll get back to > > you later. > > No hurries, in fact I was gathering a bit more info about this behavior. > I dumped the ed_rm_list when it is hung, and we have only one element > that's unkillable: > > [ 1108.841482] ohci_hcd 0000:00:04.0: ed_rm_list, ed ffff8800c781f140 > state 0x1 type bulk; next ed 00000000 > [ 1108.841489] ohci_hcd 0000:00:04.0: info 08405103 MAX=64 DQ SKIP > EP=2-IN DEV=3 > [ 1108.841494] ohci_hcd 0000:00:04.0: tds: head c78261e0 DATA0 tail > c78261e0 (not listing) Yep; that's undoubtedly the one your program is trying to kill. > Also, there's only one non-empty ed_rm_list "pass" after the > finish_unlinks between SR intr disables, when not hung. As it should be. So the next step is to see what's happening inside finish_unlinks(). The function is a big loop over the entries in the ed_rm_list, but we're considered just with the first part of the loop. "last" is initially set to &ohci->ed_rm_list, and about line 945 we have: *last = ed->ed_next; If everything were working right, ed->ed_next would be NULL (no other ED's on the list). So either ed->ed_next points back to ed itself or else this line doesn't get executed at all. The only way for it not be executed is if the "skip_ed" case occurs. Therefore your next task is to determine what's going on. Does the tick_before() test succeed? Does we follow the "goto skip_ed"? Or is the list pointer messed up? Alan Stern -- 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