]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/media/v4l2-core/videobuf-dma-sg.c
Merge branch 'pipe-exclusive-wakeup'
[linux.git] / drivers / media / v4l2-core / videobuf-dma-sg.c
index 66a6c6c236a79f38e31a1d6984f8591b16b96cbc..13b65ed9e74c94d768920d987d2d032ef838037f 100644 (file)
@@ -183,12 +183,12 @@ static int videobuf_dma_init_user_locked(struct videobuf_dmabuf *dma,
        dprintk(1, "init user [0x%lx+0x%lx => %d pages]\n",
                data, size, dma->nr_pages);
 
-       err = get_user_pages(data & PAGE_MASK, dma->nr_pages,
+       err = pin_user_pages(data & PAGE_MASK, dma->nr_pages,
                             flags | FOLL_LONGTERM, dma->pages, NULL);
 
        if (err != dma->nr_pages) {
                dma->nr_pages = (err >= 0) ? err : 0;
-               dprintk(1, "get_user_pages: err=%d [%d]\n", err,
+               dprintk(1, "pin_user_pages: err=%d [%d]\n", err,
                        dma->nr_pages);
                return err < 0 ? err : -EINVAL;
        }
@@ -349,8 +349,8 @@ int videobuf_dma_free(struct videobuf_dmabuf *dma)
        BUG_ON(dma->sglen);
 
        if (dma->pages) {
-               for (i = 0; i < dma->nr_pages; i++)
-                       put_page(dma->pages[i]);
+               unpin_user_pages_dirty_lock(dma->pages, dma->nr_pages,
+                                           dma->direction == DMA_FROM_DEVICE);
                kfree(dma->pages);
                dma->pages = NULL;
        }