Re: Question: partial transfers of DMABUFs

From: Paul Cercueil
Date: Wed Feb 15 2023 - 06:48:07 EST


Hi Maarten,

Le mercredi 15 février 2023 à 12:30 +0100, Maarten Lankhorst a écrit :
> Hey,
>
> On 2023-02-15 11:48, Paul Cercueil wrote:
> > Hi,
> >
> > I am working on adding support for DMABUFs in the IIO subsystem.
> >
> > One thing we want there, is the ability to specify the number of
> > bytes
> > to transfer (while still defaulting to the DMABUF size).
> >
> > Since dma_buf_map_attachment() returns a sg_table, I basically have
> > two
> > options, and I can't decide which one is the best (or the less
> > ugly):
> >
> > - Either I add a new API function similar to
> > dmaengine_prep_slave_sg(),
> > which still takes a scatterlist as argument but also takes the
> > number
> > of bytes as argument;
> >
> > - Or I add a function to duplicate the scatterlist and then shrink
> > it
> > manually, which doesn't sound like a good idea either.
> >
> > What would be the recommended way?
>
> Does this need an api change? If you create a DMA-BUF of size X, it
> has
> to be of size X. You can pad with a dummy page probably if you know
> it
> in advance. But after it has been imported, it cannot change size.

Yes, the sizes are fixed.

> You don´t have to write the entire dma-buf either, so if you want to
> create a 1GB buf and only use the first 4K, that is allowed. The
> contents of  the remainder of the DMA-BUF are undefined. It's up to
> userspace to assign a meaning to it.
>
> I think I'm missing something here that makes the whole question
> m,ake
> more sense.

I want my userspace to be able to specify how much of the DMABUF is to
be read from or written to.

So in my new "dmabuf enqueue" IOCTL that I want to add to IIO, I added
a parameter to specify the number of bytes to transfer (where 0 means
the whole buffer).

The problem I have now, is that the current dmaengine core does not
have a API function that takes a scatterlist (returned by
dma_map_attachment()) and a transfer size in bytes, it will always
transfer the whole scatterlist.

So my two options would be to add a new API function to support
specifying a bytes count, or add a mechanism to duplicate a
scatterlist, so that I can tweak it to the right size.

> ~Maarten

Cheers,
-Paul