[PATCH] dma-buf: Fix confusion of dynamic dma-buf vs dynamic attachment

Daniel Vetter daniel at ffwll.ch
Thu Mar 11 14:12:13 UTC 2021


On Fri, Mar 05, 2021 at 11:54:49AM +0100, Christian König wrote:
> Am 05.03.21 um 11:51 schrieb Chris Wilson:
> > Commit c545781e1c55 ("dma-buf: doc polish for pin/unpin") disagrees with
> > the introduction of dynamism in commit: bb42df4662a4 ("dma-buf: add
> > dynamic DMA-buf handling v15") resulting in warning spew on
> > importing dma-buf. Silence the warning from the latter by only pinning
> > the attachment if the attachment rather than the dmabuf is to be
> > dynamic.
> 
> NAK, this is intentionally like this. You need to pin the DMA-buf if it is
> dynamic and the attachment isn't.
> 
> Otherwise the DMA-buf would be able to move even when it has an attachment
> which can't handle that.
> 
> We should rather fix the documentation if that is wrong on this point.

The doc is right, it's for the exporter function for importers. For
non-dynamic importers dma-buf.c code itself does ensure the pinning
happens. So non-dynamic importers really have no business calling
pin/unpin, because they always get a mapping that's put into system memory
and pinned there.

Ofc for driver specific stuff with direct interfaces you can do whatever
you feel like, but probably good to match these semantics.

But looking at the patch, I think this is more about the locking, not the
pin/unpin stuff. Locking rules definitely depend upon what the exporter
requires, and again dma-buf.c should do all the impendence mismatch that's
needed.

So I think we're all good with the doc, but please double-check.
-Daniel

> 
> Regards,
> Christian.
> 
> > 
> > Fixes: bb42df4662a4 ("dma-buf: add dynamic DMA-buf handling v15")
> > Fixes: c545781e1c55 ("dma-buf: doc polish for pin/unpin")
> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> > Cc: Daniel Vetter <daniel.vetter at ffwll.ch>
> > Cc: Christian König <christian.koenig at amd.com>
> > Cc: <stable at vger.kernel.org> # v5.7+
> > ---
> >   drivers/dma-buf/dma-buf.c | 9 +++++----
> >   1 file changed, 5 insertions(+), 4 deletions(-)
> > 
> > diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
> > index f264b70c383e..09f5ae458515 100644
> > --- a/drivers/dma-buf/dma-buf.c
> > +++ b/drivers/dma-buf/dma-buf.c
> > @@ -758,8 +758,8 @@ dma_buf_dynamic_attach(struct dma_buf *dmabuf, struct device *dev,
> >   	    dma_buf_is_dynamic(dmabuf)) {
> >   		struct sg_table *sgt;
> > -		if (dma_buf_is_dynamic(attach->dmabuf)) {
> > -			dma_resv_lock(attach->dmabuf->resv, NULL);
> > +		if (dma_buf_attachment_is_dynamic(attach)) {
> > +			dma_resv_lock(dmabuf->resv, NULL);
> >   			ret = dma_buf_pin(attach);
> >   			if (ret)
> >   				goto err_unlock;
> > @@ -772,8 +772,9 @@ dma_buf_dynamic_attach(struct dma_buf *dmabuf, struct device *dev,
> >   			ret = PTR_ERR(sgt);
> >   			goto err_unpin;
> >   		}
> > -		if (dma_buf_is_dynamic(attach->dmabuf))
> > -			dma_resv_unlock(attach->dmabuf->resv);
> > +		if (dma_buf_attachment_is_dynamic(attach))
> > +			dma_resv_unlock(dmabuf->resv);
> > +
> >   		attach->sgt = sgt;
> >   		attach->dir = DMA_BIDIRECTIONAL;
> >   	}
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the dri-devel mailing list