canonical-kernel-sru-team team mailing list archive
-
canonical-kernel-sru-team team
-
Mailing list archive
-
Message #00009
[Fwd: Re: [PATCH 6/6] USB: xhci - fix interval calculation for FS isoc endpoints]
-------- Forwarded Message --------
From: Sarah Sharp <sarah.a.sharp@xxxxxxxxxxxxxxx>
To: Greg Kroah-Hartman <gregkh@xxxxxxx>
Cc: Dmitry Torokhov <dtor@xxxxxxxxxx>, linux-usb@xxxxxxxxxxxxxxx, Matt
Evans <matt@xxxxxxxxxx>, Steve Conklin <sconklin@xxxxxxxxxxxxx>
Subject: Re: [PATCH 6/6] USB: xhci - fix interval calculation for FS
isoc endpoints
Date: Sun, 5 Jun 2011 21:00:52 -0700
Hi Greg,
Looks like I mentioned that this needs to be backported to stable, but
didn't actually Cc stable@xxxxxxxxxx in the commit. I'll send an
updated pull request shortly.
Sarah Sharp
On Thu, Jun 02, 2011 at 06:45:37PM -0700, Sarah Sharp wrote:
> From: Dmitry Torokhov <dtor@xxxxxxxxxx>
>
> Full-speed isoc endpoints specify interval in exponent based form in
> frames, not microframes, so we need to adjust accordingly.
>
> NEC xHCI host controllers will return an error code of 0x11 if a full
> speed isochronous endpoint is added with the Interval field set to
> something less than 3 (2^3 = 8 microframes, or one frame). It is
> impossible for a full speed device to have an interval smaller than one
> frame.
>
> This was always an issue in the xHCI driver, but commit
> dfa49c4ad120a784ef1ff0717168aa79f55a483a "USB: xhci - fix math in
> xhci_get_endpoint_interval()" removed the clamping of the minimum value
> in the Interval field, which revealed this bug.
>
> This needs to be backported to stable kernels back to 2.6.31.
>
> Reported-by: Matt Evans <matt@xxxxxxxxxx>
> Signed-off-by: Dmitry Torokhov <dtor@xxxxxxxxxx>
> 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 26caba4..0f8e1d2 100644
> --- a/drivers/usb/host/xhci-mem.c
> +++ b/drivers/usb/host/xhci-mem.c
> @@ -985,9 +985,19 @@ static unsigned int xhci_parse_exponent_interval(struct usb_device *udev,
> interval = clamp_val(ep->desc.bInterval, 1, 16) - 1;
> if (interval != ep->desc.bInterval - 1)
> dev_warn(&udev->dev,
> - "ep %#x - rounding interval to %d microframes\n",
> + "ep %#x - rounding interval to %d %sframes\n",
> ep->desc.bEndpointAddress,
> - 1 << interval);
> + 1 << interval,
> + udev->speed == USB_SPEED_FULL ? "" : "micro");
> +
> + if (udev->speed == USB_SPEED_FULL) {
> + /*
> + * Full speed isoc endpoints specify interval in frames,
> + * not microframes. We are using microframes everywhere,
> + * so adjust accordingly.
> + */
> + interval += 3; /* 1 frame = 2^3 uframes */
> + }
>
> return interval;
> }
> --
> 1.7.4.1
>
> --
> 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
Attachment:
signature.asc
Description: This is a digitally signed message part