Hi Ricky, On Mon, Dec 26, 2016 at 03:58:07PM +0800, Ricky Liang wrote: > Hi Laurent, > > On Fri, Dec 16, 2016 at 9:24 AM, Laurent Pinchart > <laurent.pinchart+renesas@xxxxxxxxxxxxxxxx> wrote: > > From: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx> > > > > The desirable DMA attributes are not generic for all devices using > > Videobuf2 contiguous DMA ops. Let the drivers decide. > > > > This change also results in MMAP buffers always having an sg_table > > (dma_sgt field). > > > > Also arrange the header files alphabetically. > > > > As a result, also the DMA-BUF exporter must provide ops for synchronising > > the cache. This adds begin_cpu_access and end_cpu_access ops to > > vb2_dc_dmabuf_ops. > > > > Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx> > > --- > > drivers/media/v4l2-core/videobuf2-dma-contig.c | 66 ++++++++++++++++++++++---- > > 1 file changed, 56 insertions(+), 10 deletions(-) > > > > diff --git a/drivers/media/v4l2-core/videobuf2-dma-contig.c b/drivers/media/v4l2-core/videobuf2-dma-contig.c > > index d503647ea522..a0e88ad93f07 100644 > > --- a/drivers/media/v4l2-core/videobuf2-dma-contig.c > > +++ b/drivers/media/v4l2-core/videobuf2-dma-contig.c > > @@ -11,11 +11,11 @@ > > */ > > > > #include <linux/dma-buf.h> > > +#include <linux/dma-mapping.h> > > #include <linux/module.h> > > #include <linux/scatterlist.h> > > #include <linux/sched.h> > > #include <linux/slab.h> > > -#include <linux/dma-mapping.h> > > > > #include <media/videobuf2-v4l2.h> > > #include <media/videobuf2-dma-contig.h> > > @@ -115,8 +115,11 @@ static void vb2_dc_prepare(void *buf_priv) > > struct vb2_dc_buf *buf = buf_priv; > > struct sg_table *sgt = buf->dma_sgt; > > > > - /* DMABUF exporter will flush the cache for us */ > > - if (!buf->vec) > > + /* > > + * DMABUF exporter will flush the cache for us; only USERPTR > > + * and MMAP buffers with non-coherent memory will be flushed. > > + */ > > + if (!(buf->attrs & DMA_ATTR_NON_CONSISTENT)) > > Should here be "if (!buf->vec || !(buf->attrs & DMA_ATTR_NON_CONSISTENT))" ? The patch was originally using struct dma_attrs and I believe rebasing changed how it it works. Thank you for pointing that out. Using buf->vec for the purpose alone is not enough since also MMAP buffers may require cache synchronisation from this patch onwards. -- Kind regards, Sakari Ailus e-mail: sakari.ailus@xxxxxx XMPP: sailus@xxxxxxxxxxxxxx