Merge tag 'for-usb-linus-2014-02-11' of git://git.kernel.org/pub/scm/linux/kernel/git/sarah/xhci into usb-linus
Sarah writes:
xhci: Revert TD fragment hacks.
Hi Greg,
Recently, we found that commit "35773dac5f86 "usb: xhci: Link TRB must not
occur within a USB payload burst" causes a userspace regression. It will
cause larger transfers submitted through usbfs that would have succeeded
on older kernels to be rejected.
Commit 35773dac5f86 was designed to address an issue where an ASIX USB
ethernet device would get wedged when it was connected to a 1.0 xHCI
host. Only this particular ethernet device was impacted, because only the
ax88179_178a driver implemented scatter-gather in 3.12. The xHCI driver
doesn't currently support TD fragment rules, and commit 35773dac5f86 was a
quick hack that partially implemented one of the rules.
This is the third regression this patch has caused. There's yet another
quick hack to work around the issue, but I really want to support TD
fragments properly, rather than hacking around it. It will take us a
kernel release or two to get it implemented, since it is a big
architectural change.
This patchset backs out commit 35773dac5f86, and the two bug fix patches
for it. The first patch limits arbitrarily aligned scatter-gather under
xHCI 1.0 hosts.
As a result of this patchset:
1. usb-storage and uas will still be able to use scatter-gather, since
they submit max packet sized aligned transfers.
2. usbfs will behave exactly as before, no more userspace regressions.
3. The ax88179_178a driver works fine without scatter-gather (Mark Lord
confirms this).
Users of the ASIX chipset may still see occasional packet loss on 1.0 xHCI
hosts, if the xHCI driver needs to split a TRB across 64-KB boundaries,
and a link TRB happens to fall between those two TRBs. I expect this
corner case to be infrequent.
Sarah Sharp