Re: [PATCH] media: vb2-dc: skip CPU sync in map/unmap dma_buf

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Hans, Lucas,

On Fri, May 3, 2019 at 9:38 PM Hans Verkuil <hverkuil@xxxxxxxxx> wrote:
>
> Hi Lucas,
>
> As you mentioned there hasn't been any further review comments, so
> it is fair not to postpone this.
>

Sorry for being late to the party. I didn't notice this patch before.
(Perhaps it could be worth adding me as a reviewer to the MAINTAINERS
entries for these parts of the media subsystem?)

> However, I have one new review comment myself that I would like to
> see addressed in a v2 before I merge this for 5.3:
>
> On 2/28/19 8:19 AM, Lucas Stach wrote:
> > This is rougly equivalent to ca0e68e21aae (drm/prime: skip CPU sync
> > in map/unmap dma_buf). The contig memory allocated is already device
> > coherent memory, so there is no point in doing a CPU sync when
> > mapping it to another device. Also most importers currently cache
> > the mapping so the CPU sync would only happen on the first import.
> > With that in mind we are better off with not pretending to do a
> > cache synchronization at all.
> >
> > This gets rid of a lot of CPU overhead in uses where those dma-bufs
> > are regularily imported and detached again, like Weston is currently
> > doing in the DRM compositor.
> >
> > Signed-off-by: Lucas Stach <l.stach@xxxxxxxxxxxxxx>
> > ---
> >  drivers/media/common/videobuf2/videobuf2-dma-contig.c | 8 ++++----
> >  1 file changed, 4 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> > index aff0ab7bf83d..d38f097c14ae 100644
> > --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> > +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> > @@ -273,8 +273,8 @@ static void vb2_dc_dmabuf_ops_detach(struct dma_buf *dbuf,
> >
> >       /* release the scatterlist cache */
> >       if (attach->dma_dir != DMA_NONE)
> > -             dma_unmap_sg(db_attach->dev, sgt->sgl, sgt->orig_nents,
> > -                     attach->dma_dir);
> > +             dma_unmap_sg_attrs(db_attach->dev, sgt->sgl, sgt->orig_nents,
> > +                     attach->dma_dir, DMA_ATTR_SKIP_CPU_SYNC);
>
> Please add comments here...
>
> >       sg_free_table(sgt);
> >       kfree(attach);
> >       db_attach->priv = NULL;
> > @@ -305,8 +305,8 @@ static struct sg_table *vb2_dc_dmabuf_ops_map(
> >       }
> >
> >       /* mapping to the client with new direction */
> > -     sgt->nents = dma_map_sg(db_attach->dev, sgt->sgl, sgt->orig_nents,
> > -                             dma_dir);
> > +     sgt->nents = dma_map_sg_attrs(db_attach->dev, sgt->sgl, sgt->orig_nents,
> > +                             dma_dir, DMA_ATTR_SKIP_CPU_SYNC);
>
> ... and here to explain why you can skip the cpu sync. The comment in ops_detach
> can refer to the comment in ops_map, so there is no need to give the full
> explanation in two places.
>
> It is not obvious that you can skip the CPU sync, so an explanation is helpful.

The change makes sense indeed, thanks. With Hans' suggestion addressed:

Reviewed-by: Tomasz Figa <tfiga@xxxxxxxxxxxx>

In the bigger perspective, the DMA-buf and DMA API "map" semantics are
kind of confusing themselves, because they imply "sync" by default. I
wonder what it would take to just completely split "sync" from "map"
in both APIs. It's even worse with DMA-buf, because you cannot ask
dma_buf_map_attachment() not to skip the sync for you, nor you cannot
sync again without unmapping and mapping again...

Best regards,
Tomasz



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux