Re: xhci_hcd ERROR no room on ep ring, xhci_hcd WARN Event TRB for slot 1 ep 4 with no TDs queued?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Aug 08, 2010 at 12:44:19PM +0200, Sander Eikelenboom wrote:
> Hello Andiry,
> 
> Attached is the syslog output with the DMA error on a kernel with patch3 applied.

What's the base kernel you're patching?  Is it from my master branch, or
are you taking a stock kernel and patching it with Andiry's isoc
patches?  Which driver is loaded for your device?

> BTW, i haven't seen a pull request for xhci and the isoc patches for the 2.6.36 merge window yet ?

Greg has the patches in his queue (he has a quilt patchset, so he
doesn't ask for pull requests).

So the interesting part of your isoc endpoint ring is this:
@c7df5660 c7a2a5d0 00000000 00040b4c 80001424
@c7df5670 c7a2b11c 00000000 00040b4c 80001424
@c7df5680 c7a2bc68 00000000 00040b4c 80001424
@c7df5690 c7a2c7b4 00000000 00040b4c 80001424
@c7df56a0 c7f103d4 00000000 00040b4c 80001425
@c7df56b0 c7f10f20 00000000 00040b4c 80001425
...
ERROR Transfer event TRB DMA ptr not part of current TD
ep 4, skip is not set
isoc ep
ep_ring->deq_seg = ffff88001f7362a0
ep_ring->dequeue = ffff88001f798120
td->last_trb = ffff88001f798120
event_dma = 0xc7df5680, @ffff88001e6eb4b0

The printed dequeue pointer is a virtual pointer, so it's not very
helpful in correlating where the endpoint dequeue pointer is.

Andiry, maybe you can rev the third patch to use xhci_trb_virt_to_dma()?
That way you can see why the xHCI driver claims the event isn't part of
the current TD, when the transfer events on the ring look fairly sane (a
successful event for c7df5660, c7df5670, and c7df5680).

Your log shows some other interesting events on the event ring:

Event Ring:
@c7df3490 c7df5660 00000000 01000000 01058001
@c7df34a0 c7df5670 00000000 01000000 01058001
@c7df34b0 c7df5680 00000000 01000000 01058001
@c7df34c0 00000000 00000000 15000000 00009401
@c7df34d0 c7df5690 00000000 01000000 01058001
@c7df34e0 00000000 00000000 15000000 00009401
@c7df34f0 00000000 00000000 0f000000 01058001
@c7df3500 c7df52a0 00000000 01000000 01058000

This TRB in particular:
@c7df34c0 00000000 00000000 15000000 00009401

The completion code is 0x15, or 21, which is an Event Ring Full Error.
There's a second one on the ring, which is very odd.  If the ring was
full, how could the host manage to fit two events on the event ring?

The xHCI driver currently doesn't handle expanding the event ring, but I
had thought that it wouldn't get 62 events in one interrupt.  I think
there's some deeper issue here.  Maybe my commit to move the hardware
event ring dequeue pointer writes after all events have been handled is
to blame?

Sander, do you have a commit with this short description:
"xhci: Minimize HW event ring dequeue pointer writes."?

The last TRB on the event ring is an isochronous Ring Overrun Event:
@c7df34f0 00000000 00000000 0f000000 01058001

That should be harmless.  It just means the driver didn't queue an
isochronous transfer before the host went to look at the ring.  The
periodic schedule will be started on the next transfer when the doorbell
is rung.  Perhaps since you're using Xen, the computer is rather slow?

Sarah Sharp
--
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


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux