Merge tag 'drm-misc-next-2020-10-27' of git://anongit.freedesktop.org/drm/drm-misc...
[sfrench/cifs-2.6.git] / drivers / media / common / videobuf2 / videobuf2-dma-contig.c
index 2f3a5996d3fc90a62e01f1e6c62876ace0c75ddb..a7f61ba854405f63fa0a4842a5589d9dab076a68 100644 (file)
@@ -76,9 +76,13 @@ static void *vb2_dc_cookie(void *buf_priv)
 static void *vb2_dc_vaddr(void *buf_priv)
 {
        struct vb2_dc_buf *buf = buf_priv;
+       struct dma_buf_map map;
+       int ret;
 
-       if (!buf->vaddr && buf->db_attach)
-               buf->vaddr = dma_buf_vmap(buf->db_attach->dmabuf);
+       if (!buf->vaddr && buf->db_attach) {
+               ret = dma_buf_vmap(buf->db_attach->dmabuf, &map);
+               buf->vaddr = ret ? NULL : map.vaddr;
+       }
 
        return buf->vaddr;
 }
@@ -344,11 +348,13 @@ vb2_dc_dmabuf_ops_end_cpu_access(struct dma_buf *dbuf,
        return 0;
 }
 
-static void *vb2_dc_dmabuf_ops_vmap(struct dma_buf *dbuf)
+static int vb2_dc_dmabuf_ops_vmap(struct dma_buf *dbuf, struct dma_buf_map *map)
 {
        struct vb2_dc_buf *buf = dbuf->priv;
 
-       return buf->vaddr;
+       dma_buf_map_set_vaddr(map, buf->vaddr);
+
+       return 0;
 }
 
 static int vb2_dc_dmabuf_ops_mmap(struct dma_buf *dbuf,
@@ -619,6 +625,7 @@ static void vb2_dc_unmap_dmabuf(void *mem_priv)
 {
        struct vb2_dc_buf *buf = mem_priv;
        struct sg_table *sgt = buf->dma_sgt;
+       struct dma_buf_map map = DMA_BUF_MAP_INIT_VADDR(buf->vaddr);
 
        if (WARN_ON(!buf->db_attach)) {
                pr_err("trying to unpin a not attached buffer\n");
@@ -631,7 +638,7 @@ static void vb2_dc_unmap_dmabuf(void *mem_priv)
        }
 
        if (buf->vaddr) {
-               dma_buf_vunmap(buf->db_attach->dmabuf, buf->vaddr);
+               dma_buf_vunmap(buf->db_attach->dmabuf, &map);
                buf->vaddr = NULL;
        }
        dma_buf_unmap_attachment(buf->db_attach, sgt, buf->dma_dir);