On Wed, 2010-04-28 at 11:33 -0700, Sarah Sharp wrote: > On Thu, Apr 29, 2010 at 02:51:50AM +0800, Andiry Xu wrote: > > On Tue, 2010-04-27 at 14:59 -0700, Sarah Sharp wrote: > > > What the log shows is that the hardware gave back a transfer completion > > > with a DMA pointer of all zeros (the suspect DMA = 0x0 line). I can't > > > tell what the completion code was, only that the endpoint ring that was > > > indexed in the event had at least one TD on the ring. > > > > > > After the transfer event with the zeroed DMA pointer, the host attempted > > > to give back several TDs. It looks like those events are for the same > > > isoc ring, after the TD at the head of the endpoint list. The ring > > > handler doesn't complete the queued TD when it receives an event that > > > looks erroneous, so the endpoint gets stuck at one TD. > > > > > >From the log, that's possibly what happens. > > > > > > > > Now, I see there's this note in the xHCI spec: > > > > > > "Note: The TRB Pointer field of Missed Service Error Transfer Event may > > > be ‘0’." > > > > > > Section 4.10.3.2 talks about what happens when the host can't transfer > > > the data within the requested service interval, and it says that it may > > > give a transfer event completion code of "Missed Service Error" with a > > > DMA pointer of zero. I wonder if that's what I'm seeing? > > > > > Probably. Ring Overrun and Underrun event also have DMA pointer of zero. > > But it should be processed within the patch. > > Ok, I verified that it is a Missed Service Error that I'm seeing: > > Apr 28 11:12:13 xanatos kernel: [71478.902155] xhci_hcd 0000:05:00.0: Giveback URB ffff880037af6c00, len = 384, status = 0 > Apr 28 11:12:13 xanatos kernel: [71478.906188] xhci_hcd 0000:05:00.0: Giveback URB ffff88007680cc00, len = 42000, status = 0 > Apr 28 11:12:13 xanatos kernel: [71478.907126] xhci_hcd 0000:05:00.0: ERROR Transfer event TRB DMA ptr not part of current TD > Apr 28 11:12:13 xanatos kernel: [71478.907135] xhci_hcd 0000:05:00.0: Event TRB with TRB type ID 32 > Apr 28 11:12:13 xanatos kernel: [71478.907142] xhci_hcd 0000:05:00.0: Offset 0x0 = 0x0 > Apr 28 11:12:13 xanatos kernel: [71478.907148] xhci_hcd 0000:05:00.0: Offset 0x4 = 0x0 > Apr 28 11:12:13 xanatos kernel: [71478.907154] xhci_hcd 0000:05:00.0: Offset 0x8 = 0x17000000 > Apr 28 11:12:13 xanatos kernel: [71478.907160] xhci_hcd 0000:05:00.0: Offset 0xc = 0x1038001 > Apr 28 11:12:13 xanatos kernel: [71478.907166] xhci_hcd 0000:05:00.0: Current td->first_trb (DMA) = 0x1779f580 > Apr 28 11:12:13 xanatos kernel: [71478.907172] trb_in_td - suspect DMA = 0x0 > Apr 28 11:12:13 xanatos kernel: [71478.907178] trb_in_td - start DMA = 0x1779f580, end DMA = 0x1779f580,seg end DMA = 0x1779f7f0 > > The event ring output was garbled, but the next transfer event with a > valid DMA pointer was for the TD at 0x1779f5a0. The transfer ring > looked like this: > > Apr 28 11:12:13 xanatos kernel: [71478.909688] xhci_hcd 0000:05:00.0: @1779f580 53fa47b8 00000000 00040bf4 80001424 > Apr 28 11:12:13 xanatos kernel: [71478.909696] xhci_hcd 0000:05:00.0: @1779f590 53fa53ac 00000000 00040bf4 80001424 > Apr 28 11:12:13 xanatos kernel: [71478.909703] xhci_hcd 0000:05:00.0: @1779f5a0 53fa5fa0 00000000 00040bf4 80001424 > > So the xHC skipped the TD at @1779f590. > > This was with the bug fix for len=0 applied. > So it's the same issue. I will try to fix this. Thanks for the verification. Andiry Xu -- 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