Message ID | 20221020121316.3946-4-christian.koenig@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/3] dma-buf: add dma_coherent flag | expand |
Hi Christian, On 20/10/2022 14:13, Christian König wrote: > When a device is snooping the CPU cache we assume that all importers > must snoop the CPU cache as well. > > Execpt for vmalloc allocations since those implement mmap() imports must > always snoop the cache or we will run into coherency problems. Looks reasonable. For this series: Acked-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Regards, Hans > > Signed-off-by: Christian König <christian.koenig@amd.com> > --- > drivers/media/common/videobuf2/videobuf2-dma-contig.c | 2 ++ > drivers/media/common/videobuf2/videobuf2-dma-sg.c | 2 ++ > drivers/media/common/videobuf2/videobuf2-vmalloc.c | 1 + > 3 files changed, 5 insertions(+) > > diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c > index 555bd40fa472..57433310c55c 100644 > --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c > +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c > @@ -11,6 +11,7 @@ > */ > > #include <linux/dma-buf.h> > +#include <linux/dma-map-ops.h> > #include <linux/module.h> > #include <linux/refcount.h> > #include <linux/scatterlist.h> > @@ -507,6 +508,7 @@ static struct dma_buf *vb2_dc_get_dmabuf(struct vb2_buffer *vb, > exp_info.size = buf->size; > exp_info.flags = flags; > exp_info.priv = buf; > + exp_info.coherent = dev_is_dma_coherent(vb->vb2_queue->dev); > > if (!buf->sgt_base) > buf->sgt_base = vb2_dc_get_base_sgt(buf); > diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c > index 36981a5b5c53..dbdd753e4a39 100644 > --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c > +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c > @@ -10,6 +10,7 @@ > * the Free Software Foundation. > */ > > +#include <linux/dma-map-ops.h> > #include <linux/module.h> > #include <linux/mm.h> > #include <linux/refcount.h> > @@ -522,6 +523,7 @@ static struct dma_buf *vb2_dma_sg_get_dmabuf(struct vb2_buffer *vb, > exp_info.size = buf->size; > exp_info.flags = flags; > exp_info.priv = buf; > + exp_info.coherent = dev_is_dma_coherent(vb->vb2_queue->dev); > > if (WARN_ON(!buf->dma_sgt)) > return NULL; > diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c b/drivers/media/common/videobuf2/videobuf2-vmalloc.c > index 41db707e43a4..0b6874733e86 100644 > --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c > +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c > @@ -341,6 +341,7 @@ static struct dma_buf *vb2_vmalloc_get_dmabuf(struct vb2_buffer *vb, > exp_info.size = buf->size; > exp_info.flags = flags; > exp_info.priv = buf; > + exp_info.coherent = true; > > if (WARN_ON(!buf->vaddr)) > return NULL;
diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c index 555bd40fa472..57433310c55c 100644 --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c @@ -11,6 +11,7 @@ */ #include <linux/dma-buf.h> +#include <linux/dma-map-ops.h> #include <linux/module.h> #include <linux/refcount.h> #include <linux/scatterlist.h> @@ -507,6 +508,7 @@ static struct dma_buf *vb2_dc_get_dmabuf(struct vb2_buffer *vb, exp_info.size = buf->size; exp_info.flags = flags; exp_info.priv = buf; + exp_info.coherent = dev_is_dma_coherent(vb->vb2_queue->dev); if (!buf->sgt_base) buf->sgt_base = vb2_dc_get_base_sgt(buf); diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c index 36981a5b5c53..dbdd753e4a39 100644 --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c @@ -10,6 +10,7 @@ * the Free Software Foundation. */ +#include <linux/dma-map-ops.h> #include <linux/module.h> #include <linux/mm.h> #include <linux/refcount.h> @@ -522,6 +523,7 @@ static struct dma_buf *vb2_dma_sg_get_dmabuf(struct vb2_buffer *vb, exp_info.size = buf->size; exp_info.flags = flags; exp_info.priv = buf; + exp_info.coherent = dev_is_dma_coherent(vb->vb2_queue->dev); if (WARN_ON(!buf->dma_sgt)) return NULL; diff --git a/drivers/media/common/videobuf2/videobuf2-vmalloc.c b/drivers/media/common/videobuf2/videobuf2-vmalloc.c index 41db707e43a4..0b6874733e86 100644 --- a/drivers/media/common/videobuf2/videobuf2-vmalloc.c +++ b/drivers/media/common/videobuf2/videobuf2-vmalloc.c @@ -341,6 +341,7 @@ static struct dma_buf *vb2_vmalloc_get_dmabuf(struct vb2_buffer *vb, exp_info.size = buf->size; exp_info.flags = flags; exp_info.priv = buf; + exp_info.coherent = true; if (WARN_ON(!buf->vaddr)) return NULL;
When a device is snooping the CPU cache we assume that all importers must snoop the CPU cache as well. Execpt for vmalloc allocations since those implement mmap() imports must always snoop the cache or we will run into coherency problems. Signed-off-by: Christian König <christian.koenig@amd.com> --- drivers/media/common/videobuf2/videobuf2-dma-contig.c | 2 ++ drivers/media/common/videobuf2/videobuf2-dma-sg.c | 2 ++ drivers/media/common/videobuf2/videobuf2-vmalloc.c | 1 + 3 files changed, 5 insertions(+)