Merge branches 'fixes' and 'ioremap' into for-linus
[deliverable/linux.git] / drivers / media / v4l2-core / videobuf2-dma-contig.c
index 620c4aa78881844b16484c6cb157944e5c1d077d..94c1e6455d365de7faa1b4b0df14ce279820d5f2 100644 (file)
@@ -299,7 +299,6 @@ static struct sg_table *vb2_dc_dmabuf_ops_map(
        /* stealing dmabuf mutex to serialize map/unmap operations */
        struct mutex *lock = &db_attach->dmabuf->lock;
        struct sg_table *sgt;
-       int ret;
 
        mutex_lock(lock);
 
@@ -318,8 +317,9 @@ static struct sg_table *vb2_dc_dmabuf_ops_map(
        }
 
        /* mapping to the client with new direction */
-       ret = dma_map_sg(db_attach->dev, sgt->sgl, sgt->orig_nents, dma_dir);
-       if (ret <= 0) {
+       sgt->nents = dma_map_sg(db_attach->dev, sgt->sgl, sgt->orig_nents,
+                               dma_dir);
+       if (!sgt->nents) {
                pr_err("failed to map scatterlist\n");
                mutex_unlock(lock);
                return ERR_PTR(-EIO);
@@ -532,9 +532,7 @@ static void vb2_dc_put_userptr(void *buf_priv)
                sg_free_table(sgt);
                kfree(sgt);
        }
-       down_read(&current->mm->mmap_sem);
        vb2_put_vma(buf->vma);
-       up_read(&current->mm->mmap_sem);
        kfree(buf);
 }
 
@@ -618,7 +616,6 @@ static void *vb2_dc_get_userptr(void *alloc_ctx, unsigned long vaddr,
                goto fail_buf;
        }
 
-       down_read(&current->mm->mmap_sem);
        /* current->mm->mmap_sem is taken by videobuf2 core */
        vma = find_vma(current->mm, vaddr);
        if (!vma) {
@@ -645,7 +642,6 @@ static void *vb2_dc_get_userptr(void *alloc_ctx, unsigned long vaddr,
        if (ret) {
                unsigned long pfn;
                if (vb2_dc_get_user_pfn(start, n_pages, vma, &pfn) == 0) {
-                       up_read(&current->mm->mmap_sem);
                        buf->dma_addr = vb2_dc_pfn_to_dma(buf->dev, pfn);
                        buf->size = size;
                        kfree(pages);
@@ -655,7 +651,6 @@ static void *vb2_dc_get_userptr(void *alloc_ctx, unsigned long vaddr,
                pr_err("failed to get user pages\n");
                goto fail_vma;
        }
-       up_read(&current->mm->mmap_sem);
 
        sgt = kzalloc(sizeof(*sgt), GFP_KERNEL);
        if (!sgt) {
@@ -718,12 +713,10 @@ fail_get_user_pages:
                while (n_pages)
                        put_page(pages[--n_pages]);
 
-       down_read(&current->mm->mmap_sem);
 fail_vma:
        vb2_put_vma(buf->vma);
 
 fail_pages:
-       up_read(&current->mm->mmap_sem);
        kfree(pages); /* kfree is NULL-proof */
 
 fail_buf:
This page took 0.040538 seconds and 5 git commands to generate.