Re: [PATCH 09/10 v8] xHCI: allocate bigger ring for isochronous endpoint

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

 



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


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

  Powered by Linux