Re: [RFC PATCH 5/6] xhci: align the last trb before link if it is easily splittable.

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

 



Hi,

Mathias Nyman <mathias.nyman@xxxxxxxxxxxxxxx> writes:
> TD fragments section 4.11.7.1 in xhci specs have additional requirements
> on how trbs in TDs must be organized.
>
> TD fragments shall not span transfer ring segments and TD fragments must
> be packet aligned. Normally we don't care about TD fragments, on TD is one
> big fragment, but if a TD spans ring segments it will be treated as two
> fragments, and we need to comply with the alignment requirements.
>
> For us this means that the payload data must be packet aligned in the
> last trb before a link trb.
> In most mass storage bulk tranfers we are lucky as the block size aligns
> nicely with packet size, and there are no issues.
> However, usb network adapters using scatterlists can hit this alignment
> issue, and usbtest in kernel triggers this in minutes.
>
> This patch is a partial solution, it solves the easy case when the last
> trb before the link trb contains a packet boundary.
> If that is the case then just split the trb at the boundary.
> If not, then just print a debug message and continue as we have always
> done, hoping for the best
>
> Signed-off-by: Mathias Nyman <mathias.nyman@xxxxxxxxxxxxxxx>
> ---
>  drivers/usb/host/xhci-ring.c | 27 +++++++++++++++++++++++++++
>  1 file changed, 27 insertions(+)
>
> diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
> index d86da81..c7c9521 100644
> --- a/drivers/usb/host/xhci-ring.c
> +++ b/drivers/usb/host/xhci-ring.c
> @@ -3098,6 +3098,27 @@ static u32 xhci_td_remainder(struct xhci_hcd *xhci, int transferred,
>  	return (total_packet_count - ((transferred + trb_buff_len) / maxp));
>  }
>  
> +static int xhci_align_td(struct xhci_hcd *xhci, struct urb *urb, u32 enqd_len,
> +			 u32 *trb_buff_len)
> +{
> +	unsigned int unalign;
> +	unsigned int max_pkt;
> +
> +	max_pkt = usb_endpoint_maxp(&urb->ep->desc); /*FIXME MATTU GET_MAX..? */
                                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^

-- 
balbi

Attachment: signature.asc
Description: PGP signature


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

  Powered by Linux