On Tue, Jul 20, 2010 at 04:49:32PM +0800, Andiry Xu wrote: > >From d5408b33be2e6b0d617214229aeb8f5142273af6 Mon Sep 17 00:00:00 2001 > From: Andiry Xu <andiry.xu@xxxxxxx> > Date: Mon, 19 Jul 2010 15:24:36 +0800 > Subject: [PATCH 09/10] xHCI: allocate bigger ring for isochronous endpoint > > Isochronous endpoint needs a bigger size of transfer ring. Isochronous URB > consists of multiple packets, each packet needs a isoc td to carry, and > there will be multiple trbs inserted to the ring at one time. One segment > is too small for isochronous endpoints, and it will result in > room_on_ring() check failure and the URB is failed to enqueue. > > Allocate bigger ring for isochronous endpoint. 8 segments should be enough. > This will be replaced with dynamic ring expansion in the future. > > Signed-off-by: Andiry Xu <andiry.xu@xxxxxxx> Signed-off-by: Sarah Sharp <sarah.a.sharp@xxxxxxxxxxxxxxx> > --- > drivers/usb/host/xhci-mem.c | 14 ++++++++++++-- > 1 files changed, 12 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c > index 4e51e36..a728c19 100644 > --- a/drivers/usb/host/xhci-mem.c > +++ b/drivers/usb/host/xhci-mem.c > @@ -1111,8 +1111,18 @@ int xhci_endpoint_init(struct xhci_hcd *xhci, > ep_ctx = xhci_get_ep_ctx(xhci, virt_dev->in_ctx, ep_index); > > /* Set up the endpoint ring */ > - virt_dev->eps[ep_index].new_ring = > - xhci_ring_alloc(xhci, 1, true, mem_flags); > + /* > + * Isochronous endpoint ring needs bigger size because one isoc URB > + * carries multiple packets and it will insert multiple tds to the > + * ring. > + * This should be replaced with dynamic ring resizing in the future. > + */ > + if (usb_endpoint_xfer_isoc(&ep->desc)) > + virt_dev->eps[ep_index].new_ring = > + xhci_ring_alloc(xhci, 8, true, mem_flags); > + else > + virt_dev->eps[ep_index].new_ring = > + xhci_ring_alloc(xhci, 1, true, mem_flags); > if (!virt_dev->eps[ep_index].new_ring) { > /* Attempt to use the ring cache */ > if (virt_dev->num_rings_cached == 0) > -- > 1.7.0.4 > > > -- 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