[PATCH] dma-buf: Fix confusion of dynamic dma-buf vs dynamic attachment
Christian König
christian.koenig at amd.com
Fri Mar 5 10:54:49 UTC 2021
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 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;
> }
More information about the dri-devel
mailing list