Re: How to resolve an issue in swiotlb environment?

Alan Stern
2019-06-12T14:45:31Z

On Wed, 12 Jun 2019, Christoph Hellwig wrote:

> On Wed, Jun 12, 2019 at 01:46:06PM +0200, Oliver Neukum wrote:
> > > Thay is someething the virt_boundary prevents. But could still give
> > > you something like:
> > >
> > > 1536 4096 4096 1024
> > >
> > > or
> > > 1536 16384 8192 4096 16384 512
> >
> > That would kill the driver, if maxpacket were 1024.
> >
> > USB has really two kinds of requirements
> >
> > 1. What comes from the protocol
> > 2. What comes from the HCD
> >
> > The protocol wants just multiples of maxpacket. XHCI can satisfy
> > that in arbitrary scatter/gather. Other HCs cannot.
>
> We have no real way to enforce that for the other HCs unfortunately.
> I can't really think of any better way to handle their limitations
> except for setting max_segments to 1 or bounce buffering.

Would it be okay to rely on the assumption that USB block devices never
have block size < 512? (We could even add code to the driver to
enforce this, although refusing to handle such devices at all might be
worse than getting an occasional error.)

As I mentioned before, the only HCD that sometimes ends up with
maxpacket = 1024 but is unable to do full SG is vhci-hcd, and that one
shouldn't be too hard to fix.

Alan Stern