RE: [PATCH 1/2] Revert "xhci 1.0: Limit arbitrarily-aligned scatter gather."

From: David Laight
Date: Fri Mar 07 2014 - 10:18:57 EST


From: Mathias Nyman
> This reverts commit 247bf557273dd775505fb9240d2d152f4f20d304.

You need to revert further.
Just don’t set hcd->self.no_sg_constraint ever - since it just
doesn't work.
That will stop the ax88179_178a driver sending fragmented packets.

With the check for aligned non-terminal fragments removed the
code will be as bad as the earlier releases.

> This commit, together with commit 3804fad45411b48233b48003e33a78f290d227c8
> "USBNET: ax88179_178a: enable tso if usb host supports sg dma" were
> origially added to get xHCI 1.0 hosts and usb ethernet ax88179_178a devices
> working together with scatter gather. xHCI 1.0 hosts pose some requirement on how transfer
> buffers are aligned, setting this requirement for 1.0 hosts caused USB 3.0 mass
> storage devices to fail more frequently.
>
> USB 3.0 mass storage devices used to work before 3.14-rc1. Theoretically,
> the TD fragment rules could have caused an occasional disk glitch.
> Now the devices *will* fail, instead of theoretically failing.
> From a user perspective, this looks like a regression; the USB device obviously
> fails on 3.14-rc1, and may sometimes silently fail on prior kernels.
>
> The proper soluition is to implement the TD fragment rules required, but for now
> this patch needs to be reverted to get USB 3.0 mass storage devices working at the
> level they used to.
>
> Signed-off-by: Mathias Nyman <mathias.nyman@xxxxxxxxxxxxxxx>
> Cc: stable <stable@xxxxxxxxxxxxxxx>
> ---
> drivers/usb/host/xhci.c | 14 +++-----------
> 1 file changed, 3 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
> index 6fe577d..924a6cc 100644
> --- a/drivers/usb/host/xhci.c
> +++ b/drivers/usb/host/xhci.c
> @@ -4733,6 +4733,9 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
> /* Accept arbitrarily long scatter-gather lists */
> hcd->self.sg_tablesize = ~0;
>
> + /* support to build packet from discontinuous buffers */
> + hcd->self.no_sg_constraint = 1;
> +

Don't add the above - it only looked at by the usbnet code
and in particular the ax88179_178a driver

> /* XHCI controllers don't stop the ep queue on short packets :| */
> hcd->self.no_stop_on_short = 1;
>
> @@ -4757,14 +4760,6 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
> /* xHCI private pointer was set in xhci_pci_probe for the second
> * registered roothub.
> */
> - xhci = hcd_to_xhci(hcd);
> - /*
> - * Support arbitrarily aligned sg-list entries on hosts without
> - * TD fragment rules (which are currently unsupported).
> - */
> - if (xhci->hci_version < 0x100)
> - hcd->self.no_sg_constraint = 1;
> -
> return 0;
> }
>
> @@ -4793,9 +4788,6 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
> if (xhci->hci_version > 0x96)
> xhci->quirks |= XHCI_SPURIOUS_SUCCESS;
>
> - if (xhci->hci_version < 0x100)
> - hcd->self.no_sg_constraint = 1;
> -
> /* Make sure the HC is halted. */
> retval = xhci_halt(xhci);
> if (retval)
> --
> 1.8.1.2
>
> --
> 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


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/