Re: How to resolve an issue in swiotlb environment?

Alan Stern
2019-06-19T21:05:55Z

On Wed, 19 Jun 2019, shuah wrote:

> I missed a lot of the thread info. and went looking for it and found the
> following summary of the problem:
>
> ==================
> The issue which prompted the commit this thread is about arose in a
> situation where the block layer set up a scatterlist containing buffer
> sizes something like:
>
> 4096 4096 1536 1024
>
> and the maximum packet size was 1024. The situation was a little
> unusual, because it involved vhci-hcd (a virtual HCD). This doesn't
> matter much in normal practice because:
>
> Block devices normally have a block size of 512 bytes or more.
> Smaller values are very uncommon. So scatterlist element sizes
> are always divisible by 512.
>
> xHCI is the only USB host controller type with a maximum packet
> size larger than 512, and xHCI hardware can do full
> scatter-gather so it doesn't care what the buffer sizes are.
>
> So another approach would be to fix vhci-hcd and then trust that the
> problem won't arise again, for the reasons above. We would be okay so
> long as nobody tried to use a USB-SCSI device with a block size of 256
> bytes or less.
> ===================
>
> Out of the summary, the following gives me pause:
>
> "xHCI hardware can do full scatter-gather so it doesn't care what the
> buffer sizes are."
>
> vhci-hcd won't be able to count on hardware being able to do full
> scatter-gather. It has to deal with a variety of hardware with
> varying speeds.

Sure. But you can test whether the server's HCD is able to handle
scatter-gather transfers, and if it is then you can say that the
client-side vhci-hcd is able to handle them as well. Then all you
would have to do is preserve the scatterlist information describing the
transfer when you go between the client and the server.

The point is to make sure that the client-side vhci-hcd doesn't claim
to be _less_ capable than the server-side actual HCD. That's what
leads to the problem described above.

> "We would be okay so long as nobody tried to use a USB-SCSI device with
> a block size of 256 bytes or less."
>
> At least a USB Storage device, I test with says 512 block size. Can we
> count on not seeing a device with block size <= 256 bytes?

Yes, we can. In fact, the SCSI core doesn't handle devices with block
size < 512.

> In any case, I am looking into adding SG support vhci-hci at the moment.
>
> Looks like the following is the repo, I should be working with?
>
> git://git.infradead.org/users/hch/misc.git

It doesn't matter. Your work should end up being independent of
Christoph's, so you can base it on any repo.

Alan Stern