Message ID | 20210305105114.26338-1-chris@chris-wilson.co.uk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | dma-buf: Fix confusion of dynamic dma-buf vs dynamic attachment | expand |
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. 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@chris-wilson.co.uk> > Cc: Daniel Vetter <daniel.vetter@ffwll.ch> > Cc: Christian König <christian.koenig@amd.com> > Cc: <stable@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; > }
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@chris-wilson.co.uk> > > Cc: Daniel Vetter <daniel.vetter@ffwll.ch> > > Cc: Christian König <christian.koenig@amd.com> > > Cc: <stable@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; > > } >
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; }
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. 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@chris-wilson.co.uk> Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Cc: Christian König <christian.koenig@amd.com> Cc: <stable@vger.kernel.org> # v5.7+ --- drivers/dma-buf/dma-buf.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)